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 = -> ll(); // 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 completer.seek("add", 3); assertFalseVerbose(contains(completer.getCompletions(), "add")); // test for standard function arguments (untyped, will break when // we introduce typing) completer.seek("add ", 4); assertContainsAll(completer.getCompletions(), ll("true", "false", "null")); // complete class name parser = new GazelleV_LeftArrowScriptParser; // restore class finding completer = new LeftArrowScriptAutoCompleter(parser); for (S text : ll("Mat", "Mat ")) { completer.seek(printQuoted(+text), 3); var completions = completer.getCompletions(); pnlReversed(takeFirst(10, completions)); assertEquals(0, indexOf(completions, "Math")); } // same after "new" 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 completer = new LeftArrowScriptAutoCompleter(parser); // restore class finding parser.allowTheWorld(FunctionContainer.class); completer.seek(print("MyN"), 3); completions = completer.getCompletions(); pnlReversed(takeFirst(10, completions)); assertEquals(0, indexOf(completions, "MyName")); } sclass #FunctionContainer { class MyName {} }