Changeset b32f7a496c511e07158f0d0752addedc2b378328 for org.axdt.as3.test/src/org/axdt/as3/imp/parser/BasicParserTest.java
- Timestamp:
- 06/28/09 23:36:50 (15 months ago)
- Children:
- 2aa064d78a2c1162da70e2413b7c386278a1473d
- Parents:
- 1567fcce2711ee19e98902f8ef734f1a7dd9731f
- git-author:
- mb0 <mb0@…> (06/14/09 23:10:19)
- git-committer:
- mb0 <mb0@…> (06/28/09 23:36:50)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
org.axdt.as3.test/src/org/axdt/as3/imp/parser/BasicParserTest.java
r82cecb8 rb32f7a4 1 1 package org.axdt.as3.imp.parser; 2 3 import java.util.ArrayList; 2 4 3 5 import junit.framework.TestCase; … … 10 12 import org.axdt.as3.imp.parser.Ast.FunctionExpression; 11 13 import org.axdt.as3.imp.parser.Ast.IDirective; 12 import org.axdt.as3.imp.parser.Ast.ImportDirective List;14 import org.axdt.as3.imp.parser.Ast.ImportDirectives; 13 15 import org.axdt.as3.imp.parser.Ast.InterfaceDefinition; 14 16 import org.axdt.as3.imp.parser.Ast.Name; … … 19 21 20 22 public class BasicParserTest extends TestCase { 23 private AS3Parser parser; 21 24 private Program parse(String content) { 22 return ParseUtil.parse(content); 23 } 24 25 parser = ParseUtil.parser(content); 26 return ParseUtil.parse(parser,0); 27 } 28 private <T extends IDirective> T assertFirstDirective(String string, Class<T> clazz) { 29 parser = ParseUtil.parser(string); 30 Program result = ParseUtil.parse(parser,0); 31 return assertFirstDirective(result, clazz); 32 } 33 @SuppressWarnings("unchecked") 34 private <T extends IDirective> T assertFirstDirective(Program prog, Class<T> clazz) { 35 IDirective directive = null; 36 if (prog != null) { 37 directive = prog.getDirectives().getDirectiveAt(0); 38 } else { 39 // TODO gather some info 40 ArrayList tokens = parser.getIPrsStream().getTokens(); 41 assertNotNull("parser error "+ tokens.toString(),prog); 42 } 43 assertNotNull(directive); 44 assertEquals(clazz, directive.getClass()); 45 return (T) directive; 46 } 25 47 public void testPackage() throws Exception { 26 48 Program prog; … … 54 76 prog = parse("package P{} f();"); 55 77 assertEquals(1, prog.getPackages().size()); 56 assert Equals(1, prog.getDirectives().size());78 assertFirstDirective(prog,ExpressionStatement.class); 57 79 58 80 // bom works just as expected … … 67 89 prog = parse("package P{} package Q{} function f(){}"); 68 90 assertEquals(2, prog.getPackages().size()); 69 assert Equals(1, prog.getDirectives().size());91 assertFirstDirective(prog,FunctionDefinition.class); 70 92 71 93 System.out.print("expected"); … … 75 97 76 98 public void testNamespace() throws Exception { 77 Program prog;78 99 NamespaceDefinition dir; 79 100 80 prog = parse("namespace NS1"); 81 assertEquals(true, prog.getDirectives().getDirectiveAt(0) instanceof NamespaceDefinition); 82 dir = (NamespaceDefinition) prog.getDirectives().getDirectiveAt(0); 101 dir = assertFirstDirective("namespace NS1",NamespaceDefinition.class); 83 102 assertEquals("NS1", dir.getName().toString()); 84 103 85 prog = parse("namespace NS2 = NS1"); 86 assertEquals(true, prog.getDirectives().getDirectiveAt(0) instanceof NamespaceDefinition); 87 dir = (NamespaceDefinition) prog.getDirectives().getDirectiveAt(0); 104 dir = assertFirstDirective("namespace NS2 = NS1",NamespaceDefinition.class); 88 105 assertEquals("NS2", dir.getName().toString()); 89 106 assertEquals("NS1", dir.getAssignment().toString()); 90 107 91 prog = parse("namespace NS3 = \"http://www.macromedia.com/flash/2005\""); 92 assertEquals(true, prog.getDirectives().getDirectiveAt(0) instanceof NamespaceDefinition); 93 dir = (NamespaceDefinition) prog.getDirectives().getDirectiveAt(0); 108 dir = assertFirstDirective("namespace NS3 = \"http://www.macromedia.com/flash/2005\"",NamespaceDefinition.class); 94 109 assertEquals("NS3", dir.getName().toString()); 95 110 assertEquals(StringLiteral.class, dir.getAssignment().getClass()); … … 98 113 99 114 public void testImport() throws Exception { 100 Program prog; ImportDirectiveList list; 101 prog = parse("import A;"); 102 assertEquals(ImportDirectiveList.class, prog.getDirectives().getDirectiveAt(0).getClass()); 103 prog = parse("import A; import a.b.C; import abc.*;"); 104 list = (ImportDirectiveList) prog.getDirectives().getDirectiveAt(0); 115 ImportDirectives list; 116 list = assertFirstDirective("import A;",ImportDirectives.class); 117 assertEquals(1, list.size()); 118 list = assertFirstDirective("import A; import a.b.C; import abc.*;",ImportDirectives.class); 105 119 assertEquals(3, list.size()); 106 120 assertEquals("A", list.getImportDirectiveAt(0).getName().toString()); … … 112 126 113 127 public void testInterface() throws Exception { 114 Program prog; InterfaceDefinition type; 115 116 prog = parse("interface A {}"); 117 assertEquals(InterfaceDefinition.class, prog.getDirectives().getDirectiveAt(0).getClass()); 118 type = (InterfaceDefinition) prog.getDirectives().getDirectiveAt(0); 128 InterfaceDefinition type; 129 130 type = assertFirstDirective("interface A {}",InterfaceDefinition.class); 119 131 assertEquals(Name.class, type.getName().getClass()); 120 132 assertEquals(null, type.getBody().getDirectives()); 121 133 122 prog = parse("interface a.b.C {}"); 123 assertEquals(InterfaceDefinition.class, prog.getDirectives().getDirectiveAt(0).getClass()); 124 type = (InterfaceDefinition) prog.getDirectives().getDirectiveAt(0); 134 type = assertFirstDirective("interface a.b.C {}",InterfaceDefinition.class); 125 135 assertEquals(Name.class, type.getName().getClass()); 126 136 assertEquals(null, type.getBody().getDirectives()); 127 137 128 prog = parse("interface A { function f():A;function g():B;}"); 129 assertEquals(InterfaceDefinition.class, prog.getDirectives().getDirectiveAt(0).getClass()); 130 type = (InterfaceDefinition) prog.getDirectives().getDirectiveAt(0); 138 type = assertFirstDirective("interface A { function f():A;function g():B;}",InterfaceDefinition.class); 131 139 assertEquals(2, type.getBody().getDirectives().size()); 132 140 133 prog = parse("internal interface A {} public interface B{}"); 134 assertEquals(AnnotatedDirective.class, prog.getDirectives().getDirectiveAt(0).getClass()); 135 assertEquals(AnnotatedDirective.class, prog.getDirectives().getDirectiveAt(1).getClass()); 141 assertFirstDirective("internal interface A {}",AnnotatedDirective.class); 142 assertFirstDirective("public interface A {}",AnnotatedDirective.class); 136 143 } 137 144 138 145 public void testVariable() throws Exception { 139 Program prog; IDirective directive; 140 141 prog = parse("var a;"); 142 directive = prog.getDirectives().getDirectiveAt(0); 143 assertEquals(VariableDefinition.class, directive.getClass()); 144 145 assertEquals(AnnotatedDirective.class, parse("static var a;").getDirectives().getDirectiveAt(0).getClass()); 146 assertEquals(AnnotatedDirective.class, parse("prototype var a;").getDirectives().getDirectiveAt(0).getClass()); 147 assertEquals(AnnotatedDirective.class, parse("private var a;").getDirectives().getDirectiveAt(0).getClass()); 148 assertEquals(AnnotatedDirective.class, parse("public var a;").getDirectives().getDirectiveAt(0).getClass()); 149 assertEquals(AnnotatedDirective.class, parse("protected var a;").getDirectives().getDirectiveAt(0).getClass()); 150 assertEquals(AnnotatedDirective.class, parse("internal var a;").getDirectives().getDirectiveAt(0).getClass()); 146 assertFirstDirective("var a;",VariableDefinition.class); 147 assertFirstDirective("static var a;",AnnotatedDirective.class); 148 assertFirstDirective("prototype var a;",AnnotatedDirective.class); 149 assertFirstDirective("private var a;",AnnotatedDirective.class); 150 assertFirstDirective("public var a;",AnnotatedDirective.class); 151 assertFirstDirective("protected var a;",AnnotatedDirective.class); 152 assertFirstDirective("internal var a;",AnnotatedDirective.class); 151 153 } 152 154 153 155 public void testFunction() throws Exception { 154 Program prog; IDirective directive; FunctionDefinition def; 155 prog = parse("function f():void{}"); 156 directive = prog.getDirectives().getDirectiveAt(0); 157 assertEquals(FunctionDefinition.class, directive.getClass()); 158 159 prog = parse("function f(b:B){a = b;a.c();}"); 160 directive = prog.getDirectives().getDirectiveAt(0); 161 def = (FunctionDefinition) directive; 156 IDirective directive; FunctionDefinition def; 157 def = assertFirstDirective("function f():void{}",FunctionDefinition.class); 158 159 def = assertFirstDirective("function f(b:B){a = b;a.c();}",FunctionDefinition.class); 162 160 assertEquals("f", def.getName().toString()); 163 161 assertEquals(2, def.getBlock().getDirectives().size()); … … 165 163 assertEquals(null, common.getResultType()); 166 164 167 assertEquals(FunctionDefinition.class, parse("function f(){}").getDirectives().getDirectiveAt(0).getClass()); 168 assertEquals(FunctionDefinition.class, parse("function f(...){}").getDirectives().getDirectiveAt(0).getClass()); 169 assertEquals(FunctionDefinition.class, parse("function f(...b){}").getDirectives().getDirectiveAt(0).getClass()); 170 assertEquals(FunctionDefinition.class, parse("function f(...b:B){}").getDirectives().getDirectiveAt(0).getClass()); 171 assertEquals(FunctionDefinition.class, parse("function f(a:A,...b:B){}").getDirectives().getDirectiveAt(0).getClass()); 172 173 assertEquals(AnnotatedDirective.class, parse("static function a(){}").getDirectives().getDirectiveAt(0).getClass()); 174 assertEquals(AnnotatedDirective.class, parse("override function a(){}").getDirectives().getDirectiveAt(0).getClass()); 175 assertEquals(AnnotatedDirective.class, parse("final function a(){}").getDirectives().getDirectiveAt(0).getClass()); 176 assertEquals(AnnotatedDirective.class, parse("private function a(){}").getDirectives().getDirectiveAt(0).getClass()); 177 assertEquals(AnnotatedDirective.class, parse("public function a(){}").getDirectives().getDirectiveAt(0).getClass()); 178 assertEquals(AnnotatedDirective.class, parse("protected function a(){}").getDirectives().getDirectiveAt(0).getClass()); 179 assertEquals(AnnotatedDirective.class, parse("internal function a(){}").getDirectives().getDirectiveAt(0).getClass()); 180 assertEquals(AnnotatedDirective.class, parse("prototype function a(){}").getDirectives().getDirectiveAt(0).getClass()); 181 assertEquals(AnnotatedDirective.class, parse("native function a(){}").getDirectives().getDirectiveAt(0).getClass()); 182 183 prog = parse("function(b:B){a = b;};"); 184 directive = prog.getDirectives().getDirectiveAt(0); 185 assertEquals(ExpressionStatement.class, directive.getClass()); 165 def = assertFirstDirective("function f(){}",FunctionDefinition.class); 166 def = assertFirstDirective("function f(...){}",FunctionDefinition.class); 167 def = assertFirstDirective("function f(...b){}",FunctionDefinition.class); 168 def = assertFirstDirective("function f(...b:B){}",FunctionDefinition.class); 169 def = assertFirstDirective("function f(a:A,...b:B){}",FunctionDefinition.class); 170 def = assertFirstDirective("function get f(){}",FunctionDefinition.class); 171 def = assertFirstDirective("function get f(i){}",FunctionDefinition.class); 172 def = assertFirstDirective("function get f(a:A,b:B){}",FunctionDefinition.class); 173 // TODO fix parameter declaration 174 def = assertFirstDirective("function set(){}",FunctionDefinition.class); 175 def = assertFirstDirective("function get(a,b){}",FunctionDefinition.class); 176 def = assertFirstDirective("function get(a:A,b){}",FunctionDefinition.class); 177 def = assertFirstDirective("function get(a:A,b:*){}",FunctionDefinition.class); 178 def = assertFirstDirective("function get(a:A,b:*):C{}",FunctionDefinition.class); 179 def = assertFirstDirective("function get(){}",FunctionDefinition.class); 180 def = assertFirstDirective("function get(a:A){}",FunctionDefinition.class); 181 def = assertFirstDirective("function get(a:A,b:B,c:C):D {}",FunctionDefinition.class); 182 183 assertFirstDirective("static function a(){}", AnnotatedDirective.class); 184 assertFirstDirective("override function a(){}", AnnotatedDirective.class); 185 assertFirstDirective("final function a(){}", AnnotatedDirective.class); 186 assertFirstDirective("private function a(){}", AnnotatedDirective.class); 187 assertFirstDirective("public function a(){}", AnnotatedDirective.class); 188 assertFirstDirective("protected function a(){}", AnnotatedDirective.class); 189 assertFirstDirective("internal function a(){}", AnnotatedDirective.class); 190 assertFirstDirective("prototype function a(){}", AnnotatedDirective.class); 191 assertFirstDirective("native function a(){}", AnnotatedDirective.class); 192 193 directive = assertFirstDirective("function(b:B){a = b;};", ExpressionStatement.class); 186 194 assertEquals(FunctionExpression.class, ((ExpressionStatement)directive).getExpression().getClass()); 187 195 } 188 196 189 197 public void testClass() throws Exception { 190 Program prog; ClassDefinition def; 191 prog = parse("class T{}"); 192 assertEquals(ClassDefinition.class, prog.getDirectives().getDirectiveAt(0).getClass()); 193 prog = parse("class T{function T(){}function S(){}}"); 194 def = (ClassDefinition) prog.getDirectives().getDirectiveAt(0); 198 ClassDefinition def; 199 assertFirstDirective("class T{}", ClassDefinition.class); 200 def = assertFirstDirective("class T{function T(){}function S(){}}", ClassDefinition.class); 195 201 assertEquals("T", def.getName().toString()); 196 202 assertEquals(2, def.getBody().getDirectives().size()); … … 198 204 assertEquals(FunctionDefinition.class, def.getBody().getDirectives().getDirectiveAt(1).getClass()); 199 205 200 prog = parse("internal class A {} public class B{} final class C{} dynamic class D{}"); 201 assertEquals(AnnotatedDirective.class, prog.getDirectives().getDirectiveAt(0).getClass()); 202 assertEquals(AnnotatedDirective.class, prog.getDirectives().getDirectiveAt(1).getClass()); 203 assertEquals(AnnotatedDirective.class, prog.getDirectives().getDirectiveAt(2).getClass()); 204 assertEquals(AnnotatedDirective.class, prog.getDirectives().getDirectiveAt(3).getClass()); 206 assertFirstDirective("internal class A {}", AnnotatedDirective.class); 207 assertFirstDirective("public class A {}", AnnotatedDirective.class); 208 assertFirstDirective("dynamic class A {}", AnnotatedDirective.class); 209 assertFirstDirective("final class A {}", AnnotatedDirective.class); 205 210 } 206 211
