package org.netbeans.gradle.model.internal; import java.io.Serializable; import org.junit.Test; import org.netbeans.gradle.model.api.ProjectInfoBuilder2; import org.netbeans.gradle.model.util.SerializationCache; import org.netbeans.gradle.model.util.SerializationUtils; import static org.junit.Assert.*; public class ConstrProjectInfoBuilderRefTest { public <T> ProjectInfoBuilder2<T> create(Class<? extends T> modelType, String wrappedTypeName, Object... arguments) { return new ConstrProjectInfoBuilderRef<T>(modelType, wrappedTypeName, arguments); } @Test public void testNoArgumentWithoutPackage() { ProjectInfoBuilder2<TestObj> builderRef = create(TestObj.class, TestInfoBuilder.REL_NAME); TestObj returned = builderRef.getProjectInfo(new Object()); assertSame("model", TestInfoBuilder.DEFAULT_ARG, returned); } @Test public void test1ArgumentWithoutPackage() { TestObj model = new TestObj("MyTestObj"); ProjectInfoBuilder2<TestObj> builderRef = create(TestObj.class, TestInfoBuilder.REL_NAME, model); TestObj returned = builderRef.getProjectInfo(new Object()); assertSame("model", model, returned); } @Test public void test2ArgumentWithoutPackage() { TestObj model = new TestObj("MyTestObj"); ProjectInfoBuilder2<TestObj> builderRef = create(TestObj.class, TestInfoBuilder.REL_NAME, model, "MyName"); TestObj returned = builderRef.getProjectInfo(new Object()); assertSame("model", model, returned); assertEquals("name", "MyName", builderRef.getName()); } @Test public void testNoArgumentWithPackage() { ProjectInfoBuilder2<TestObj> builderRef = create(TestObj.class, TestInfoBuilder.ABS_NAME); TestObj returned = builderRef.getProjectInfo(new Object()); assertSame("model", TestInfoBuilder.DEFAULT_ARG, returned); } @Test public void test1ArgumentWithPackage() { TestObj model = new TestObj("MyTestObj"); ProjectInfoBuilder2<TestObj> builderRef = create(TestObj.class, TestInfoBuilder.ABS_NAME, model); TestObj returned = builderRef.getProjectInfo(new Object()); assertSame("model", model, returned); } @Test public void test2ArgumentWithPackage() { TestObj model = new TestObj("MyTestObj"); ProjectInfoBuilder2<TestObj> builderRef = create(TestObj.class, TestInfoBuilder.ABS_NAME, model, "MyName"); TestObj returned = builderRef.getProjectInfo(new Object()); assertSame("model", model, returned); assertEquals("name", "MyName", builderRef.getName()); } @Test public void testNameWithoutPackage() { TestObj model = new TestObj("MyTestObj"); ProjectInfoBuilder2<TestObj> builderRef = create(TestObj.class, TestInfoBuilder.REL_NAME, model, "MyName"); assertEquals("name", "MyName", builderRef.getName()); } @Test public void testNameWithPackage() { TestObj model = new TestObj("MyTestObj"); ProjectInfoBuilder2<TestObj> builderRef = create(TestObj.class, TestInfoBuilder.ABS_NAME, model, "MyName"); assertEquals("name", "MyName", builderRef.getName()); } @Test public void testProjectArgWithoutPackage() { ProjectInfoBuilder2<TestObj> builderRef = create(TestObj.class, TestInfoBuilderBasic.REL_NAME); TestObj project = new TestObj("MyTestProject"); Object returned = builderRef.getProjectInfo(project); assertSame("project", project, returned); } @Test public void testProjectArgWithPackage() { ProjectInfoBuilder2<TestObj> builderRef = create(TestObj.class, TestInfoBuilderBasic.ABS_NAME); TestObj project = new TestObj("MyTestProject"); Object returned = builderRef.getProjectInfo(project); assertSame("project", project, returned); } @Test public void testSerialization() throws Exception { TestObj model = new TestObj("MyTestObj"); ProjectInfoBuilder2<?> builderRef = create(TestObj.class, TestInfoBuilder.ABS_NAME, model, "MyName"); byte[] serialized = SerializationUtils.serializeObject(builderRef); builderRef = (ProjectInfoBuilder2<?>)SerializationUtils.deserializeObject(serialized, SerializationCache.NO_CACHE); Object returned = builderRef.getProjectInfo(new Object()); assertEquals("model", model.toString(), returned.toString()); assertEquals("name", "MyName", builderRef.getName()); } public static final class TestObj implements Serializable { private static final long serialVersionUID = 1L; private final String value; public TestObj(String value) { this.value = value; } @Override public String toString() { return value; } } public static final class TestInfoBuilder implements ProjectInfoBuilder2<TestObj> { private static final long serialVersionUID = 1L; public static final String REL_NAME = "ConstrProjectInfoBuilderRefTest$TestInfoBuilder"; public static final String ABS_NAME = TestInfoBuilder.class.getName(); public static final TestObj DEFAULT_ARG = new TestObj("TestDefaultArg"); public static final String DEFAULT_NAME = "TestDefaultName"; private final TestObj arg; private final String name; public TestInfoBuilder() { this(DEFAULT_ARG); } public TestInfoBuilder(TestObj arg) { this(arg, DEFAULT_NAME); } public TestInfoBuilder(TestObj arg, String name) { this.arg = arg; this.name = name; } public TestObj getProjectInfo(Object project) { return arg; } public String getName() { return name; } } public static final class TestInfoBuilderBasic implements ProjectInfoBuilder2<Object> { private static final long serialVersionUID = 1L; public static final String REL_NAME = "ConstrProjectInfoBuilderRefTest$TestInfoBuilderBasic"; public static final String ABS_NAME = TestInfoBuilderBasic.class.getName(); public TestInfoBuilderBasic() { } public Object getProjectInfo(Object project) { return project; } public String getName() { return "TestInfoBuilderBasic"; } } }