test/tools/javac/lambda/LambdaParserTest.java

changeset 1482
954541f13717
parent 1436
f6f1fd261f57
child 1503
2d2b2be57c78
     1.1 --- a/test/tools/javac/lambda/LambdaParserTest.java	Tue Jan 08 10:17:29 2013 +0100
     1.2 +++ b/test/tools/javac/lambda/LambdaParserTest.java	Tue Jan 08 13:47:57 2013 +0000
     1.3 @@ -1,5 +1,5 @@
     1.4  /*
     1.5 - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
     1.6 + * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
     1.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     1.8   *
     1.9   * This code is free software; you can redistribute it and/or modify it
    1.10 @@ -27,21 +27,21 @@
    1.11   * @bug 8003280
    1.12   * @summary Add lambda tests
    1.13   *  Add parser support for lambda expressions
    1.14 + * @library ../lib
    1.15 + * @build JavacTestingAbstractThreadedTest
    1.16 + * @run main LambdaParserTest
    1.17   */
    1.18  
    1.19 -import com.sun.source.util.JavacTask;
    1.20  import java.net.URI;
    1.21  import java.util.Arrays;
    1.22  import javax.tools.Diagnostic;
    1.23 -import javax.tools.JavaCompiler;
    1.24  import javax.tools.JavaFileObject;
    1.25  import javax.tools.SimpleJavaFileObject;
    1.26 -import javax.tools.StandardJavaFileManager;
    1.27 -import javax.tools.ToolProvider;
    1.28 +import com.sun.source.util.JavacTask;
    1.29  
    1.30 -public class LambdaParserTest {
    1.31 -
    1.32 -    static int checkCount = 0;
    1.33 +public class LambdaParserTest
    1.34 +    extends JavacTestingAbstractThreadedTest
    1.35 +    implements Runnable {
    1.36  
    1.37      enum LambdaKind {
    1.38          NILARY_EXPR("()->x"),
    1.39 @@ -173,25 +173,26 @@
    1.40      }
    1.41  
    1.42      public static void main(String... args) throws Exception {
    1.43 -
    1.44 -        //create default shared JavaCompiler - reused across multiple compilations
    1.45 -        JavaCompiler comp = ToolProvider.getSystemJavaCompiler();
    1.46 -        StandardJavaFileManager fm = comp.getStandardFileManager(null, null, null);
    1.47 -
    1.48          for (LambdaKind lk : LambdaKind.values()) {
    1.49              for (LambdaParameterKind pk1 : LambdaParameterKind.values()) {
    1.50 -                if (lk.arity() < 1 && pk1 != LambdaParameterKind.IMPLICIT) continue;
    1.51 +                if (lk.arity() < 1 && pk1 != LambdaParameterKind.IMPLICIT)
    1.52 +                    continue;
    1.53                  for (LambdaParameterKind pk2 : LambdaParameterKind.values()) {
    1.54 -                    if (lk.arity() < 2 && pk2 != LambdaParameterKind.IMPLICIT) continue;
    1.55 +                    if (lk.arity() < 2 && pk2 != LambdaParameterKind.IMPLICIT)
    1.56 +                        continue;
    1.57                      for (ModifierKind mk1 : ModifierKind.values()) {
    1.58 -                        if (mk1 != ModifierKind.NONE && lk.isShort()) continue;
    1.59 -                        if (lk.arity() < 1 && mk1 != ModifierKind.NONE) continue;
    1.60 +                        if (mk1 != ModifierKind.NONE && lk.isShort())
    1.61 +                            continue;
    1.62 +                        if (lk.arity() < 1 && mk1 != ModifierKind.NONE)
    1.63 +                            continue;
    1.64                          for (ModifierKind mk2 : ModifierKind.values()) {
    1.65 -                            if (lk.arity() < 2 && mk2 != ModifierKind.NONE) continue;
    1.66 +                            if (lk.arity() < 2 && mk2 != ModifierKind.NONE)
    1.67 +                                continue;
    1.68                              for (SubExprKind sk : SubExprKind.values()) {
    1.69                                  for (ExprKind ek : ExprKind.values()) {
    1.70 -                                    new LambdaParserTest(pk1, pk2, mk1, mk2, lk, sk, ek)
    1.71 -                                            .run(comp, fm);
    1.72 +                                    pool.execute(
    1.73 +                                        new LambdaParserTest(pk1, pk2, mk1,
    1.74 +                                                             mk2, lk, sk, ek));
    1.75                                  }
    1.76                              }
    1.77                          }
    1.78 @@ -199,7 +200,8 @@
    1.79                  }
    1.80              }
    1.81          }
    1.82 -        System.out.println("Total check executed: " + checkCount);
    1.83 +
    1.84 +        checkAfterExec();
    1.85      }
    1.86  
    1.87      LambdaParameterKind pk1;
    1.88 @@ -212,8 +214,9 @@
    1.89      JavaSource source;
    1.90      DiagnosticChecker diagChecker;
    1.91  
    1.92 -    LambdaParserTest(LambdaParameterKind pk1, LambdaParameterKind pk2, ModifierKind mk1,
    1.93 -            ModifierKind mk2, LambdaKind lk, SubExprKind sk, ExprKind ek) {
    1.94 +    LambdaParserTest(LambdaParameterKind pk1, LambdaParameterKind pk2,
    1.95 +            ModifierKind mk1, ModifierKind mk2, LambdaKind lk,
    1.96 +            SubExprKind sk, ExprKind ek) {
    1.97          this.pk1 = pk1;
    1.98          this.pk2 = pk2;
    1.99          this.mk1 = mk1;
   1.100 @@ -235,7 +238,8 @@
   1.101  
   1.102          public JavaSource() {
   1.103              super(URI.create("myfo:/Test.java"), JavaFileObject.Kind.SOURCE);
   1.104 -            source = template.replaceAll("#E", ek.expressionString(pk1, pk2, mk1, mk2, lk, sk));
   1.105 +            source = template.replaceAll("#E",
   1.106 +                    ek.expressionString(pk1, pk2, mk1, mk2, lk, sk));
   1.107          }
   1.108  
   1.109          @Override
   1.110 @@ -244,19 +248,20 @@
   1.111          }
   1.112      }
   1.113  
   1.114 -    void run(JavaCompiler tool, StandardJavaFileManager fm) throws Exception {
   1.115 -        JavacTask ct = (JavacTask)tool.getTask(null, fm, diagChecker,
   1.116 +    public void run() {
   1.117 +        JavacTask ct = (JavacTask)comp.getTask(null, fm.get(), diagChecker,
   1.118                  null, null, Arrays.asList(source));
   1.119          try {
   1.120              ct.parse();
   1.121          } catch (Throwable ex) {
   1.122 -            throw new AssertionError("Error thrown when parsing the following source:\n" + source.getCharContent(true));
   1.123 +            processException(ex);
   1.124 +            return;
   1.125          }
   1.126          check();
   1.127      }
   1.128  
   1.129      void check() {
   1.130 -        checkCount++;
   1.131 +        checkCount.incrementAndGet();
   1.132  
   1.133          boolean errorExpected = (lk.arity() > 0 && !mk1.compatibleWith(pk1)) ||
   1.134                  (lk.arity() > 1 && !mk2.compatibleWith(pk2));
   1.135 @@ -275,7 +280,8 @@
   1.136          }
   1.137      }
   1.138  
   1.139 -    static class DiagnosticChecker implements javax.tools.DiagnosticListener<JavaFileObject> {
   1.140 +    static class DiagnosticChecker
   1.141 +        implements javax.tools.DiagnosticListener<JavaFileObject> {
   1.142  
   1.143          boolean errorFound;
   1.144  
   1.145 @@ -285,4 +291,5 @@
   1.146              }
   1.147          }
   1.148      }
   1.149 +
   1.150  }

mercurial