blob: 86bbb6af668b6545d75b6e5ca860de87795feb7d [file] [log] [blame]
/*
* Copyright 2013 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.gwt.dev.javac;
import com.google.gwt.dev.javac.testing.impl.MockJavaResource;
import com.google.gwt.thirdparty.guava.common.base.Joiner;
import java.util.List;
/**
* Test class for GwtIncompatible annotations in {@link com.google.gwt.dev.javac.JdtCompiler}.
*/
public class GwtIncompatibleJdtCompilerTest extends JdtCompilerTestBase {
public void testCompileError() throws Exception {
List<CompilationUnit> units = compile(GWTINCOMPATIBLE_ANNOTATION,
GWTINCOMPATIBLE_METHOD_MISSING_ANNOTATION);
assertOnlyLastUnitHasErrors(units,
"The method gwtIncompatibleMethod() is undefined for the type GwtIncompatibleTest");
}
public void testCompileGwtIncompatible() throws Exception {
assertResourcesCompileSuccessfully(GWTINCOMPATIBLE_ANNOTATION,
GWTINCOMPATIBLE_METHOD, GWTINCOMPATIBLE_FIELD, GWTINCOMPATIBLE_INNERCLASS,
GWTINCOMPATIBLE_ANONYMOUS_INNERCLASS);
}
public void testCompileGwtIncompatibleClass() throws Exception {
assertResourcesCompileSuccessfully(GWTINCOMPATIBLE_ANNOTATION, GWTINCOMPATIBLE_TOPCLASS);
}
public void testCompileExtendsGwtIncompatibleClass() throws Exception {
List<CompilationUnit> units = compile(GWTINCOMPATIBLE_ANNOTATION, GWTINCOMPATIBLE_TOPCLASS,
EXTENDS_GWTINCOMPATIBLE);
assertOnlyLastUnitHasErrors(units, "The type ExtendsGwtIncompatibleClass cannot "
+ "subclass the final class GwtIncompatibleClass");
}
public void testCompileInstantiateGwtIncompatibleClass() throws Exception {
List<CompilationUnit> units = compile(GWTINCOMPATIBLE_ANNOTATION, GWTINCOMPATIBLE_TOPCLASS,
INSTANTIATES_GWTINCOMPATIBLE);
assertOnlyLastUnitHasErrors(units,
"The constructor GwtIncompatibleClass() is not visible");
}
public void testCompileGwtIncompatibleClassWithInnerClass() throws Exception {
assertResourcesCompileSuccessfully(GWTINCOMPATIBLE_ANNOTATION, GWTINCOMPATIBLE_WITH_INNERCLASS);
}
public void testCompileGwtIncompatibleClassWithInnerClassTest() throws Exception {
List<CompilationUnit> units = compile(GWTINCOMPATIBLE_ANNOTATION,
GWTINCOMPATIBLE_WITH_INNERCLASS, GWTINCOMPATIBLE_WITH_INNERCLASS_TEST);
assertOnlyLastUnitHasErrors(units,
"The constructor GwtIncompatibleWithInnerClass() is not visible",
"GwtIncompatibleWithInnerClass.Child cannot be resolved to a type");
}
public void testCompileGwtIncompatibleClassWithStaticInnerClass() throws Exception {
assertResourcesCompileSuccessfully(GWTINCOMPATIBLE_ANNOTATION,
GWTINCOMPATIBLE_WITH_STATIC_INNERCLASS);
}
public void testCompileGwtIncompatibleClassWithStaticInnerClassTest() throws Exception {
List<CompilationUnit> units = compile(GWTINCOMPATIBLE_ANNOTATION,
GWTINCOMPATIBLE_WITH_STATIC_INNERCLASS, GWTINCOMPATIBLE_WITH_STATIC_INNERCLASS_TEST);
assertOnlyLastUnitHasErrors(units,
"GwtIncompatibleWithStaticInnerClass.Child cannot be resolved to a type");
}
public void testCompileGwtIncompatibleAnnotation() throws Exception {
assertResourcesCompileSuccessfully(GWTINCOMPATIBLE_ANNOTATION, GWTINCOMPATIBLE_ANNOTATION_TYPE);
}
public static final MockJavaResource GWTINCOMPATIBLE_ANNOTATION = new MockJavaResource(
"com.google.gwt.GwtIncompatible") {
@Override
public CharSequence getContent() {
return Joiner.on("\n").join("package com.google.gwt;",
"public @interface GwtIncompatible {",
" String[] value();",
"}");
}
};
public static final MockJavaResource GWTINCOMPATIBLE_METHOD_MISSING_ANNOTATION =
new MockJavaResource("com.google.gwt.GwtIncompatibleTest") {
@Override
public CharSequence getContent() {
return Joiner.on("\n").join("package com.google.gwt;",
"public class GwtIncompatibleTest {",
" int test() { return gwtIncompatibleMethod(); } ",
" @GwtIncompatible(\" not compatible \") ",
" int gwtIncompatibleMethod() { return -1; } ",
"}");
}
};
public static final MockJavaResource GWTINCOMPATIBLE_METHOD = new MockJavaResource(
"com.google.gwt.GwtIncompatibleMethodTest") {
@Override
public CharSequence getContent() {
return Joiner.on("\n").join("package com.google.gwt;",
"public class GwtIncompatibleMethodTest {",
" @GwtIncompatible(\" not compatible \") ",
" int test() { return methodDoesNotExist(); } ",
"}");
}
};
public static final MockJavaResource GWTINCOMPATIBLE_FIELD = new MockJavaResource(
"com.google.gwt.GwtIncompatibleFieldTest") {
@Override
public CharSequence getContent() {
return Joiner.on("\n").join("package com.google.gwt;",
"public class GwtIncompatibleFieldTest {",
" @GwtIncompatible(\" not compatible \") ",
" int test = methodDoesNotExist(); ",
" int test() { return 31; } ",
"}");
}
};
public static final MockJavaResource GWTINCOMPATIBLE_INNERCLASS = new MockJavaResource(
"com.google.gwt.GwtIncompatibleInnerTest") {
@Override
public CharSequence getContent() {
return Joiner.on("\n").join("package com.google.gwt;",
"public class GwtIncompatibleInnerTest {",
" @GwtIncompatible(\" not compatible \") ",
" public class Inner {",
" int test() { return methodDoesNotExist(); } ",
" }",
" int test() { return 31; } ",
"}");
}
};
public static final MockJavaResource GWTINCOMPATIBLE_TOPCLASS = new MockJavaResource(
"com.google.gwt.GwtIncompatibleClass") {
@Override
public CharSequence getContent() {
return Joiner.on("\n").join("package com.google.gwt;",
"@GwtIncompatible(\" not compatible \") ",
"public class GwtIncompatibleClass {",
"}");
}
};
public static final MockJavaResource EXTENDS_GWTINCOMPATIBLE = new MockJavaResource(
"com.google.gwt.ExtendsGwtIncompatibleClass") {
@Override
public CharSequence getContent() {
return Joiner.on("\n").join("package com.google.gwt;",
"public class ExtendsGwtIncompatibleClass",
" extends GwtIncompatibleClass {",
"}");
}
};
public static final MockJavaResource INSTANTIATES_GWTINCOMPATIBLE = new MockJavaResource(
"com.google.gwt.InstantiatesGwtIncompatibleClass") {
@Override
public CharSequence getContent() {
return Joiner.on("\n").join("package com.google.gwt;",
"public class InstantiatesGwtIncompatibleClass {",
" Object test() { return new GwtIncompatibleClass(); } ",
"}");
}
};
public static final MockJavaResource GWTINCOMPATIBLE_ANONYMOUS_INNERCLASS = new MockJavaResource(
"com.google.gwt.GwtIncompatibleAInnerTest") {
@Override
public CharSequence getContent() {
return Joiner.on("\n").join("package com.google.gwt;",
"public class GwtIncompatibleAInnerTest {",
" Object createAnonymous() {",
" return new Object() {",
" @GwtIncompatible(\" not compatible \") ",
" int test() { return methodDoesNotExist(); } ",
" };",
" }",
" int test() { return 31; } ",
"}");
}
};
public static final MockJavaResource GWTINCOMPATIBLE_WITH_INNERCLASS = new MockJavaResource(
"com.google.gwt.GwtIncompatibleWithInnerClass") {
@Override
public CharSequence getContent() {
return Joiner.on("\n").join("package com.google.gwt;",
"@GwtIncompatible(\" not compatible \") ",
"public class GwtIncompatibleWithInnerClass {",
" public class Child {",
" }",
"}");
}
};
public static final MockJavaResource GWTINCOMPATIBLE_WITH_INNERCLASS_TEST = new MockJavaResource(
"com.google.gwt.GwtIncompatibleWithInnerClassTest") {
@Override
public CharSequence getContent() {
return Joiner.on("\n").join("package com.google.gwt;",
"public class GwtIncompatibleWithInnerClassTest {",
" void test() {",
" (new GwtIncompatibleWithInnerClass()).new Child();",
" }",
"}");
}
};
public static final MockJavaResource GWTINCOMPATIBLE_WITH_STATIC_INNERCLASS =
new MockJavaResource("com.google.gwt.GwtIncompatibleWithStaticInnerClass") {
@Override
public CharSequence getContent() {
return Joiner.on("\n").join("package com.google.gwt;",
"@GwtIncompatible(\" not compatible \") ",
"public class GwtIncompatibleWithStaticInnerClass {",
" public static class Child {",
" }",
"}");
}
};
public static final MockJavaResource GWTINCOMPATIBLE_WITH_STATIC_INNERCLASS_TEST =
new MockJavaResource("com.google.gwt.GwtIncompatibleWithStaticInnerClassTest") {
@Override
public CharSequence getContent() {
return Joiner.on("\n").join("package com.google.gwt;",
"public class GwtIncompatibleWithStaticInnerClassTest {",
" void test() {",
" new GwtIncompatibleWithStaticInnerClass.Child();",
" }",
"}");
}
};
public static final MockJavaResource GWTINCOMPATIBLE_ANNOTATION_TYPE = new MockJavaResource(
"com.google.gwt.GwtIncompatibleAnnotation") {
@Override
public CharSequence getContent() {
return Joiner.on("\n").join("package com.google.gwt;",
"@GwtIncompatible(\" not compatible \") ",
"public @interface GwtIncompatibleAnnotation {",
"}");
}
};
}