/* * Copyright 2007 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.cfg; import com.google.gwt.core.ext.TreeLogger; import com.google.gwt.core.ext.UnableToCompleteException; import com.google.gwt.dev.cfg.test.caseinsensitive.GOO; import com.google.gwt.dev.cfg.test.caseinsensitive.Good; import com.google.gwt.dev.cfg.test.casesensitive.CaseSensitive_A_Foo; import com.google.gwt.dev.cfg.test.casesensitive.CaseSensitive_a_Bar; import com.google.gwt.dev.cfg.test.excludes.Excludes_Exclude1; import com.google.gwt.dev.cfg.test.excludes.Excludes_Exclude2; import com.google.gwt.dev.cfg.test.excludes.Excludes_Exclude3; import com.google.gwt.dev.cfg.test.excludes.Excludes_Include1; import com.google.gwt.dev.cfg.test.excludes.Excludes_Include2; import com.google.gwt.dev.cfg.test.excludes.Excludes_Include3; import com.google.gwt.dev.cfg.test.includeexclude.IncludeExclude_Exclude1; import com.google.gwt.dev.cfg.test.includeexclude.IncludeExclude_Exclude2; import com.google.gwt.dev.cfg.test.includeexclude.IncludeExclude_Exclude3; import com.google.gwt.dev.cfg.test.includeexclude.IncludeExclude_Include1; import com.google.gwt.dev.cfg.test.includeexclude.IncludeExclude_Include2; import com.google.gwt.dev.cfg.test.includes.Includes_Exclude1; import com.google.gwt.dev.cfg.test.includes.Includes_Exclude2; import com.google.gwt.dev.cfg.test.includes.Includes_Exclude3; import com.google.gwt.dev.cfg.test.includes.Includes_Include1; import com.google.gwt.dev.cfg.test.includes.Includes_Include2; import com.google.gwt.dev.cfg.test.includes.Includes_Include3; import com.google.gwt.dev.cfg.test.recursive.bar.Recursive_Excluded1; import com.google.gwt.dev.cfg.test.recursive.good.Recursive_Include1; import com.google.gwt.dev.cfg.test.recursive.good.bar.Recursive_Excluded2; import com.google.gwt.dev.cfg.test.recursive.good.bar.good.Recursive_Include2; import com.google.gwt.dev.util.log.PrintWriterTreeLogger; import junit.framework.TestCase; import java.io.PrintWriter; /** * Common test code for testing the various permutations of GWT module's * <source> and <super-source> source tags, specifically their * ant-like inclusion support. */ public abstract class TestSuperAndSourceTags extends TestCase { private static TreeLogger getRootLogger() { PrintWriterTreeLogger logger = new PrintWriterTreeLogger(new PrintWriter( System.err, true)); logger.setMaxDetail(TreeLogger.ERROR); return logger; } private final ModuleDef moduleDef; public TestSuperAndSourceTags() throws UnableToCompleteException { // Module has the same name as this class. String moduleName = getClass().getCanonicalName(); moduleDef = ModuleDefLoader.loadFromClassPath(getRootLogger(), moduleName); } /** * Returns the logical path for a class. This method is implemented by the * subclasses because source and super-source compute logical paths * differently. */ protected abstract String getLogicalPath(Class<?> clazz); /** * Validate that the source or super-source tags . */ protected void validateTags() { // Test case insensitive validateIncluded(Good.class); validateIncluded(GOO.class); // Test case sensitive validateIncluded(CaseSensitive_A_Foo.class); validateExcluded(CaseSensitive_a_Bar.class); // Test excludes validateExcluded(Excludes_Exclude1.class); validateExcluded(Excludes_Exclude2.class); validateExcluded(Excludes_Exclude3.class); validateIncluded(Excludes_Include1.class); validateIncluded(Excludes_Include2.class); validateIncluded(Excludes_Include3.class); // Test include and exclude validateExcluded(IncludeExclude_Exclude1.class); validateExcluded(IncludeExclude_Exclude2.class); validateExcluded(IncludeExclude_Exclude3.class); validateIncluded(IncludeExclude_Include1.class); validateIncluded(IncludeExclude_Include2.class); // Test includes validateExcluded(Includes_Exclude1.class); validateExcluded(Includes_Exclude2.class); validateExcluded(Includes_Exclude3.class); validateIncluded(Includes_Include1.class); validateIncluded(Includes_Include2.class); validateIncluded(Includes_Include3.class); // Test recursive behavior validateExcluded(Recursive_Excluded1.class); validateExcluded(Recursive_Excluded2.class); validateIncluded(Recursive_Include1.class); validateIncluded(Recursive_Include2.class); } private void validateExcluded(Class<?> clazz) { assertNull(moduleDef.findSourceFile(toPath(clazz))); } private void validateIncluded(Class<?> clazz) { assertNotNull(moduleDef.findSourceFile(toPath(clazz))); } private String toPath(Class<?> clazz) { return getLogicalPath(clazz).replace('.', '/') + ".java"; } }