test/tools/javac/lambda/LambdaParserTest.java

changeset 1503
2d2b2be57c78
parent 1482
954541f13717
child 1520
5c956be64b9e
     1.1 --- a/test/tools/javac/lambda/LambdaParserTest.java	Wed Jan 16 20:41:14 2013 -0800
     1.2 +++ b/test/tools/javac/lambda/LambdaParserTest.java	Thu Jan 17 18:15:20 2013 +0000
     1.3 @@ -23,8 +23,7 @@
     1.4  
     1.5  /*
     1.6   * @test
     1.7 - * @bug 7115050
     1.8 - * @bug 8003280
     1.9 + * @bug 7115050 8003280 8005852
    1.10   * @summary Add lambda tests
    1.11   *  Add parser support for lambda expressions
    1.12   * @library ../lib
    1.13 @@ -46,12 +45,12 @@
    1.14      enum LambdaKind {
    1.15          NILARY_EXPR("()->x"),
    1.16          NILARY_STMT("()->{ return x; }"),
    1.17 -        ONEARY_SHORT_EXPR("x->x"),
    1.18 -        ONEARY_SHORT_STMT("x->{ return x; }"),
    1.19 -        ONEARY_EXPR("(#M1 #T1 x)->x"),
    1.20 -        ONEARY_STMT("(#M1 #T1 x)->{ return x; }"),
    1.21 -        TWOARY_EXPR("(#M1 #T1 x, #M2 #T2 y)->x"),
    1.22 -        TWOARY_STMT("(#M1 #T1 x, #M2 #T2 y)->{ return x; }");
    1.23 +        ONEARY_SHORT_EXPR("#PN->x"),
    1.24 +        ONEARY_SHORT_STMT("#PN->{ return x; }"),
    1.25 +        ONEARY_EXPR("(#M1 #T1 #PN)->x"),
    1.26 +        ONEARY_STMT("(#M1 #T1 #PN)->{ return x; }"),
    1.27 +        TWOARY_EXPR("(#M1 #T1 #PN, #M2 #T2 y)->x"),
    1.28 +        TWOARY_STMT("(#M1 #T1 #PN, #M2 #T2 y)->{ return x; }");
    1.29  
    1.30          String lambdaTemplate;
    1.31  
    1.32 @@ -60,11 +59,12 @@
    1.33          }
    1.34  
    1.35          String getLambdaString(LambdaParameterKind pk1, LambdaParameterKind pk2,
    1.36 -                ModifierKind mk1, ModifierKind mk2) {
    1.37 +                ModifierKind mk1, ModifierKind mk2, LambdaParameterName pn) {
    1.38              return lambdaTemplate.replaceAll("#M1", mk1.modifier)
    1.39                      .replaceAll("#M2", mk2.modifier)
    1.40                      .replaceAll("#T1", pk1.parameterType)
    1.41 -                    .replaceAll("#T2", pk2.parameterType);
    1.42 +                    .replaceAll("#T2", pk2.parameterType)
    1.43 +                    .replaceAll("#PN", pn.nameStr);
    1.44          }
    1.45  
    1.46          int arity() {
    1.47 @@ -87,6 +87,17 @@
    1.48          }
    1.49      }
    1.50  
    1.51 +    enum LambdaParameterName {
    1.52 +        IDENT("x"),
    1.53 +        UNDERSCORE("_");
    1.54 +
    1.55 +        String nameStr;
    1.56 +
    1.57 +        LambdaParameterName(String nameStr) {
    1.58 +            this.nameStr = nameStr;
    1.59 +        }
    1.60 +    }
    1.61 +
    1.62      enum LambdaParameterKind {
    1.63          IMPLICIT(""),
    1.64          EXPLIICT_SIMPLE("A"),
    1.65 @@ -151,8 +162,8 @@
    1.66          }
    1.67  
    1.68          String expressionString(LambdaParameterKind pk1, LambdaParameterKind pk2,
    1.69 -                ModifierKind mk1, ModifierKind mk2, LambdaKind lk, SubExprKind sk) {
    1.70 -            return expressionTemplate.replaceAll("#L", lk.getLambdaString(pk1, pk2, mk1, mk2))
    1.71 +                ModifierKind mk1, ModifierKind mk2, LambdaKind lk, LambdaParameterName pn, SubExprKind sk) {
    1.72 +            return expressionTemplate.replaceAll("#L", lk.getLambdaString(pk1, pk2, mk1, mk2, pn))
    1.73                      .replaceAll("#S", sk.subExpression);
    1.74          }
    1.75      }
    1.76 @@ -174,25 +185,27 @@
    1.77  
    1.78      public static void main(String... args) throws Exception {
    1.79          for (LambdaKind lk : LambdaKind.values()) {
    1.80 -            for (LambdaParameterKind pk1 : LambdaParameterKind.values()) {
    1.81 -                if (lk.arity() < 1 && pk1 != LambdaParameterKind.IMPLICIT)
    1.82 -                    continue;
    1.83 -                for (LambdaParameterKind pk2 : LambdaParameterKind.values()) {
    1.84 -                    if (lk.arity() < 2 && pk2 != LambdaParameterKind.IMPLICIT)
    1.85 +            for (LambdaParameterName pn : LambdaParameterName.values()) {
    1.86 +                for (LambdaParameterKind pk1 : LambdaParameterKind.values()) {
    1.87 +                    if (lk.arity() < 1 && pk1 != LambdaParameterKind.IMPLICIT)
    1.88                          continue;
    1.89 -                    for (ModifierKind mk1 : ModifierKind.values()) {
    1.90 -                        if (mk1 != ModifierKind.NONE && lk.isShort())
    1.91 +                    for (LambdaParameterKind pk2 : LambdaParameterKind.values()) {
    1.92 +                        if (lk.arity() < 2 && pk2 != LambdaParameterKind.IMPLICIT)
    1.93                              continue;
    1.94 -                        if (lk.arity() < 1 && mk1 != ModifierKind.NONE)
    1.95 -                            continue;
    1.96 -                        for (ModifierKind mk2 : ModifierKind.values()) {
    1.97 -                            if (lk.arity() < 2 && mk2 != ModifierKind.NONE)
    1.98 +                        for (ModifierKind mk1 : ModifierKind.values()) {
    1.99 +                            if (mk1 != ModifierKind.NONE && lk.isShort())
   1.100                                  continue;
   1.101 -                            for (SubExprKind sk : SubExprKind.values()) {
   1.102 -                                for (ExprKind ek : ExprKind.values()) {
   1.103 -                                    pool.execute(
   1.104 -                                        new LambdaParserTest(pk1, pk2, mk1,
   1.105 -                                                             mk2, lk, sk, ek));
   1.106 +                            if (lk.arity() < 1 && mk1 != ModifierKind.NONE)
   1.107 +                                continue;
   1.108 +                            for (ModifierKind mk2 : ModifierKind.values()) {
   1.109 +                                if (lk.arity() < 2 && mk2 != ModifierKind.NONE)
   1.110 +                                    continue;
   1.111 +                                for (SubExprKind sk : SubExprKind.values()) {
   1.112 +                                    for (ExprKind ek : ExprKind.values()) {
   1.113 +                                        pool.execute(
   1.114 +                                            new LambdaParserTest(pk1, pk2, mk1,
   1.115 +                                                                 mk2, lk, sk, ek, pn));
   1.116 +                                    }
   1.117                                  }
   1.118                              }
   1.119                          }
   1.120 @@ -209,6 +222,7 @@
   1.121      ModifierKind mk1;
   1.122      ModifierKind mk2;
   1.123      LambdaKind lk;
   1.124 +    LambdaParameterName pn;
   1.125      SubExprKind sk;
   1.126      ExprKind ek;
   1.127      JavaSource source;
   1.128 @@ -216,12 +230,13 @@
   1.129  
   1.130      LambdaParserTest(LambdaParameterKind pk1, LambdaParameterKind pk2,
   1.131              ModifierKind mk1, ModifierKind mk2, LambdaKind lk,
   1.132 -            SubExprKind sk, ExprKind ek) {
   1.133 +            SubExprKind sk, ExprKind ek, LambdaParameterName pn) {
   1.134          this.pk1 = pk1;
   1.135          this.pk2 = pk2;
   1.136          this.mk1 = mk1;
   1.137          this.mk2 = mk2;
   1.138          this.lk = lk;
   1.139 +        this.pn = pn;
   1.140          this.sk = sk;
   1.141          this.ek = ek;
   1.142          this.source = new JavaSource();
   1.143 @@ -239,7 +254,7 @@
   1.144          public JavaSource() {
   1.145              super(URI.create("myfo:/Test.java"), JavaFileObject.Kind.SOURCE);
   1.146              source = template.replaceAll("#E",
   1.147 -                    ek.expressionString(pk1, pk2, mk1, mk2, lk, sk));
   1.148 +                    ek.expressionString(pk1, pk2, mk1, mk2, lk, pn, sk));
   1.149          }
   1.150  
   1.151          @Override
   1.152 @@ -272,6 +287,9 @@
   1.153              errorExpected = true;
   1.154          }
   1.155  
   1.156 +        errorExpected |= pn == LambdaParameterName.UNDERSCORE &&
   1.157 +                lk.arity() > 0;
   1.158 +
   1.159          if (errorExpected != diagChecker.errorFound) {
   1.160              throw new Error("invalid diagnostics for source:\n" +
   1.161                  source.getCharContent(true) +

mercurial