!include once #1034831 // Gazelle 22 Function Include for Testing svoid test_leftArrowScript_classDefs() { var test = new TestFunctionValues(l1 leftArrowVerbose); // define a class with two fields S classPrefix = "scriptClasses."; LASClassLoader cl = new LASClassLoader(mc().getClassLoader()); embedded O runScript(S code) { new GazelleV_LeftArrowScriptParser parser; parser.classDefPrefix(classPrefix); parser.lasClassLoader(cl); ret leftArrowVerbose(parser, code); } S src = [[ class MyClass { a: String b: String } ]]; Class c = cast runScript(src); assertStartsWith(print(c.getName()), classPrefix + "MyClass" + "_"); // compile same source again - make sure we get the same class object assertSame(c, runScript(src)); assertEqualsVerbose("Number of fields", 2, l(getDeclaredFields_cached(c))); assertEqualsVerbose("Type of a", S.class, getField(c, "a").getType()); assertEqualsVerbose("Type of b", S.class, getField(c, "b").getType()); // Now let's try and use a script-defined class src += [[ x <- new MyClass y <- new MyClass x a <- "yo" y a <- "oy" x a ]]; assertEqualsVerbose("yo", runScript(src)); // Now for defining some methods (yay!) src = [[ class MyClass { a: String def getA { a } def setA a { this a <- a } } x <- new MyClass x setA "abc" x getA ]]; assertEqualsVerbose("abc", runScript(src)); }