package testAux; import static helpers.TestHelper.lineNumber; import java.util.Arrays; import java.util.List; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameter; import org.junit.runners.Parameterized.Parameters; import helpers.TestHelper; public class TestParse1 { @RunWith(Parameterized.class) public static class Test1 { @Parameter(0) public int _lineNumber; @Parameter(1) public String s; @Parameters(name = "{index}: line {0}") public static List<Object[]> createData() { return Arrays.asList(new Object[][] { {lineNumber(), "a" },{lineNumber()," (This0.that().#next() x=this.that().#next() x)" //},{lineNumber(),"{//@ExpectedClass :( \n}"//TODO: the ( is turned in \t, and \t is not accepted in comments. // more important: should // be accepted in single line strings? },{lineNumber(),TestHelper.multiLine("{" ,"C:{ k() class method Library ok() ({//@OK\n})" ," class method Library ko() ({//@KO\n})" ," }" ,"I:{interface }" ,"AI:{ k() implements This1.I}" ,"D:(" ," Any z=error This0.AI.k()" ," catch error This0.AI x This0.C.ok()" ," This0.C.ko()" ," )" ,"}"), },{lineNumber(),"{ }" },{lineNumber(),"{ reuse L42.is/nanoBase }" },{lineNumber(),"{ reuse L42.is/base(2) }"//I test that that is a well formed url },{lineNumber(),"{ reuse L42.is/nanoBase \n method foo() (void)}" },{lineNumber(),"{ C:{k() class method Library m() ({//@OK\n} )} D:C.m() }" },{lineNumber(),"{ C:{k() class method Library m() ({//@oK\n} )} D:C.m() }" },{lineNumber(),"{outer() C: {new() class method Library m() ({inner()})} D: C.m()}" },{lineNumber(),"{outer() C: {new() class method Library m() ({inner()})} D: ({inner()})}" },{lineNumber()," (This0.C).foo(bar:This0.C)" },{lineNumber()," (class This0.C c=(This0.C) c.foo(bar:This0.C))" },{lineNumber()," (This0.C c=This0.C.new() This0.D r=This0.D.new(x:c) (r).x())" },{lineNumber()," (This0.C c=This0.C.new() This0.D r=This0.D.new(x:c) (This0.D d=(r) d.x()))" },{lineNumber(),"void" },{lineNumber()," (void)" },{lineNumber(),"5N" },{lineNumber(),"5N" },{lineNumber(),"5N" },{lineNumber(),"~N" },{lineNumber()," (~N)" },{lineNumber()," (5N)" },{lineNumber(),"a- 5N" },{lineNumber(),"a-5N" },{lineNumber()," (a (5N) e)" },{lineNumber(),"a+b" },{lineNumber(),"a*c" },{lineNumber(),"a:=c" },{lineNumber(),"a+=c" },{lineNumber(),"a+=c +a" },{lineNumber(),"a+b<c-d|h" },{lineNumber(),"a + b < c - d | h" },{lineNumber(),"a + b < c - d |, h" },{lineNumber(),"a + (b < c) - d |, h" },{lineNumber(),"a + ( (b < (c))) - d |, h" },{lineNumber(),"a + ((b < (c))) - d |, h" },{lineNumber(),"a.#foo()" },{lineNumber(),"a.foo()" },{lineNumber(),"a .foo()" },{lineNumber(),"a .foo( )" },{lineNumber(),"a .foo(a:b )" },{lineNumber(),"a .foo(a:b b:c)" },{lineNumber(),"a .foo(a:!b, b:c+d)" },{lineNumber(),"a .foo( a: !b b: c7d )" },{lineNumber(),"a .foo(a:b ).bar()" },{lineNumber(),"a .foo(a:b ) .bar( )" },{lineNumber(),"a //.foo(a$$:b ) .bar( )\n" },{lineNumber(),"a //b\n //c\n " },{lineNumber(),"a[]" },{lineNumber(),"a []" },{lineNumber(),"a [ ]" },{lineNumber(),"a [//foo\n ]" },{lineNumber(),"a [x:a;]" },{lineNumber(),"a [a;]" },{lineNumber(),"a [a; ]" },{lineNumber(),"a [ a;]" },{lineNumber(),"a [ a; ]" },{lineNumber(),"a [ a; b; ]" },{lineNumber(),"a[;]" },{lineNumber(),"a [;;]" },{lineNumber(),"a [;;a]" },{lineNumber(),"a [;//foo\n ]" },{lineNumber(),"a [x:a;a]" },{lineNumber(),"a [x:a]" },{lineNumber(),"a [a]" },{lineNumber(),"a [ a; b ]" },{lineNumber(),"a [ ;;a;;; b ]" },{lineNumber(),"a [ ;;a;;; b;;; ]" },{lineNumber(),"a(a, b:c)" },{lineNumber(),"C" },{lineNumber()," ( C a = b a)" },{lineNumber()," ( a = b a)" },{lineNumber()," ( a )" },{lineNumber()," ( a = b b a)" },{lineNumber()," ( a catch error Any x foo a)" },{lineNumber()," ( a catch return Any x foo a)" },{lineNumber()," ( a catch return Any foo a)" },{lineNumber()," (mut C x=C(x) (capsule C y=x.#that() y))" },{lineNumber()," {()}" },{lineNumber()," {foo()}" },{lineNumber()," {mut ()}" },{lineNumber()," {mut foo()}" },{lineNumber()," {//bla bla \n mut foo()}" },{lineNumber()," (a )(b,x:c)" },{lineNumber()," (a-a)()" },{lineNumber(), "{ method () (b)}" },{lineNumber(), "{a( This0.A a)" +" class method This0 a( This0.A a) ##field" +" mut method This0.A a() ##field" +" read method This0.A #a() ##field" +" mut method Void a(This0.A that) ##field" +" }" },{lineNumber(),"a//bla\n"//test that is not ok without newline },{lineNumber()," S\"aaa\"" },{lineNumber()," S\"a//aa\"" },{lineNumber()," S\"+\"" },{lineNumber()," S\"(\"" },{lineNumber()," S\")\"" },{lineNumber()," S\"+(\"" },{lineNumber()," S\"+ (\"" //& ? },{lineNumber()," S\" (\"" },{lineNumber()," S\"((\"" },{lineNumber()," S\"))\"" },{lineNumber()," S\"+foo(\"" },{lineNumber(),"Gui.executeJs(S\"alert//Hello\")" },{lineNumber()," { method Foo foo()(this)}" },{lineNumber()," { method Foo foo()(this)//bla\n}" },{lineNumber()," { method Foo foo()(this)[x:this();]}" },{lineNumber()," { method Foo foo()(this)[]()()//bla\n}" //No more ok},{lineNumber()," {//bla bla \n shared //blue blue \n foo()}" }});} @Test public void termsOk(){TestHelper.isETop(s);} } @RunWith(Parameterized.class) public static class Test2 { @Parameter(0) public String s; @Parameterized.Parameters public static List<Object[]> createData() { return Arrays.asList(new Object[][] { {"a [//foo ]" },{"a .foo (a:b ) .bar( )" //??notETop("12 a+b<c-d|h"); },{"a+b ))c" },{"a`fuffa+++" },{"a \t)" },{"a ()" },{"a (a, b:c)" },{"a(a, c)" },{"a.m(a, c)" },{"(a+ (c)" },{"(a+(c)" },{"(a))+c)" },{"a//bla" //},{"a+b*c" is ok, is captured as a well formedness //now is fine instead//"a + ((b < (c))) - d |, h");}//space is required before parenthesis }});} @Test public void termsNotOk() {TestHelper.notETop(s);} } }