/******************************************************************************* * Copyright (c) 2014 Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is 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: * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.cdi.core.test.tck.validation; import java.util.ArrayList; import java.util.List; import junit.framework.TestCase; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IncrementalProjectBuilder; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Platform; import org.eclipse.jdt.core.IType; import org.eclipse.jdt.core.JavaModelException; import org.jboss.tools.cdi.core.CDICorePlugin; import org.jboss.tools.cdi.core.ICDIProject; import org.jboss.tools.cdi.internal.core.validation.CDIValidationMessages; import org.jboss.tools.common.EclipseUtil; import org.jboss.tools.common.base.test.validation.TestUtil; import org.jboss.tools.common.java.IParametedType; import org.jboss.tools.common.model.util.EclipseJavaUtil; import org.jboss.tools.test.util.JobUtils; import org.jboss.tools.test.util.ResourcesUtils; import org.jboss.tools.tests.AbstractResourceMarkerTest; import org.osgi.framework.Bundle; /** * * @author Viacheslav Kabanovich * */ public class DiscoveryModeChangeTest extends TestCase { protected final static String PLUGIN_ID = "org.jboss.tools.cdi.core.test"; public final static String JAVA_SOURCE_SUFFIX = "/src"; protected IProject testProject; protected IProject rootProject; protected ICDIProject cdiTestProject; protected ICDIProject cdiRootProject; public DiscoveryModeChangeTest() { testProject = getTestProject(); rootProject = ResourcesPlugin.getWorkspace().getRoot().getProject(getRootProjectName()); cdiTestProject = CDICorePlugin.getCDIProject(testProject, false); cdiRootProject = CDICorePlugin.getCDIProject(rootProject, false); } protected String getRootProjectName() { return "DiscoveryModeChangeChild"; } protected String getTestProjectName() { return "DiscoveryModeChangeTest"; } protected String[] getProjectNames() { return new String[]{getTestProjectName(), getRootProjectName()}; } protected String[] getProjectPaths() { String prefix = "/projects/"; return new String[]{prefix + getTestProjectName(), prefix + getRootProjectName()}; } protected void setUp() throws Exception { cdiTestProject = CDICorePlugin.getCDIProject(testProject, false); cdiRootProject = CDICorePlugin.getCDIProject(rootProject, false); } protected int getVersionIndex() { return cdiTestProject.getVersion().getIndex(); } protected void deleteTestProject() throws Exception { rootProject.delete(true, true, null); testProject.delete(true, true, null); } public IProject getTestProject() { if(testProject == null) { try { testProject = findTestProject(); if(!testProject.exists()) { testProject = importPreparedProject(); } } catch (Exception e) { e.printStackTrace(); fail("Can't import CDI test project: " + e.getMessage()); } } return testProject; } protected IParametedType getType(String name) throws JavaModelException { IType type = EclipseJavaUtil.findType(EclipseUtil.getJavaProject(cdiRootProject.getNature().getProject()), name); return type == null ? null : cdiRootProject.getNature().getTypeFactory().newParametedType(type); } public IProject findTestProject() { return ResourcesPlugin.getWorkspace().getRoot().getProject(getTestProjectName()); } public IProject[] importPreparedProjects() throws Exception { List<IProject> projects = new ArrayList<IProject>(); importPreparedProject(); for (String name : getProjectNames()) { IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(name); assertTrue(project.exists()); projects.add(project); } return projects.toArray(new IProject[projects.size()]); } public IProject importPreparedProject() throws Exception { Bundle b = Platform.getBundle(PLUGIN_ID); IProject tckP = ResourcesPlugin.getWorkspace().getRoot().getProject(getTestProjectName()); if(!tckP.exists()) { for (String name : getProjectNames()) { IProject p = ResourcesPlugin.getWorkspace().getRoot().getProject(name); assertFalse("Error during importing TCK Project. Project " + p.getName() + " already exists.", p.exists()); } for (String path : getProjectPaths()) { IProject project = ResourcesUtils.importProject(b, path); project.build(IncrementalProjectBuilder.INCREMENTAL_BUILD, null); } } tckP.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor()); TestUtil._waitForValidation(tckP); return tckP; } public void testModeChange() throws Exception { boolean saveAutoBuild = ResourcesUtils.setBuildAutomatically(false); try { IFile beansxml = testProject.getFile("src/META-INF/beans.xml"); assertTrue(beansxml.exists()); IFile zoo = rootProject.getFile("src/beans/Zoo.java"); assertTrue(zoo.exists()); IFile wilderness = testProject.getFile("src/beans/Wilderness.java"); assertTrue(wilderness.exists()); AbstractResourceMarkerTest.assertMarkerIsNotCreated(zoo, CDIValidationMessages.AMBIGUOUS_INJECTION_POINTS[getVersionIndex()], 9); AbstractResourceMarkerTest.assertMarkerIsNotCreated(zoo, CDIValidationMessages.UNSATISFIED_INJECTION_POINTS[getVersionIndex()], 9); AbstractResourceMarkerTest.assertMarkerIsNotCreated(wilderness, CDIValidationMessages.AMBIGUOUS_INJECTION_POINTS[getVersionIndex()], 9); AbstractResourceMarkerTest.assertMarkerIsNotCreated(wilderness, CDIValidationMessages.UNSATISFIED_INJECTION_POINTS[getVersionIndex()], 9); IFile beansxml_all = testProject.getFile("src/META-INF/beans.xml.all"); assertTrue(beansxml_all.exists()); beansxml.setContents(beansxml_all.getContents(), IFile.FORCE, new NullProgressMonitor()); JobUtils.waitForIdle(); TestUtil.validate(beansxml); AbstractResourceMarkerTest.assertMarkerIsCreated(zoo, CDIValidationMessages.AMBIGUOUS_INJECTION_POINTS[getVersionIndex()], 9); AbstractResourceMarkerTest.assertMarkerIsCreated(wilderness, CDIValidationMessages.AMBIGUOUS_INJECTION_POINTS[getVersionIndex()], 9); IFile beansxml_none = testProject.getFile("src/META-INF/beans.xml.none"); assertTrue(beansxml_none.exists()); beansxml.setContents(beansxml_none.getContents(), IFile.FORCE, new NullProgressMonitor()); JobUtils.waitForIdle(); TestUtil.validate(beansxml); AbstractResourceMarkerTest.assertMarkerIsCreated(zoo, CDIValidationMessages.UNSATISFIED_INJECTION_POINTS[getVersionIndex()], 9); AbstractResourceMarkerTest.assertMarkerIsNotCreated(wilderness, CDIValidationMessages.AMBIGUOUS_INJECTION_POINTS[getVersionIndex()], 9); AbstractResourceMarkerTest.assertMarkerIsNotCreated(wilderness, CDIValidationMessages.UNSATISFIED_INJECTION_POINTS[getVersionIndex()], 9); IFile beansxml_original = testProject.getFile("src/META-INF/beans.xml.original"); assertTrue(beansxml_original.exists()); beansxml.setContents(beansxml_original.getContents(), IFile.FORCE, new NullProgressMonitor()); JobUtils.waitForIdle(); TestUtil.validate(beansxml); AbstractResourceMarkerTest.assertMarkerIsNotCreated(zoo, CDIValidationMessages.AMBIGUOUS_INJECTION_POINTS[getVersionIndex()], 9); AbstractResourceMarkerTest.assertMarkerIsNotCreated(zoo, CDIValidationMessages.UNSATISFIED_INJECTION_POINTS[getVersionIndex()], 9); AbstractResourceMarkerTest.assertMarkerIsNotCreated(wilderness, CDIValidationMessages.AMBIGUOUS_INJECTION_POINTS[getVersionIndex()], 9); AbstractResourceMarkerTest.assertMarkerIsNotCreated(wilderness, CDIValidationMessages.UNSATISFIED_INJECTION_POINTS[getVersionIndex()], 9); } finally { ResourcesUtils.setBuildAutomatically(saveAutoBuild); } } }