rt/emul/compacttest/src/test/java/org/apidesign/bck2brwsr/tck/ReflectionAnnotationTest.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Sat, 19 Mar 2016 10:31:13 +0100
changeset 1889 e1953d8b8338
parent 1838 rt/emul/compacttest/src/test/java/org/apidesign/bck2brwsr/tck/ReflectionTest.java@493d5960d520
child 1899 d729cfa77fa7
permissions -rw-r--r--
Support for default attributes of annotations
jaroslav@355
     1
/**
jaroslav@355
     2
 * Back 2 Browser Bytecode Translator
jaroslav@1787
     3
 * Copyright (C) 2012-2015 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
jaroslav@355
     4
 *
jaroslav@355
     5
 * This program is free software: you can redistribute it and/or modify
jaroslav@355
     6
 * it under the terms of the GNU General Public License as published by
jaroslav@355
     7
 * the Free Software Foundation, version 2 of the License.
jaroslav@355
     8
 *
jaroslav@355
     9
 * This program is distributed in the hope that it will be useful,
jaroslav@355
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
jaroslav@355
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
jaroslav@355
    12
 * GNU General Public License for more details.
jaroslav@355
    13
 *
jaroslav@355
    14
 * You should have received a copy of the GNU General Public License
jaroslav@355
    15
 * along with this program. Look for COPYING file in the top folder.
jaroslav@355
    16
 * If not, see http://opensource.org/licenses/GPL-2.0.
jaroslav@355
    17
 */
jaroslav@355
    18
package org.apidesign.bck2brwsr.tck;
jaroslav@355
    19
jaroslav@655
    20
import java.lang.annotation.Retention;
jaroslav@655
    21
import java.lang.annotation.RetentionPolicy;
jaroslav@355
    22
import org.apidesign.bck2brwsr.vmtest.Compare;
jaroslav@355
    23
import org.apidesign.bck2brwsr.vmtest.VMTest;
jaroslav@355
    24
import org.testng.annotations.Factory;
jaroslav@355
    25
jaroslav@355
    26
/**
jaroslav@355
    27
 *
jaroslav@1889
    28
 * @author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
jaroslav@355
    29
 */
jaroslav@1889
    30
public class ReflectionAnnotationTest {
jaroslav@1889
    31
    @Retention(RetentionPolicy.RUNTIME)
jaroslav@1889
    32
    @interface Ann {
jaroslav@1889
    33
        int integer() default 33;
jaroslav@1889
    34
        double dbl() default 33.3;
jaroslav@1889
    35
        String string() default "Ahoj";
jaroslav@1889
    36
        E enums() default E.B;
jaroslav@1889
    37
        Class<?> type() default String.class;
jaroslav@355
    38
    }
jaroslav@355
    39
jaroslav@1889
    40
    @interface AnnAnn {
jaroslav@1889
    41
        Ann ann() default @Ann(
jaroslav@1889
    42
            dbl = 44.4,
jaroslav@1889
    43
            enums = E.A,
jaroslav@1889
    44
            string = "Hi",
jaroslav@1889
    45
            integer = 44
jaroslav@1889
    46
        );
jaroslav@413
    47
    }
jaroslav@413
    48
jaroslav@1889
    49
    @Ann
jaroslav@1889
    50
    @AnnAnn
jaroslav@1889
    51
    class D {
jaroslav@649
    52
    }
jaroslav@649
    53
jaroslav@1889
    54
    @Ann(type = String.class)
jaroslav@1889
    55
    @AnnAnn(ann = @Ann(string = "Ciao"))
jaroslav@1889
    56
    enum E {
jaroslav@1889
    57
        A, B
jaroslav@1889
    58
    };
jaroslav@886
    59
jaroslav@655
    60
    
jaroslav@655
    61
    @Compare public String annoClass() throws Exception {
jaroslav@655
    62
        Retention r = Ann.class.getAnnotation(Retention.class);
jaroslav@655
    63
        assert r != null : "Annotation is present";
jaroslav@655
    64
        assert r.value() == RetentionPolicy.RUNTIME : "Policy value is OK: " + r.value();
jaroslav@655
    65
        return r.annotationType().getName();
jaroslav@655
    66
    }
jaroslav@1889
    67
jaroslav@661
    68
    @Compare public boolean isAnnotation() {
jaroslav@661
    69
        return Ann.class.isAnnotation();
jaroslav@661
    70
    }
jaroslav@661
    71
    @Compare public boolean isNotAnnotation() {
jaroslav@661
    72
        return String.class.isAnnotation();
jaroslav@661
    73
    }
jaroslav@661
    74
    @Compare public boolean isNotAnnotationEnum() {
jaroslav@661
    75
        return E.class.isAnnotation();
jaroslav@661
    76
    }
jaroslav@1889
    77
jaroslav@1889
    78
    @Compare public int intDefaultAttrIsRead() {
jaroslav@1889
    79
        return D.class.getAnnotation(Ann.class).integer();
jaroslav@586
    80
    }
jaroslav@586
    81
jaroslav@1889
    82
    @Compare public double doubleDefaultAttrIsRead() {
jaroslav@1889
    83
        return D.class.getAnnotation(Ann.class).dbl();
jaroslav@1889
    84
    }
jaroslav@1889
    85
jaroslav@1889
    86
    @Compare public String stringDefaultAttrIsRead() {
jaroslav@1889
    87
        return D.class.getAnnotation(Ann.class).string();
jaroslav@1889
    88
    }
jaroslav@1889
    89
jaroslav@1889
    90
    @Compare public String enumDefaultAttrIsRead() {
jaroslav@1889
    91
        return D.class.getAnnotation(Ann.class).enums().toString();
jaroslav@1889
    92
    }
jaroslav@1889
    93
jaroslav@1889
    94
    @Compare public String classDefaultAttrIsRead() {
jaroslav@1889
    95
        return D.class.getAnnotation(Ann.class).type().getName();
jaroslav@1889
    96
    }
jaroslav@1889
    97
jaroslav@1889
    98
    @Compare public String classAttrIsRead() {
jaroslav@1889
    99
        return E.class.getAnnotation(Ann.class).type().getName();
jaroslav@1889
   100
    }
jaroslav@1889
   101
jaroslav@1889
   102
//    @Compare public String defaultAnnotationAttrIsRead() {
jaroslav@1889
   103
//        final Ann ann = D.class.getAnnotation(AnnAnn.class).ann();
jaroslav@1889
   104
//        return ann.string() + ann.dbl() + ann.enums() + ann.integer() + ann.type();
jaroslav@1889
   105
//    }
jaroslav@1889
   106
//
jaroslav@1889
   107
//    @Compare public String annotationAttrIsRead() {
jaroslav@1889
   108
//        final Ann ann = E.class.getAnnotation(AnnAnn.class).ann();
jaroslav@1889
   109
//        return ann.string();
jaroslav@1889
   110
//    }
jaroslav@1889
   111
jaroslav@1889
   112
    @Factory
jaroslav@1889
   113
    public static Object[] create() {
jaroslav@1889
   114
        return VMTest.create(ReflectionAnnotationTest.class);
jaroslav@586
   115
    }
jaroslav@586
   116
    
jaroslav@355
   117
}