Warning: session_start(): open(/var/lib/php/sessions/sess_mfqd7odg92gnltkkabkkoker16, 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.noImports();
assertEmpty(completer.parser.globalClassNames());
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");
testVars();
testMethodsOfNewInstance();
testMethodsOfNewInstanceInVar();
testMethodsOfFunctionResultInVar();
testMethodsOfLambdaParameter();
printWithPrecedingNL("Auto-completer works!");
}
svoid #testVars {
// auto-complete variable names
var parser = new GazelleV_LeftArrowScriptParser;
parser.noImports();
var completer = new LeftArrowScriptAutoCompleter(parser);
completer.seekEnd("a <- 1\n");
pnl("knowVarsByTokenIdx", completer.knownVarsByTokenIdx);
assertSetsEqual(print(listPlus(completer.predefinedExpressions(), "a")),
print(completer.getCompletions()));
}
svoid #testMethodsOfNewInstance {
var parser = enableScaffolding(new GazelleV_LeftArrowScriptParser);
//parser.noImports();
var completer = enableScaffolding(new LeftArrowScriptAutoCompleter(parser));
completer.seekEnd("new Double, ");
assertContains(print(completer.getCompletions()), "doubleValue");
}
svoid #testMethodsOfNewInstanceInVar {
var parser = enableScaffolding(new GazelleV_LeftArrowScriptParser);
parser.onTypeHook(type -> print("TypeHook at " + parser.t() + " (" + parser.tokIdx() + ": " + type);
//parser.noImports();
var completer = /*enableScaffolding*/(new LeftArrowScriptAutoCompleter(parser));
completer.seekEnd("x <- new Double; x ");
//pnl("TYPEHOOK", completer.typeHooks);
assertContains(print(completer.getCompletions()), "doubleValue");
}
svoid #testMethodsOfFunctionResultInVar {
var parser = enableScaffolding(new GazelleV_LeftArrowScriptParser);
var completer = /*enableScaffolding*/(new LeftArrowScriptAutoCompleter(parser));
completer.seekEnd([[ def myFunc: S { "" }; x <- myFunc; x ]]);
assertContains(print(completer.getCompletions()), "length");
}
svoid #testMethodsOfLambdaParameter {
var parser = enableScaffolding(new GazelleV_LeftArrowScriptParser);
var completer = /*enableScaffolding*/(new LeftArrowScriptAutoCompleter(parser));
completer.seekEnd([[ IVF1 a: S -> ]]);
assertContains(print(completer.getCompletions()), "length");
}
sclass #FunctionContainer {
class MyName {}
}