compiler/tests/PPCompiledJavaSyntaxTest.st
changeset 453 bd5107faf4d6
parent 451 989570319d14
parent 452 9f4558b3be66
child 454 a9cd5ea7cc36
equal deleted inserted replaced
451:989570319d14 453:bd5107faf4d6
     1 "{ Package: 'stx:goodies/petitparser/compiler/tests' }"
       
     2 
       
     3 "{ NameSpace: Smalltalk }"
       
     4 
       
     5 PPJavaLexiconTest subclass:#PPCompiledJavaSyntaxTest
       
     6 	instanceVariableNames:''
       
     7 	classVariableNames:''
       
     8 	poolDictionaries:''
       
     9 	category:'PetitCompiler-Tests-Java'
       
    10 !
       
    11 
       
    12 !PPCompiledJavaSyntaxTest class methodsFor:'as yet unclassified'!
       
    13 
       
    14 resources
       
    15 	^ (OrderedCollection with: PPCompiledJavaResource)
       
    16 		addAll: super resources;
       
    17 		yourself
       
    18 ! !
       
    19 
       
    20 !PPCompiledJavaSyntaxTest methodsFor:'accessing'!
       
    21 
       
    22 context
       
    23 	^ PPCContext new
       
    24 !
       
    25 
       
    26 parserClass
       
    27 	^ Smalltalk at: #PPCompiledJavaSyntax
       
    28 !
       
    29 
       
    30 parserInstanceFor: aSymbol
       
    31 	^ (Smalltalk at: #PPCompiledJavaSyntax) new startSymbol: aSymbol
       
    32 ! !
       
    33 
       
    34 !PPCompiledJavaSyntaxTest methodsFor:'testing'!
       
    35 
       
    36 testAdditiveExpression1
       
    37 
       
    38 	self parse: 'true'
       
    39 		rule: #additiveExpression
       
    40 !
       
    41 
       
    42 testAdditiveExpression2
       
    43 
       
    44 	self parse: '3 + 5'
       
    45 		rule: #additiveExpression
       
    46 !
       
    47 
       
    48 testAdditiveExpression3
       
    49 
       
    50 	self parse: '4 + 8 - 2 + 9'
       
    51 		rule: #additiveExpression
       
    52 !
       
    53 
       
    54 testAndExpression1
       
    55 
       
    56 	self parse: 'true'
       
    57 		rule: #andExpression
       
    58 !
       
    59 
       
    60 testBlock1
       
    61 
       
    62 	self parse: '{	}'
       
    63 		rule: #block
       
    64 !
       
    65 
       
    66 testBlock2
       
    67 
       
    68 	self
       
    69 		parse:
       
    70 		'{
       
    71 			System.out.println("Hello World!!");
       
    72  	       	System.out.println("Hello World!!");
       
    73 		}'
       
    74 		rule: #block
       
    75 !
       
    76 
       
    77 testCompilationUnit1
       
    78 
       
    79 	self parse: 'package foo;
       
    80 				public class CU1 {}'
       
    81 	rule: #compilationUnit
       
    82 !
       
    83 
       
    84 testCompilationUnit2
       
    85 
       
    86 	self parse: 'package foo;
       
    87 				import foo.Bar;
       
    88 				public class CU2 {
       
    89 				}'
       
    90 	rule: #compilationUnit
       
    91 !
       
    92 
       
    93 testCompilationUnit3
       
    94 
       
    95 	self parse: 'class myfirstjavaprog
       
    96 {  
       
    97 	public static void main(String args[])
       
    98 	{
       
    99 	   System.out.println("Hello World!!");
       
   100 	}
       
   101 }'
       
   102 	rule: #compilationUnit
       
   103 !
       
   104 
       
   105 testCompilationUnit4
       
   106 
       
   107 	self parse: '
       
   108 					public class OddEven {
       
   109  						private int input;
       
   110  					  public static void main(String[] args) {
       
   111      					OddEven number = new OddEven();
       
   112 					        number.showDialog(); }
       
   113 					public void showDialog() {
       
   114        
       
   115 	try {
       
   116           
       
   117 	    input = Integer.parseInt(JOptionPane.showInputDialog("Please Enter A Number"));
       
   118 	    calculate();
       
   119 	} catch (NumberFormatException e) {
       
   120             
       
   121 	    System.err.println("ERROR: Invalid input. Please type in a numerical value.");
       
   122 	}
       
   123     }
       
   124 
       
   125 private void calculate() {
       
   126 	if (input % 2 == 0) {
       
   127 	    System.out.println("Even");
       
   128 	} else {
       
   129 	    System.out.println("Odd");
       
   130 	}
       
   131     }
       
   132 					}'
       
   133 	rule: #compilationUnit
       
   134 !
       
   135 
       
   136 testCompilationUnit5
       
   137 
       
   138 	self parse: 'class myfirstjavaprog
       
   139 {  
       
   140 
       
   141 		public myfirstjavaprog() {
       
   142 			
       
   143 		}
       
   144 	
       
   145 	public static void main(String args[])
       
   146 	{
       
   147 	   System.out.println("Hello World!!");
       
   148 	}
       
   149 }'
       
   150 	rule: #compilationUnit
       
   151 !
       
   152 
       
   153 testConditionalAndExpression1
       
   154 
       
   155 	self parse: 'true'
       
   156 		rule: #conditionalAndExpression
       
   157 !
       
   158 
       
   159 testConditionalOrExpression1
       
   160 
       
   161 	self parse: 'true'
       
   162 		rule: #conditionalOrExpression
       
   163 !
       
   164 
       
   165 testEqualityExpression1
       
   166 
       
   167 	self 
       
   168 		parse: 'true'
       
   169 		rule: #equalityExpression
       
   170 !
       
   171 
       
   172 testExclusiveOrExpression1
       
   173 
       
   174 	self parse: 'true'
       
   175 		rule: #exclusiveOrExpression
       
   176 !
       
   177 
       
   178 testExpression1
       
   179 
       
   180 	self parse: '1 + 2'
       
   181 		rule: #expression
       
   182 !
       
   183 
       
   184 testExpression2
       
   185 
       
   186 	self parse: 'true'
       
   187 		rule: #expression
       
   188 !
       
   189 
       
   190 testExpression3
       
   191 
       
   192 	self parse: 'a.method()'
       
   193 		rule: #expression
       
   194 !
       
   195 
       
   196 testExpression4
       
   197 
       
   198 	self parse: 'a'
       
   199 		rule: #expression
       
   200 !
       
   201 
       
   202 testExpression5
       
   203 
       
   204 	self parse: 'a += 5'
       
   205 		rule: #expression
       
   206 !
       
   207 
       
   208 testFormalParameters1
       
   209 
       
   210 	self 
       
   211 		parse: '
       
   212     (String s, Object parameterType)'
       
   213 	rule: #formalParameters
       
   214 !
       
   215 
       
   216 testFormalParameters2
       
   217 
       
   218 	self 
       
   219 		parse: '
       
   220     (Object ... parameterType)'
       
   221 	rule: #formalParameters
       
   222 !
       
   223 
       
   224 testFormalParameters3
       
   225 
       
   226 	self 
       
   227 		parse: '(String name, Class<?>... parameterTypes)'
       
   228 	rule: #formalParameters
       
   229 !
       
   230 
       
   231 testFormalParameters4
       
   232 
       
   233 	self 
       
   234 		parse: '(int one, int two, int three, int four)'
       
   235 		rule: #formalParameters
       
   236 !
       
   237 
       
   238 testFormalParameters5
       
   239 
       
   240 	self 
       
   241 		parse: '()'
       
   242 		rule: #formalParameters
       
   243 !
       
   244 
       
   245 testIdentifier
       
   246 
       
   247 	self parse: 'method'
       
   248 		rule: #identifier
       
   249 !
       
   250 
       
   251 testIfStatement1
       
   252 
       
   253 	self parse: 'if (true) {}'
       
   254 		rule: #ifStatement
       
   255 !
       
   256 
       
   257 testIfStatement2
       
   258 
       
   259 	self parse: 'if (true) {} else {}'
       
   260 		rule: #ifStatement
       
   261 !
       
   262 
       
   263 testIfStatement3
       
   264 
       
   265 	self parse: '
       
   266 	if (true) 
       
   267 		{int a = 0; a = 1;}
       
   268 	else
       
   269 		{return false;}'
       
   270 		rule: #ifStatement
       
   271 !
       
   272 
       
   273 testIfStatement4
       
   274 
       
   275 	self parse: 'if (true) a = 0;'
       
   276 		rule: #ifStatement
       
   277 !
       
   278 
       
   279 testIfStatement5
       
   280 
       
   281 	self parse: 'if (a < 4) {}'
       
   282 		rule: #ifStatement
       
   283 !
       
   284 
       
   285 testImportDeclaration1
       
   286 
       
   287 	self parse: 'import foo.Top;'
       
   288 		rule: #importDeclaration
       
   289 !
       
   290 
       
   291 testImportDeclaration2
       
   292 
       
   293 	self parse: 'import foo.Top2.*;'
       
   294 		rule: #importDeclaration
       
   295 !
       
   296 
       
   297 testInclusiveOrExpression1
       
   298 
       
   299 	self parse: 'true'
       
   300 		rule: #inclusiveOrExpression
       
   301 !
       
   302 
       
   303 testInstanceofExpression1
       
   304 
       
   305 	self 
       
   306 		parse: 'true'
       
   307 		rule: #instanceofExpression
       
   308 !
       
   309 
       
   310 testJavaToken
       
   311 
       
   312 	self parse: 'false' rule: #literal.
       
   313 	self assert: (result isKindOf: PPJavaToken).
       
   314 	self assert: (result inputValue = 'false').
       
   315 !
       
   316 
       
   317 testLocalVariableDeclaration1
       
   318 
       
   319 	self parse: 'Type name'
       
   320 		rule: #localVariableDeclaration
       
   321 !
       
   322 
       
   323 testLocalVariableDeclaration2
       
   324 
       
   325 	self parse: 'Type name = value, name2'
       
   326 		rule: #localVariableDeclaration
       
   327 !
       
   328 
       
   329 testLocalVariableDeclarationStatement1
       
   330 
       
   331 	self parse: 'int i = 5;'
       
   332 		rule: #localVariableDeclarationStatement
       
   333 !
       
   334 
       
   335 testLocalVariableDeclarationStatement2
       
   336 
       
   337 	self parse: 'int i, j = 6;'
       
   338 		rule: #localVariableDeclarationStatement
       
   339 !
       
   340 
       
   341 testLocalVariableDeclarationStatement3
       
   342 
       
   343 	self parse: 'Srting str, in, g;'
       
   344 		rule: #localVariableDeclarationStatement
       
   345 !
       
   346 
       
   347 testMethodDeclaration3
       
   348 
       
   349 	self 
       
   350 		parse: '
       
   351     public void getMethod(String s, Object ... parameterType)
       
   352     {
       
   353     }'
       
   354 	rule: #methodDeclaration
       
   355 !
       
   356 
       
   357 testMethodDeclaration4
       
   358 
       
   359 	self 
       
   360 		parse: '
       
   361     public void getMethod(String s, int o)
       
   362     {
       
   363     }'
       
   364 	rule: #methodDeclaration
       
   365 !
       
   366 
       
   367 testMultiplicativeExpression1
       
   368 
       
   369 	self parse: 'true'
       
   370 		rule: #multiplicativeExpression
       
   371 !
       
   372 
       
   373 testMultiplicativeExpression2
       
   374 
       
   375 	self parse: '3 * 5'
       
   376 		rule: #multiplicativeExpression
       
   377 !
       
   378 
       
   379 testMultiplicativeExpression3
       
   380 
       
   381 	self parse: '4 * 8 / 2 * 9'
       
   382 		rule: #multiplicativeExpression
       
   383 !
       
   384 
       
   385 testNormalParameterDecl1
       
   386 
       
   387 	self parse: 'final int integers[]'
       
   388 		rule: #normalParameterDecl
       
   389 !
       
   390 
       
   391 testNormalParameterDecl2
       
   392 
       
   393 	self parse: 'String str'
       
   394 		rule: #normalParameterDecl
       
   395 !
       
   396 
       
   397 testPackageDeclaration
       
   398 	self 
       
   399 		parse: 'package java.util;'
       
   400 		rule: #packageDeclaration
       
   401 !
       
   402 
       
   403 testPackageDeclaration1
       
   404 
       
   405 	self parse: 'package foo;'
       
   406 		rule: #packageDeclaration
       
   407 !
       
   408 
       
   409 testPackageDeclaration2
       
   410 
       
   411 	self parse: 'package foo.Bar;'
       
   412 		rule: #packageDeclaration
       
   413 !
       
   414 
       
   415 testPackageDeclaration3
       
   416 
       
   417 	self fail: 'package ;'
       
   418 		rule: #packageDeclaration
       
   419 !
       
   420 
       
   421 testPrimary1
       
   422 
       
   423 	self 
       
   424 		parse: 'true'
       
   425 		rule: #primary
       
   426 !
       
   427 
       
   428 testPrimary2
       
   429 
       
   430 	self 
       
   431 		parse: '"Java string"'
       
   432 		rule: #primary
       
   433 !
       
   434 
       
   435 testPrimaryWithselectors1
       
   436 
       
   437 	self 
       
   438 		parse: 'true'
       
   439 		rule: #primaryWithselectors
       
   440 !
       
   441 
       
   442 testQualifiedName1
       
   443 
       
   444 	self parse: 'a.a'
       
   445 		rule: #qualifiedName
       
   446 !
       
   447 
       
   448 testRelationalExpression1
       
   449 
       
   450 	self parse: 'true'
       
   451 		rule: #relationalExpression
       
   452 !
       
   453 
       
   454 testRelationalExpression2
       
   455 
       
   456 	self parse: '3 > 5'
       
   457 		rule: #relationalExpression
       
   458 !
       
   459 
       
   460 testReturnStatement1
       
   461 
       
   462 	self parse: 'return true;'
       
   463 		rule: #returnStatement
       
   464 !
       
   465 
       
   466 testReturnStatement2
       
   467 
       
   468 	self parse: 'return;'
       
   469 		rule: #returnStatement
       
   470 !
       
   471 
       
   472 testShiftExpression1
       
   473 
       
   474 	self parse: 'true'
       
   475 		rule: #shiftExpression
       
   476 !
       
   477 
       
   478 testStatement1
       
   479 
       
   480 	self parse: 'System.out.println("Hello World!!");'
       
   481 		rule: #statement
       
   482 !
       
   483 
       
   484 testStatement2
       
   485 
       
   486 	self parse: 'return true;'
       
   487 		rule: #statement
       
   488 !
       
   489 
       
   490 testStatement3
       
   491 
       
   492 	self parse: '{}'
       
   493 		rule: #statement
       
   494 !
       
   495 
       
   496 testUnaryExpression1
       
   497 
       
   498 	self parse: 'a'
       
   499 		rule: #unaryExpression
       
   500 !
       
   501 
       
   502 testUnaryExpression2
       
   503 
       
   504 	self parse: 'true'
       
   505 		rule: #unaryExpression
       
   506 !
       
   507 
       
   508 testUnaryExpressionNotPlusMinus1
       
   509 
       
   510 	self 
       
   511 		parse: 'true'
       
   512 		rule: #unaryExpressionNotPlusMinus
       
   513 !
       
   514 
       
   515 testVariableDeclarator1
       
   516 
       
   517 	self parse: 'var'
       
   518 		rule: #variableDeclarator
       
   519 !
       
   520 
       
   521 testVariableDeclarator2
       
   522 
       
   523 	self parse: 'var[][]'
       
   524 		rule: #variableDeclarator
       
   525 !
       
   526 
       
   527 testVariableDeclarator3
       
   528 
       
   529 	self parse: 'var = a.methd()'
       
   530 		rule: #variableDeclarator
       
   531 !
       
   532 
       
   533 testWhileStatement1
       
   534 
       
   535 	self parse: 'while (true) object.executeMethod();'
       
   536 		rule: #whileStatement
       
   537 !
       
   538 
       
   539 testWhileStatement2
       
   540 
       
   541 	self parse: 'while (3>2) {block; of; statements;}'
       
   542 		rule: #whileStatement
       
   543 ! !
       
   544 
       
   545 !PPCompiledJavaSyntaxTest methodsFor:'testing-classes'!
       
   546 
       
   547 testClassDeclaration1
       
   548 
       
   549 	self parse: '//comment
       
   550 	class myfirstjavaprog
       
   551 {  
       
   552 	public static void main(String args[])
       
   553 	{
       
   554 	   System.out.println("Hello World!!");
       
   555 	}
       
   556 }'
       
   557 	rule: #classDeclaration
       
   558 !
       
   559 
       
   560 testMethodDeclaration1
       
   561 
       
   562 	self 
       
   563 		parse: 'public void aMethod() {	}'
       
   564 			rule: #methodDeclaration
       
   565 !
       
   566 
       
   567 testMethodDeclaration2
       
   568 
       
   569 	self 
       
   570 		parse: 'public aMethod() {	}'
       
   571 			rule: #methodDeclaration
       
   572 ! !
       
   573