/*******************************************************************************
* This file is protected by Copyright.
* Please refer to the COPYRIGHT file distributed with this source distribution.
*
* This file is part of REDHAWK IDE.
*
* 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
*******************************************************************************/
package gov.redhawk.ide.dcd.generator.newdevice.tests;
import org.eclipse.core.resources.ICommand;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import gov.redhawk.ide.builders.SCABuilder;
import gov.redhawk.ide.dcd.generator.newdevice.DeviceProjectCreator;
import gov.redhawk.ide.preferences.RedhawkIdePreferenceConstants;
import mil.jpeojtrs.sca.prf.PrfPackage;
import mil.jpeojtrs.sca.scd.Interface;
import mil.jpeojtrs.sca.scd.ScdPackage;
import mil.jpeojtrs.sca.scd.SupportsInterface;
import mil.jpeojtrs.sca.spd.SoftPkg;
import mil.jpeojtrs.sca.spd.SpdPackage;
/**
* A class to test {@link DeviceProjectCreatorTest}.
*/
public class DeviceProjectCreatorTest {
private static final String AGG_DEV_TEST = "aggDevTest";
private static final String PROJECT_NAME = "deviceProjectTest";
/**
* Tests creating an empty project.
* IDE-1707 Ensure ScaProjectNature was configured, adding the SCA builder
*/
@Test
public void createEmptyProject() throws CoreException {
final IProject project = DeviceProjectCreator.createEmptyProject(DeviceProjectCreatorTest.PROJECT_NAME, null, new NullProgressMonitor());
Assert.assertNotNull(project);
Assert.assertTrue("deviceProjectTest".equals(project.getName()));
boolean found = false;
for (ICommand command : project.getDescription().getBuildSpec()) {
if (command.getBuilderName().equals(SCABuilder.ID)) {
found = true;
}
}
Assert.assertTrue("SCA builder not found", found);
project.delete(true, new NullProgressMonitor());
}
@Before
public void cleanUp() throws CoreException {
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
IProject project = root.getProject(DeviceProjectCreatorTest.PROJECT_NAME);
if (project.exists()) {
project.delete(true, true, null);
}
project = root.getProject(DeviceProjectCreatorTest.AGG_DEV_TEST);
if (project.exists()) {
project.delete(true, true, null);
}
}
@After
public void cleanUpAfter() throws CoreException {
cleanUp();
}
/**
* Tests creating the device files
*/
@Test
public void testCreateDeviceFiles() throws CoreException {
final IProject project = DeviceProjectCreator.createEmptyProject(DeviceProjectCreatorTest.PROJECT_NAME, null, new NullProgressMonitor());
Assert.assertNotNull(project);
Assert.assertTrue(project.exists());
Assert.assertTrue(DeviceProjectCreatorTest.PROJECT_NAME.equals(project.getName()));
DeviceProjectCreator.createDeviceFiles(project, DeviceProjectCreatorTest.PROJECT_NAME, "gov.redhawk.deviceProjectTest", "Author",
RedhawkIdePreferenceConstants.EXECUTABLE_DEVICE, false, new NullProgressMonitor());
final IFile spdFile = project.getFile(project.getName() + SpdPackage.FILE_EXTENSION);
Assert.assertTrue(spdFile.exists());
final IFile prfFile = project.getFile(project.getName() + PrfPackage.FILE_EXTENSION);
Assert.assertTrue(prfFile.exists());
final IFile scdFile = project.getFile(project.getName() + ScdPackage.FILE_EXTENSION);
Assert.assertTrue(scdFile.exists());
final IFolder testFolder = project.getFolder("tests");
String msg = "Test files are now created by the Jinja code generators, files must not exist.";
// If the folder exists make sure it is empty.
if (testFolder.exists()) {
Assert.assertTrue(msg, testFolder.members().length == 0);
}
final ResourceSet resourceSet = new ResourceSetImpl();
final SoftPkg dev = SoftPkg.Util.getSoftPkg(
resourceSet.getResource(URI.createPlatformResourceURI("/deviceProjectTest/deviceProjectTest.spd.xml", true), true));
Assert.assertEquals(project.getName(), dev.getName());
Assert.assertEquals("Author", dev.getAuthor().get(0).getName().get(0));
Assert.assertEquals("executabledevice", dev.getDescriptor().getComponent().getComponentType());
project.delete(true, new NullProgressMonitor());
}
/**
* Tests that if an aggregate device is requested that it gets created
*/
@Test
public void testCreateAggregateDevice() throws CoreException {
final IProject project = DeviceProjectCreator.createEmptyProject(DeviceProjectCreatorTest.AGG_DEV_TEST, null, new NullProgressMonitor());
Assert.assertNotNull(project);
Assert.assertTrue(project.exists());
Assert.assertTrue(DeviceProjectCreatorTest.AGG_DEV_TEST.equals(project.getName()));
DeviceProjectCreator.createDeviceFiles(project, DeviceProjectCreatorTest.AGG_DEV_TEST, "gov.redhawk.deviceProjectTest", "Author",
RedhawkIdePreferenceConstants.EXECUTABLE_DEVICE, true, new NullProgressMonitor());
final IFile spdFile = project.getFile(project.getName() + SpdPackage.FILE_EXTENSION);
Assert.assertTrue(spdFile.exists());
final IFile prfFile = project.getFile(project.getName() + PrfPackage.FILE_EXTENSION);
Assert.assertTrue(prfFile.exists());
final IFile scdFile = project.getFile(project.getName() + ScdPackage.FILE_EXTENSION);
Assert.assertTrue(scdFile.exists());
final ResourceSet resourceSet = new ResourceSetImpl();
final SoftPkg dev = SoftPkg.Util.getSoftPkg(resourceSet.getResource(URI.createPlatformResourceURI("/aggDevTest/aggDevTest.spd.xml", true), true));
boolean found = false;
for (final SupportsInterface intf : dev.getDescriptor().getComponent().getComponentFeatures().getSupportsInterface()) {
if ("IDL:CF/AggregateDevice:1.0".equals(intf.getRepId())) {
found = true;
break;
}
}
Assert.assertTrue("Couldn't find the AggregateDevice interface in the component supported interfaces", found);
found = false;
for (final Interface intf : dev.getDescriptor().getComponent().getInterfaces().getInterface()) {
if ("IDL:CF/AggregateDevice:1.0".equals(intf.getRepid())) {
found = true;
break;
}
}
Assert.assertTrue("Couldn't find the AggregateDevice interface in the interfaces list", found);
project.delete(true, new NullProgressMonitor());
}
}