All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.googlecode.gwt.test.internal.GwtConfig Maven / Gradle / Ivy

There is a newer version: 0.63
Show newest version
package com.googlecode.gwt.test.internal;

import com.google.gwt.user.client.ui.UIObject;
import com.google.gwt.user.client.ui.UIObject.DebugIdImpl;
import com.google.gwt.user.client.ui.UIObject.DebugIdImplEnabled;
import com.googlecode.gwt.test.GwtModule;
import com.googlecode.gwt.test.GwtModuleRunner;
import com.googlecode.gwt.test.exceptions.GwtTestConfigurationException;
import com.googlecode.gwt.test.exceptions.GwtTestException;
import com.googlecode.gwt.test.uibinder.UiObjectTagFactory;
import com.googlecode.gwt.test.utils.GwtReflectionUtils;

import java.util.ArrayList;
import java.util.List;

/**
 * Internal configuration of gwt-test-utils. For internal use only.
 *
 * @author Gael Lazzari
 */
public class GwtConfig implements AfterTestCallback {

    private static final GwtConfig INSTANCE = new GwtConfig();

    public static GwtConfig get() {
        return INSTANCE;
    }

    private final DebugIdImpl disabledInstance = new DebugIdImpl();
    private final DebugIdImpl enabledInstance = new DebugIdImplEnabled();
    private GwtModuleRunner gwtModuleRunner;
    private String moduleAlias;

    private String testedModuleName;

    private final List> uiObjectTagFactories = new ArrayList>();

    private GwtConfig() {
        AfterTestCallbackManager.get().registerFinalCallback(this);
    }

    public void afterTest() throws Throwable {
        gwtModuleRunner = null;
        uiObjectTagFactories.clear();
    }

    public String getModuleAlias() {
        return moduleAlias;
    }

    public GwtModuleRunner getModuleRunner() {
        return gwtModuleRunner;
    }

    public String getTestedModuleName() {
        return testedModuleName;
    }

    public List> getUiObjectTagFactories() {
        return uiObjectTagFactories;
    }

    public void setupGwtModule(Class testClass) {
        GwtModule gwtModule = testClass.getAnnotation(GwtModule.class);

        if (gwtModule == null) {
            throw new GwtTestConfigurationException("The test class " + testClass.getName()
                    + " must be annotated with @" + GwtModule.class.getSimpleName()
                    + " to specify the fully qualified name of the GWT module to test");
        }

        String moduleName = gwtModule.value();

        if (moduleName == null || "".equals(moduleName.trim())) {
            throw new GwtTestConfigurationException("Incorrect value for @"
                    + GwtModule.class.getSimpleName() + " on " + testClass.getName() + ": "
                    + moduleName);
        }

        if (!GwtFactory.get().getConfigurationLoader().getGwtModules().contains(moduleName)) {
            throw new GwtTestConfigurationException(
                    "The tested @GwtModule '"
                            + moduleName
                            + "' configured in "
                            + testClass.getName()
                            + " has not been found. Did you forget to declare a 'gwt-module' property in your 'META-INF/gwt-test-utils.properties' configuration file ?");
        }

        this.testedModuleName = moduleName;
    }

    /**
     * Setup a GWT module to be run. This method must be run only once, at the very beginning
     * of the GWT module emulation.
     *
     * @param gwtModuleRunner The configuration of the module to be run.
     */
    public void setupInstance(GwtModuleRunner gwtModuleRunner) {
        if (this.gwtModuleRunner != null) {
            throw new GwtTestException(
                    "Because of the single-threaded nature of the GWT environment, gwt-test-utils tests can not be run in multiple thread at the same time");
        }

        this.gwtModuleRunner = gwtModuleRunner;
        this.moduleAlias = ModuleData.get(testedModuleName).getAlias();
        setupDebugIdImpl(gwtModuleRunner.ensureDebugId());
    }

    private void setupDebugIdImpl(boolean ensureDebugId) {
        DebugIdImpl debugIdImplToUse = ensureDebugId ? enabledInstance : disabledInstance;

        GwtReflectionUtils.setStaticField(UIObject.class, "debugIdImpl", debugIdImplToUse);
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy