/**
* Copyright (C) 2015 drrb
*
* This program is free software: you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later
* version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.github.drrb.rust.netbeans.project;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.openide.filesystems.FileObject;
import static org.junit.Assert.*;
import static org.hamcrest.Matchers.*;
import static org.mockito.Mockito.*;
import org.netbeans.api.project.Project;
import org.netbeans.api.project.ProjectManager;
import org.netbeans.spi.project.ProjectState;
/**
*
*/
@RunWith(MockitoJUnitRunner.class)
public class RustProjectFactoryTest {
@Mock
private FileObject projectFolder;
@Mock
private ProjectState projectState;
private RustProjectFactory factory;
@Before
public void setUp() {
factory = new RustProjectFactory();
}
@Test
public void shouldNotIdentifyEmptyFolderAsProject() {
boolean projectDetected = factory.isProject(projectFolder);
assertThat(projectDetected, is(false));
}
@Test
public void shouldIdentifyAProjectWithACargoFile() {
when(projectFolder.getFileObject("Cargo.toml")).thenReturn(aFile());
boolean projectDetected = factory.isProject(projectFolder);
assertThat(projectDetected, is(true));
}
@Test
public void shouldNotLoadAProjectIfItIsntARustProjectDirectory() throws Exception {
Project project = factory.loadProject(projectFolder, projectState);
assertNull(project);
}
@Test
public void shouldLoadAProjectFromAProjectDirectory() throws Exception {
projectFolder = aProject();
Project project = factory.loadProject(projectFolder, projectState);
assertNotNull(project);
}
@Test
public void shouldReturnAnIconWhenDirectoryIsProject() {
when(projectFolder.getFileObject("Cargo.toml")).thenReturn(aFile());
ProjectManager.Result result = factory.isProject2(projectFolder);
assertThat(result.getIcon(), is(not(nullValue())));
}
@Test
public void shouldReturnNullWhenAnIconWhenDirectoryIsNotAProject() {
ProjectManager.Result result = factory.isProject2(projectFolder);
assertThat(result, is(nullValue()));
}
private FileObject aFile() {
return mock(FileObject.class);
}
private FileObject aProject() {
FileObject folder = mock(FileObject.class);
when(folder.getFileObject("Cargo.toml")).thenReturn(aFile());
return folder;
}
}