/*******************************************************************************
* 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.service.workspace;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import hr.fer.zemris.vhdllab.entity.File;
import hr.fer.zemris.vhdllab.entity.Project;
import hr.fer.zemris.vhdllab.service.hierarchy.Hierarchy;
import hr.fer.zemris.vhdllab.test.ValueObjectTestSupport;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.Predicate;
import org.apache.commons.lang.SerializationUtils;
import org.junit.Before;
import org.junit.Test;
public class ProjectMetadataTest extends ValueObjectTestSupport {
private Hierarchy hierarchy;
private Set<File> files;
private ProjectMetadata metadata;
@SuppressWarnings("unchecked")
@Before
public void initObject() {
Project project = new Project("userId", "name");
hierarchy = new Hierarchy(project, Collections.EMPTY_LIST);
files = new HashSet<File>(2);
File file = new File("file1", null, "data");
file.setProject(project);
files.add(file);
file = new File("file2", null, "data2");
file.setProject(project);
files.add(file);
metadata = new ProjectMetadata(hierarchy, files);
}
@Test(expected = IllegalArgumentException.class)
public void constructorNullProject() {
new ProjectMetadata(null);
}
@Test(expected = IllegalArgumentException.class)
public void constructorNullHierarchy() {
new ProjectMetadata(null, files);
}
@Test(expected = IllegalArgumentException.class)
public void constructorNullFiles() {
new ProjectMetadata(hierarchy, null);
}
@Test
public void constructorProject() {
Project project = new Project("userId", "project_name");
metadata = new ProjectMetadata(project);
assertEquals(project, metadata.getHierarchy().getProject());
assertEquals(project, metadata.getProject());
assertEquals(0, metadata.getHierarchy().getFileCount());
assertTrue(metadata.getFiles().isEmpty());
}
@Test
public void constructorHierarchyFiles() {
metadata = new ProjectMetadata(hierarchy, files);
assertEquals(hierarchy, metadata.getHierarchy());
assertEquals(2, metadata.getFiles().size());
files.add(new File());
assertEquals(2, metadata.getFiles().size());
File file = (File) CollectionUtils.get(metadata.getFiles(), 0);
assertNull(file.getProject());
file = (File) CollectionUtils.get(files, 0);
file.setName("new_name");
File another = (File) CollectionUtils.get(metadata.getFiles(), 0);
assertFalse(file.equals(another));
}
@Test
public void getProject() {
Project project = metadata.getProject();
project.setName("new_name");
assertFalse(project.equals(metadata.getProject()));
}
@Test(expected = UnsupportedOperationException.class)
public void getFiles() {
metadata.getFiles().add(new File());
}
@Test
public void getFiles2() {
File file = (File) CollectionUtils.get(metadata.getFiles(), 0);
file.setName("new_name");
File another = (File) CollectionUtils.get(metadata.getFiles(), 0);
assertTrue(file.equals(another));
}
@Test(expected = IllegalArgumentException.class)
public void addFile() {
metadata.addFile(null);
}
@Test
public void addFile2() {
File file = new File("file_name", null, "data");
file.setProject(hierarchy.getProject());
metadata.addFile(file);
assertEquals(3, metadata.getFiles().size());
assertTrue(metadata.getFiles().contains(file));
File another = new File(file);
another.setData("new_data");
metadata.addFile(another);
assertEquals(3, metadata.getFiles().size());
File found = (File) CollectionUtils.find(metadata.getFiles(),
new Predicate() {
@Override
public boolean evaluate(Object object) {
File f = (File) object;
return f.getName().equals("file_name");
}
});
assertEquals("new_data", found.getData());
}
@Test
public void addFile3() {
File file = new File("file_name", null, "data");
metadata.addFile(file);
File found = (File) CollectionUtils.find(metadata.getFiles(),
new Predicate() {
@Override
public boolean evaluate(Object object) {
File f = (File) object;
return f.getName().equals("file_name");
}
});
assertEquals(hierarchy.getProject(), found.getProject());
}
@Test(expected = IllegalArgumentException.class)
public void removeFile() {
metadata.removeFile(null);
}
@Test
public void removeFile2() {
File file = (File) CollectionUtils.get(metadata.getFiles(), 0);
metadata.removeFile(file);
assertEquals(1, metadata.getFiles().size());
assertFalse(metadata.getFiles().contains(file));
}
@Test(expected = IllegalArgumentException.class)
public void setHierarchy() {
metadata.setHierarchy(null);
}
@Test
public void afterSerialization() {
metadata = (ProjectMetadata) SerializationUtils.clone(metadata);
for (File f : metadata.getFiles()) {
assertEquals(hierarchy.getProject(), f.getProject());
}
File file = (File) CollectionUtils.get(files, 0);
assertTrue(
"change in hashCode of a file (added project reference) isn't reflected to the set containing it.",
metadata.getFiles().contains(file));
}
@Test
public void testToString() {
toStringPrint(metadata);
}
}