/******************************************************************************* * Copyright (c) 2011 Subgraph. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subgraph - initial API and implementation ******************************************************************************/ package com.subgraph.vega.impl.scanner.modules.scripting.tests; import java.net.URL; import java.util.ArrayList; import java.util.Collections; import java.util.Enumeration; import java.util.List; import java.util.logging.Logger; import org.mozilla.javascript.Scriptable; import org.osgi.framework.Bundle; import com.subgraph.vega.impl.scanner.modules.scripting.ModuleValidator; import com.subgraph.vega.impl.scanner.modules.scripting.ModuleValidator.ModuleValidationException; import com.subgraph.vega.impl.scanner.modules.scripting.ScriptCompiler; import com.subgraph.vega.impl.scanner.modules.scripting.ScriptFile; import com.subgraph.vega.impl.scanner.modules.scripting.ScriptFile.CompileStatus; import com.subgraph.vega.impl.scanner.modules.scripting.ScriptedModule; public class TestScriptLoader { private final Logger logger = Logger.getLogger("script-loader"); private final QunitLoader qunitLoader; private final ScriptCompiler moduleCompiler; private final Bundle bundle; private final List<ScriptedModule> allModules = new ArrayList<ScriptedModule>(); public TestScriptLoader(Scriptable globalScope, Bundle bundle) { this.bundle = bundle; qunitLoader = new QunitLoader(globalScope, bundle); qunitLoader.load(); moduleCompiler = new ScriptCompiler(qunitLoader.getScope()); } public void load() { allModules.clear(); for(URL scriptURL: allTestScripts()) { ScriptedModule compiledModule = compileModule(new ScriptFile(scriptURL)); if(compiledModule != null && !compiledModule.isDisabled()) allModules.add(compiledModule); } } public List<ScriptedModule> getAllModules() { return Collections.unmodifiableList(allModules); } private ScriptedModule compileModule(ScriptFile scriptFile) { if(!moduleCompiler.compile(scriptFile) || scriptFile.getCompileStatus() != CompileStatus.COMPILE_SUCCEEDED) { logger.warning(scriptFile.getCompileFailureMessage()); return null; } final ModuleValidator validator = validateModule(scriptFile.getCompiledScript(), scriptFile.getPath()); if(validator == null) return null; return new ScriptedModule(scriptFile, "Test Modules", validator); } private ModuleValidator validateModule(Scriptable module, String modulePath) { final ModuleValidator validator = new ModuleValidator(module); try { validator.validate(); return validator; } catch (ModuleValidationException e) { logger.warning("Failed to validate test module "+ modulePath +" :"+ e.getMessage()); return null; } } private List<URL> allTestScripts() { List<URL> scriptURLs = new ArrayList<URL>(); Enumeration<?> entries = bundle.findEntries("/tests/scripts", "*", true); while(entries.hasMoreElements()) { URL u = (URL) entries.nextElement(); scriptURLs.add(u); } return scriptURLs; } }