/*******************************************************************************
* Copyright (c) 2010 Red Hat Inc. and others.
* 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 org.eclipse.linuxtools.changelog.tests.fixtures;
import static org.junit.Assert.*;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.Path;
import org.eclipse.jdt.core.IJavaProject;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.eclipse.cdt.core.model.CoreModel;
/**
* @author Redhat Inc.
*
*/
public class TestChangeLogTestProject {
private ChangeLogTestProject project;
/**
* @throws java.lang.Exception
*/
@Before
public void setUp() throws Exception {
project = new ChangeLogTestProject("com.redhat.testchangelog.project");
}
/**
* @throws java.lang.Exception
*/
@After
public void tearDown() throws Exception {
// dispose
project.getTestProject().delete(true, null);
}
/**
* Test method for
* {@link org.eclipse.linuxtools.changelog.tests.fixtures.ChangeLogTestProject#addFileToProject(java.lang.String, java.lang.String, java.io.InputStream)}
* .
*/
@Test
public void testAddFileToProject() throws Exception {
String fileContent = "some content";
InputStream newFileInputStream = new ByteArrayInputStream(
fileContent.getBytes());
// Create file "testfile.txt" with content "some content" at
// "/this/is/a/testpath"
project.addFileToProject("/this/is/a/testpath", "testfile.txt",
newFileInputStream);
IProject p = project.getTestProject();
// Paths along the way should have been created
IResource member = p.findMember(new Path("/this"));
assertNotNull(member);
assertEquals("this", member.getName());
member = p.findMember(new Path("/this/is"));
assertNotNull(member);
assertEquals("is", member.getName());
member = p.findMember(new Path("/this/is/a"));
assertNotNull(member);
assertEquals("a", member.getName());
member = p.findMember(new Path("/this/is/a/testpath"));
assertNotNull(member);
assertEquals("testpath", member.getName());
// Testfile should be around
IResource createdFile = p.findMember(new Path("/this/is/a/testpath/testfile.txt"));
assertNotNull(createdFile);
assertEquals("this/is/a/testpath/testfile.txt", createdFile.getProjectRelativePath().toString());
assertEquals("testfile.txt", createdFile.getName());
assertTrue(createdFile instanceof IFile);
// Content should be "some content"
try (BufferedReader br = new BufferedReader(new InputStreamReader(
new FileInputStream(createdFile.getLocation().toFile())))) {
String actualContent = br.readLine();
assertEquals(fileContent, actualContent);
}
// this should throw an IllegalStateException
boolean exceptionTrown = false;
try {
project.addFileToProject("donnot/care", "not_important.java",
null /* should cause exception */);
} catch (IllegalStateException e) {
// pass
exceptionTrown = true;
}
assertTrue(exceptionTrown);
}
/**
* We should be able to add a Java nature to a project.
*
* @throws Exception
*/
@Test
public void canAddJavaNature() throws Exception {
IJavaProject javaProject = this.project.addJavaNature();
assertNotNull(javaProject);
}
/**
* We should be able to add a C nature to a project.
*
* @throws Exception
*/
@Test
public void canAddCNature() throws Exception {
IProject cProject = this.project.getTestProject();
assertFalse(CoreModel.hasCNature(cProject));
// Add C nature
this.project.addCNature();
cProject = this.project.getTestProject();
assertTrue(CoreModel.hasCNature(cProject));
}
/**
* We should be able to add a C++ nature to a project.
*
* @throws Exception
*/
@Test
public void canAddCCNature() throws Exception {
IProject ccProject = this.project.getTestProject();
assertFalse(CoreModel.hasCCNature(ccProject));
// Add C++ nature
this.project.addCCNature();
ccProject = this.project.getTestProject();
assertTrue(CoreModel.hasCCNature(ccProject));
}
}