Warning: session_start(): open(/var/lib/php/sessions/sess_ma3f9oppdf58a7qa28glgtp48i, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
scope test_LeftArrowScriptAutoCompleter
svoid test_LeftArrowScriptAutoCompleter() {
new GazelleV_LeftArrowScriptParser parser;
LeftArrowScriptAutoCompleter completer = new(parser);
// simple test for completing global function name
completer.globalMethodNames = -> ll("add", "pat", "lol");
completer.parser.importedPackages = -> null; // to suppress class names being returned
completer.seek("a", 1);
assertEqualsVerbose("a", completer.typedCharacters());
assertEqualsVerbose(ll("add", "pat", "false"), completer.getCompletions());
// test that completed word is not shown as suggestion
parser = new GazelleV_LeftArrowScriptParser;
completer = new LeftArrowScriptAutoCompleter(parser);
completer.globalMethodNames = -> ll("add", "pat", "lol");
completer.parser.importedPackages = -> null; // to suppress class names being returned
completer.seek("add", 3);
assertFalseVerbose(contains(completer.getCompletions(), "add"));
// test for standard function arguments (untyped, will break when
// we introduce typing)
parser = new GazelleV_LeftArrowScriptParser;
completer = new LeftArrowScriptAutoCompleter(parser);
completer.globalMethodNames = -> ll("add", "pat", "lol");
completer.parser.importedPackages = -> null; // to suppress class names being returned
completer.seek("add ", 4);
assertContainsAll(completer.getCompletions(), ll("true", "false", "null"));
// complete class name
for (S text : ll("Mat", "Mat ")) {
parser = new GazelleV_LeftArrowScriptParser; // restore class finding
completer = new LeftArrowScriptAutoCompleter(parser);
completer.seek(printQuoted(+text), 3);
var completions = completer.getCompletions();
pnlReversed(takeFirst(10, completions));
assertEquals(0, indexOf(completions, "Math"));
}
// same after "new"
parser = new GazelleV_LeftArrowScriptParser; // restore class finding
completer = new LeftArrowScriptAutoCompleter(parser);
completer.seek(print("new Inte"), 8);
var completions = completer.getCompletions();
pnlReversed(takeFirst(10, completions));
assertEquals(0, indexOf(completions, "Integer"));
// find inner classes of global function container
parser = new GazelleV_LeftArrowScriptParser; // restore class finding
parser.allowTheWorld(FunctionContainer.class);
completer = new LeftArrowScriptAutoCompleter(parser);
completer.seek(print("MyN"), 3);
completions = completer.getCompletions();
pnlReversed(takeFirst(10, completions));
assertEquals(0, indexOf(completions, "MyName"));
// auto-complete global script-defined functions
parser = new GazelleV_LeftArrowScriptParser;
parser.functionDefs.put("hello", new GazelleV_LeftArrowScript.FunctionDef);
completer = new LeftArrowScriptAutoCompleter(parser);
completer.seekEnd("he");
completions = completer.getCompletions();
assertContains(completions, "hello");
// auto-complete known variables (TODO)
/*parser = new GazelleV_LeftArrowScriptParser;
parser.importedPackages = -> null;
completer = new LeftArrowScriptAutoCompleter(parser);
completer.seekEnd("a <- 1\n");
pnl("knowVarsByTokenIdx", completer.knownVarsByTokenIdx);
assertSetsEqual(listPlus(completer.predefinedExpressions(), "a"),
completer.getCompletions());*/
}
sclass #FunctionContainer {
class MyName {}
}