| /* |
| * Copyright 2009 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.core.ext.TreeLogger; |
| import com.google.gwt.core.ext.TreeLogger.Type; |
| import com.google.gwt.core.ext.typeinfo.TypeOracle; |
| import com.google.gwt.dev.javac.testing.impl.StaticJavaResource; |
| import com.google.gwt.dev.resource.Resource; |
| import com.google.gwt.dev.util.UnitTestTreeLogger; |
| |
| import junit.framework.TestCase; |
| |
| import java.util.HashSet; |
| import java.util.Set; |
| |
| /** |
| * A base type for testing the code checkers. |
| */ |
| public abstract class CheckerTestCase extends TestCase { |
| |
| protected void shouldGenerate(CharSequence buggyCode, CharSequence extraCode, |
| int line, Type logLevel, String logHeader, String message) { |
| UnitTestTreeLogger.Builder b = new UnitTestTreeLogger.Builder(); |
| b.setLowestLogLevel(logLevel); |
| if (message != null) { |
| b.expect(logLevel, logHeader + " in '/mock/Buggy.java'", null); |
| final String fullMessage = "Line " + line + ": " + message; |
| b.expect(logLevel, fullMessage, null); |
| } |
| UnitTestTreeLogger logger = b.createLogger(); |
| TypeOracle oracle = buildOracle(buggyCode, extraCode, logger); |
| logger.assertCorrectLogEntries(); |
| if (message != null && logLevel == TreeLogger.ERROR) { |
| assertNull("Buggy compilation unit not removed from type oracle", |
| oracle.findType("Buggy")); |
| } else { |
| assertNotNull("Buggy compilation unit removed with only a warning", |
| oracle.findType("Buggy")); |
| } |
| } |
| |
| protected void shouldGenerateError(CharSequence buggyCode, |
| CharSequence extraCode, int line, String message) { |
| shouldGenerate(buggyCode, extraCode, line, TreeLogger.ERROR, "Errors", |
| message); |
| } |
| |
| protected void shouldGenerateError(CharSequence buggyCode, int line, |
| String message) { |
| shouldGenerateError(buggyCode, null, line, message); |
| } |
| |
| protected void shouldGenerateNoError(CharSequence code) { |
| shouldGenerateNoError(code, null); |
| } |
| |
| protected void shouldGenerateNoError(CharSequence code, CharSequence extraCode) { |
| shouldGenerateError(code, extraCode, -1, null); |
| } |
| |
| protected void shouldGenerateNoWarning(CharSequence code) { |
| shouldGenerateWarning(code, -1, null); |
| } |
| |
| protected void shouldGenerateWarning(CharSequence buggyCode, |
| CharSequence extraCode, int line, String message) { |
| shouldGenerate(buggyCode, extraCode, line, TreeLogger.WARN, "Warnings", |
| message); |
| } |
| |
| protected void shouldGenerateWarning(CharSequence buggyCode, int line, |
| String message) { |
| shouldGenerateWarning(buggyCode, null, line, message); |
| } |
| |
| private void addLongCheckingCups(Set<Resource> resources) { |
| StringBuilder code = new StringBuilder(); |
| code.append("package com.google.gwt.core.client;\n"); |
| code.append("public @interface UnsafeNativeLong {\n"); |
| code.append("}\n"); |
| resources.add(new StaticJavaResource( |
| "com.google.gwt.core.client.UnsafeNativeLong", code.toString())); |
| } |
| |
| private TypeOracle buildOracle(CharSequence buggyCode, |
| CharSequence extraCode, UnitTestTreeLogger logger) { |
| Set<Resource> resources = new HashSet<Resource>(); |
| addLongCheckingCups(resources); |
| StaticJavaResource buggyResource = new StaticJavaResource("Buggy", |
| buggyCode); |
| Set<GeneratedUnit> generatedUnits = CompilationStateTestBase.getGeneratedUnits(buggyResource); |
| if (extraCode != null) { |
| StaticJavaResource extraResource = new StaticJavaResource("Extra", |
| extraCode); |
| generatedUnits.addAll(CompilationStateTestBase.getGeneratedUnits(extraResource)); |
| } |
| return TypeOracleTestingUtils.buildStandardTypeOracleWith(logger, |
| resources, generatedUnits); |
| } |
| } |