| /* |
| * Copyright 2010 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 org.hibernate.jsr303.tck.util; |
| |
| import com.google.gwt.core.ext.TreeLogger; |
| import com.google.gwt.core.ext.UnableToCompleteException; |
| import com.google.gwt.core.ext.linker.ArtifactSet; |
| import com.google.gwt.dev.cfg.ModuleDef; |
| import com.google.gwt.dev.cfg.ModuleDefLoader; |
| import com.google.gwt.dev.javac.StandardGeneratorContext; |
| import com.google.gwt.dev.shell.FailErrorLogger; |
| import com.google.gwt.dev.util.UnitTestTreeLogger; |
| import com.google.gwt.dev.util.log.CompositeTreeLogger; |
| import com.google.gwt.dev.util.log.PrintWriterTreeLogger; |
| import com.google.gwt.validation.rebind.BeanHelper; |
| import com.google.gwt.validation.rebind.GwtSpecificValidatorGenerator; |
| import com.google.gwt.validation.rebind.ValidatorGenerator; |
| |
| import junit.framework.Assert; |
| |
| import java.io.File; |
| |
| import javax.validation.Validator; |
| |
| /** |
| * Static utilities useful for testing TCK Generators. |
| */ |
| public class TckGeneratorTestUtils { |
| |
| private final static boolean LOG_TO_CONSOLE = false; |
| |
| /** |
| * Asserts that calling |
| * {@link ValidatorGenerator#generate(TreeLogger, com.google.gwt.core.ext.GeneratorContext, String)} |
| * causes a {@link UnableToCompleteException} with exactly the log messages |
| * specified in {@code testLogger}. |
| * |
| * @param testLogger test logger with expected log messages set. |
| * @param fullyQaulifiedModuleName the gwt Module to load. |
| * @param validatorClass the Validator to generate. |
| * @throws UnableToCompleteException if The module or derived CompilationState |
| * can not be loaded. |
| */ |
| public static void assertModuleFails(UnitTestTreeLogger testLogger, |
| String fullyQaulifiedModuleName, |
| Class<? extends Validator> validatorClass) |
| throws UnableToCompleteException { |
| TreeLogger logger = createFailLogger(); |
| StandardGeneratorContext context = createGeneratorContext( |
| fullyQaulifiedModuleName, logger); |
| ValidatorGenerator generator = new ValidatorGenerator(); |
| try { |
| generator.generate(testLogger, context, validatorClass.getCanonicalName()); |
| context.finish(logger); |
| Assert.fail("Expected a " + UnableToCompleteException.class); |
| } catch (UnableToCompleteException expected) { |
| // expected |
| } |
| testLogger.assertCorrectLogEntries(); |
| } |
| |
| /** |
| * Asserts that calling |
| * {@link ValidatorGenerator#generate(TreeLogger, com.google.gwt.core.ext.GeneratorContext, String)} |
| * causes a {@link UnableToCompleteException} with exactly the log messages |
| * specified in {@code testLogger}. |
| * |
| * @param testLogger test logger with expected log messages set. |
| * @param fullyQaulifiedModuleName the gwt Module to load. |
| * @param validatorClass the Validator to generate. |
| * @param beanType the type of bean to create a validator for. |
| * @throws UnableToCompleteException if The module or derived CompilationState |
| * can not be loaded. |
| */ |
| public static void assertModuleFails(UnitTestTreeLogger testLogger, |
| String fullyQaulifiedModuleName, |
| Class<? extends Validator> validatorClass, Class<?> beanType) |
| throws UnableToCompleteException { |
| TreeLogger logger = createFailLogger(); |
| StandardGeneratorContext context = createGeneratorContext( |
| fullyQaulifiedModuleName, logger); |
| |
| ValidatorGenerator generator = new ValidatorGenerator(); |
| GwtSpecificValidatorGenerator specificGenerator = new GwtSpecificValidatorGenerator(); |
| generator.generate(testLogger, context, validatorClass.getCanonicalName()); |
| context.finish(logger); |
| try { |
| specificGenerator.generate( |
| testLogger, |
| context, |
| BeanHelper.createBeanHelper(beanType, testLogger, context).getFullyQualifiedValidatorName()); |
| Assert.fail("Expected a " + UnableToCompleteException.class); |
| } catch (UnableToCompleteException expected) { |
| // expected |
| } |
| testLogger.assertCorrectLogEntries(); |
| } |
| |
| /** |
| * Creates the fully qualified GWT module name using the package of |
| * {@code clazz} and the {@code moduleNam} |
| * |
| * @param clazz the class whose package the module is in. |
| * @param moduleName the module name. |
| * @return the fully qualified module name. |
| */ |
| public static String getFullyQaulifiedModuleName(Class<?> clazz, |
| String moduleName) { |
| return clazz.getPackage().getName() + "." + moduleName; |
| } |
| |
| private static TreeLogger createFailLogger() { |
| TreeLogger logger = LOG_TO_CONSOLE ? new CompositeTreeLogger( |
| new PrintWriterTreeLogger(), new FailErrorLogger()) |
| : new FailErrorLogger(); |
| return logger; |
| } |
| |
| private static StandardGeneratorContext createGeneratorContext( |
| String fullyQaulifiedModuleName, TreeLogger logger) |
| throws UnableToCompleteException { |
| ModuleDef module = ModuleDefLoader.loadFromClassPath(logger, |
| fullyQaulifiedModuleName); |
| File genDir = new File(System.getProperty("java.io.tmpdir")); |
| |
| ArtifactSet allGenreatedArtifacts = new ArtifactSet(); |
| boolean isProd = false; |
| StandardGeneratorContext context = new StandardGeneratorContext( |
| module.getCompilationState(logger), module, genDir, |
| allGenreatedArtifacts, isProd); |
| return context; |
| } |
| |
| } |