/*******************************************************************************
* See the NOTICE file distributed with this work for additional information
* regarding copyright ownership.
*
* 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 hr.fer.zemris.vhdllab.entity;
import static hr.fer.zemris.vhdllab.entity.stub.NamedEntityStub.NAME;
import static hr.fer.zemris.vhdllab.entity.stub.OwnedEntityStub.USER_ID;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import hr.fer.zemris.vhdllab.entity.stub.FileStub;
import hr.fer.zemris.vhdllab.entity.stub.FileStub2;
import hr.fer.zemris.vhdllab.entity.stub.ProjectStub;
import hr.fer.zemris.vhdllab.test.ValueObjectTestSupport;
import java.util.HashSet;
import java.util.Set;
import org.apache.commons.collections.CollectionUtils;
import org.junit.Before;
import org.junit.Test;
public class ProjectTest extends ValueObjectTestSupport {
private Project entity;
@Before
public void initEntity() throws Exception {
entity = new ProjectStub();
}
@Test
public void basics() {
Project another = new Project();
assertNotNull("files is null.", another.getFiles());
assertTrue("files not empty.", another.getFiles().isEmpty());
another.setFiles(null);
assertNull("files not cleared.", another.getFiles());
}
@Test
public void constructorName() {
Project another = new Project(NAME);
assertEquals("name not same.", NAME, another.getName());
assertNull("userId not null", another.getUserId());
assertTrue("files not empty.", another.getFiles().isEmpty());
}
@Test
public void constructorUserIdAndName() {
Project another = new Project(USER_ID, NAME);
assertEquals("userId not same.", USER_ID, another.getUserId());
assertEquals("name not same.", NAME, another.getName());
assertTrue("files not empty.", another.getFiles().isEmpty());
}
@Test
public void copyConstructor() {
Project another = new Project(entity);
assertEquals("userId not same.", entity.getUserId(), another
.getUserId());
assertTrue("files not empty.", another.getFiles().isEmpty());
}
@Test
public void setFiles() throws Exception {
entity = new Project();
assertTrue("files not empty.", entity.getFiles().isEmpty());
entity.getFiles().add(new FileStub());
assertFalse("files is empty.", entity.getFiles().isEmpty());
entity = new Project();
Set<File> files = new HashSet<File>();
entity.setFiles(files);
assertTrue("files not empty.", entity.getFiles().isEmpty());
files.add(new FileStub());
assertFalse("files is empty.", entity.getFiles().isEmpty());
}
@Test(expected = IllegalArgumentException.class)
public void addFileNullArgument() {
entity.addFile(null);
}
/**
* Add a file.
*/
@Test
public void addFile() throws Exception {
Set<File> files = new HashSet<File>(entity.getFiles());
File anotherFile = new FileStub2();
entity.addFile(anotherFile);
files.add(anotherFile);
assertTrue("file not added.", entity.getFiles().contains(anotherFile));
assertEquals("file size not same.", files.size(), entity.getFiles()
.size());
assertEquals("files not same.", files, entity.getFiles());
}
/**
* Add a file that is already in that project.
*/
@Test
public void addFile2() throws Exception {
Set<File> files = new HashSet<File>(entity.getFiles());
File file = (File) CollectionUtils.get(entity.getFiles(), 0);
entity.addFile(file);
assertEquals("files not same.", files, entity.getFiles());
assertEquals("files is changed.", 1, entity.getFiles().size());
}
/**
* Add a file that is already in another project.
*/
@Test(expected = IllegalArgumentException.class)
public void addFile3() throws Exception {
Project another = new Project(entity);
File file = (File) CollectionUtils.get(entity.getFiles(), 0);
another.addFile(file);
}
@Test(expected = IllegalArgumentException.class)
public void removeFileNullArgument() {
entity.addFile(null);
}
/**
* Remove a file.
*/
@Test
public void removeFile() throws Exception {
File file = (File) CollectionUtils.get(entity.getFiles(), 0);
entity.removeFile(file);
assertTrue("files not empty.", entity.getFiles().isEmpty());
assertNull("project isn't set to null.", file.getProject());
}
/**
* Remove a file that doesn't belong to any project.
*/
@Test(expected = IllegalArgumentException.class)
public void removeFile2() throws Exception {
File anotherFile = new FileStub2();
entity.removeFile(anotherFile);
}
/**
* Remove a file that belongs to another project.
*/
@Test(expected = IllegalArgumentException.class)
public void removeFile3() throws Exception {
File file = (File) CollectionUtils.get(entity.getFiles(), 0);
Project another = new Project(entity);
another.removeFile(file);
}
@Test
public void testToString() {
toStringPrint(entity);
}
}