/*
* Copyright (C) 2014 Red Hat, Inc. and/or its affiliates.
*
* 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.jboss.errai.forge.test.base;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import javax.inject.Inject;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.errai.forge.config.ProjectConfig;
import org.jboss.errai.forge.config.ProjectProperty;
import org.jboss.errai.forge.config.SerializableSet;
import org.jboss.errai.forge.facet.aggregate.AggregatorFacetTest;
import org.jboss.errai.forge.facet.plugin.BasePluginFacetTest;
import org.jboss.errai.forge.facet.ui.command.res.ProjectFactoryMock;
import org.jboss.errai.forge.facet.ui.command.res.SimpleTestableClass;
import org.jboss.errai.forge.facet.ui.command.res.UIExecutionContextMock;
import org.jboss.errai.forge.facet.ui.command.res.UIInputMock;
import org.jboss.forge.addon.facets.FacetFactory;
import org.jboss.forge.addon.projects.Project;
import org.jboss.forge.addon.projects.ProjectFactory;
import org.jboss.forge.arquillian.AddonDependency;
import org.jboss.forge.arquillian.Dependencies;
import org.jboss.forge.arquillian.archive.ForgeArchive;
import org.jboss.forge.furnace.repositories.AddonDependencyEntry;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.junit.runner.RunWith;
@RunWith(Arquillian.class)
public abstract class ForgeTest {
public static final String DEPENDENCY = "org.jboss.errai.forge:errai-forge-addon";
public static final String ADDON_GROUP = "org.jboss.forge.addon";
// TODO Programmatically lookup the Errai version this test is running in.
public static final String ERRAI_TEST_VERSION = "4.0.0-SNAPSHOT";
@Inject
protected ProjectFactory projectFactory;
@Inject
protected FacetFactory facetFactory;
@Deployment
@Dependencies({
@AddonDependency(name = DEPENDENCY),
@AddonDependency(name = ADDON_GROUP + ":projects"),
@AddonDependency(name = ADDON_GROUP + ":parser-java"),
@AddonDependency(name = ADDON_GROUP + ":facets"),
@AddonDependency(name = ADDON_GROUP + ":maven"),
@AddonDependency(name = ADDON_GROUP + ":ui")
})
public static ForgeArchive getDeployment() {
final ForgeArchive archive = ShrinkWrap.create(ForgeArchive.class)
.addBeansXML()
.addClasses(
ForgeTest.class,
BasePluginFacetTest.class,
AggregatorFacetTest.class,
ProjectFactoryMock.class,
SimpleTestableClass.class,
UIExecutionContextMock.class,
UIInputMock.class
)
.addAsResource("org/jboss/errai/forge/test/SimpleTestClass.java",
"org/jboss/errai/forge/test/SimpleTestClass.java")
.addAsAddonDependencies(
AddonDependencyEntry.create("org.jboss.forge.furnace.container:cdi"),
AddonDependencyEntry.create(DEPENDENCY),
AddonDependencyEntry.create(ADDON_GROUP + ":projects"),
AddonDependencyEntry.create(ADDON_GROUP + ":parser-java"),
AddonDependencyEntry.create(ADDON_GROUP + ":facets"),
AddonDependencyEntry.create(ADDON_GROUP + ":maven"),
AddonDependencyEntry.create(ADDON_GROUP + ":ui")
);
return archive;
}
protected Project initializeJavaProject() {
final Project project = projectFactory.createTempProject();
return project;
}
protected void assertResourceAndFileContentsSame(final String resourcePath, final File file)
throws IOException {
assertTrue(file.getAbsolutePath() + " was not created.", file.exists());
try (final InputStreamReader expectedReader = new InputStreamReader(
ClassLoader.getSystemResourceAsStream(resourcePath));
final InputStreamReader observedReader = new InputStreamReader(new FileInputStream(file))) {
assertFileContentsSame(expectedReader, observedReader);
}
}
protected void assertFileContentsSame(final InputStreamReader expectedReader, final InputStreamReader observedReader) throws IOException {
final StringBuilder[] builders = new StringBuilder[] { new StringBuilder(), new StringBuilder()};
final InputStreamReader[] inputReaders = new InputStreamReader[] {expectedReader, observedReader};
for (int i = 0; i < inputReaders.length; i++) {
final InputStreamReader reader = inputReaders[i];
final char[] chars = new char[256];
int read;
while ((read = reader.read(chars)) > -1) {
builders[i].append(chars, 0, read);
}
}
try {
assertEquals(builders[0].toString(), builders[1].toString());
}
catch (final AssertionError e) {
System.out.println("EXPECTED");
System.out.println(builders[0].toString());
System.out.println("OBSERVED");
System.out.println(builders[1].toString());
throw e;
}
}
protected Project createErraiTestProject() {
final Project project = initializeJavaProject();
final ProjectConfig projectConfig = facetFactory.install(project, ProjectConfig.class);
projectConfig.setProjectProperty(ProjectProperty.ERRAI_VERSION, ERRAI_TEST_VERSION);
projectConfig.setProjectProperty(ProjectProperty.MODULE_LOGICAL, "org.jboss.errai.ForgeTest");
projectConfig.setProjectProperty(ProjectProperty.MODULE_FILE, new File(project.getRootDirectory()
.getUnderlyingResourceObject(), "src/main/java/org/jboss/errai/ForgeTest.gwt.xml"));
projectConfig.setProjectProperty(ProjectProperty.MODULE_NAME, "test");
projectConfig.setProjectProperty(ProjectProperty.INSTALLED_FEATURES, new SerializableSet());
return project;
}
}