/* * 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.junit; import com.google.gwt.core.ext.TreeLogger; import com.google.gwt.core.ext.UnableToCompleteException; import com.google.gwt.dev.cfg.ModuleDef; import com.google.gwt.junit.JUnitShell.Strategy; import com.google.gwt.junit.client.GWTTestCase; import com.google.gwt.junit.client.GWTTestCase.TestModuleInfo; import java.util.Map; import java.util.HashMap; /** * Strategy that compiles all modules before returning results. Optimizes test * system usage. */ class PreCompileStrategy extends CompileStrategy { /** * A mapping of synthetic module names to their precompiled synthetic module * defs. */ Map<String, ModuleDef> preCompiledModuleDefs; public PreCompileStrategy(JUnitShell junitShell) { super(junitShell); } @Override public ModuleDef maybeCompileModule(String moduleName, String syntheticModuleName, Strategy strategy, BatchingStrategy batchingStrategy, TreeLogger treeLogger) throws UnableToCompleteException { maybePrecompileModules(batchingStrategy, treeLogger); // Since all test blocks from a module are added to the queue at the // same time, we can safely take the module out of the hash map at // this point. return preCompiledModuleDefs.get(syntheticModuleName); } /** * Precompile all modules if needed. */ private void maybePrecompileModules(BatchingStrategy batchingStrategy, TreeLogger treeLogger) throws UnableToCompleteException { if (preCompiledModuleDefs == null) { preCompiledModuleDefs = new HashMap<String, ModuleDef>(); for (String moduleName : GWTTestCase.getAllTestModuleNames()) { TestModuleInfo moduleInfo = GWTTestCase.getTestsForModule(moduleName); String syntheticModuleName = moduleInfo.getSyntheticModuleName(); if (syntheticModuleName != null) { ModuleDef moduleDef = maybeCompileModuleImpl( moduleInfo.getModuleName(), syntheticModuleName, moduleInfo.getStrategy(), batchingStrategy, treeLogger); preCompiledModuleDefs.put(syntheticModuleName, moduleDef); } } } } }