package com.tinkerpop.rexster.extension; import org.jmock.Expectations; import org.jmock.Mockery; import org.jmock.integration.junit4.JUnit4Mockery; import org.junit.Assert; import org.junit.Test; import javax.ws.rs.core.PathSegment; import javax.ws.rs.core.UriInfo; import java.util.ArrayList; import java.util.List; public class ExtensionSegmentSetTest { private Mockery mockery = new JUnit4Mockery(); @Test public void isValidFormatGraphExtensionNoNamespace() { final UriInfo uri = this.mockery.mock(UriInfo.class); final List<PathSegment> pathSegments = new ArrayList<PathSegment>(); final PathSegment graphPathSegment = this.mockery.mock(PathSegment.class, "graphPathSegment"); pathSegments.add(graphPathSegment); this.mockery.checking(new Expectations() {{ allowing(uri).getPathSegments(); will(returnValue(pathSegments)); }}); ExtensionSegmentSet extensionSegmentSet = new ExtensionSegmentSet(uri, ExtensionPoint.GRAPH); Assert.assertFalse(extensionSegmentSet.isValidFormat()); Assert.assertEquals("", extensionSegmentSet.getNamespace()); Assert.assertEquals("", extensionSegmentSet.getExtension()); Assert.assertEquals("", extensionSegmentSet.getExtensionMethod()); Assert.assertEquals("", extensionSegmentSet.getNamespaceAndExtension()); Assert.assertEquals("[parse error]:[parse error]+*", extensionSegmentSet.toString()); } @Test public void isValidFormatGraphExtensionNoExtension() { final UriInfo uri = this.mockery.mock(UriInfo.class); final List<PathSegment> pathSegments = new ArrayList<PathSegment>(); final PathSegment graphsPathSegment = this.mockery.mock(PathSegment.class, "graphsSegment"); final PathSegment graphPathSegment = this.mockery.mock(PathSegment.class, "graphPathSegment"); final PathSegment namespacePathSegment = this.mockery.mock(PathSegment.class, "namespacePathSegment"); pathSegments.add(graphsPathSegment); pathSegments.add(graphPathSegment); pathSegments.add(namespacePathSegment); this.mockery.checking(new Expectations() {{ allowing(namespacePathSegment).getPath(); will(returnValue("ns")); allowing(uri).getPathSegments(); will(returnValue(pathSegments)); }}); ExtensionSegmentSet extensionSegmentSet = new ExtensionSegmentSet(uri, ExtensionPoint.GRAPH); Assert.assertFalse(extensionSegmentSet.isValidFormat()); Assert.assertEquals("ns", extensionSegmentSet.getNamespace()); Assert.assertEquals("", extensionSegmentSet.getExtension()); Assert.assertEquals("", extensionSegmentSet.getExtensionMethod()); Assert.assertEquals("", extensionSegmentSet.getNamespaceAndExtension()); Assert.assertEquals("ns:[parse error]+*", extensionSegmentSet.toString()); } @Test public void isValidFormatGraphExtensionValidNoMethod() { final UriInfo uri = this.mockery.mock(UriInfo.class); final List<PathSegment> pathSegments = new ArrayList<PathSegment>(); final PathSegment graphsPathSegment = this.mockery.mock(PathSegment.class, "graphsSegment"); final PathSegment graphPathSegment = this.mockery.mock(PathSegment.class, "graphPathSegment"); final PathSegment namespacePathSegment = this.mockery.mock(PathSegment.class, "namespacePathSegment"); final PathSegment extensionPathSegment = this.mockery.mock(PathSegment.class, "extensionPathSegment"); pathSegments.add(graphsPathSegment); pathSegments.add(graphPathSegment); pathSegments.add(namespacePathSegment); pathSegments.add(extensionPathSegment); this.mockery.checking(new Expectations() {{ allowing(namespacePathSegment).getPath(); will(returnValue("ns")); allowing(extensionPathSegment).getPath(); will(returnValue("ext")); allowing(uri).getPathSegments(); will(returnValue(pathSegments)); }}); ExtensionSegmentSet extensionSegmentSet = new ExtensionSegmentSet(uri, ExtensionPoint.GRAPH); Assert.assertTrue(extensionSegmentSet.isValidFormat()); Assert.assertEquals("ns", extensionSegmentSet.getNamespace()); Assert.assertEquals("ext", extensionSegmentSet.getExtension()); Assert.assertEquals("", extensionSegmentSet.getExtensionMethod()); Assert.assertEquals("ns:ext", extensionSegmentSet.getNamespaceAndExtension()); Assert.assertEquals("ns:ext+*", extensionSegmentSet.toString()); } @Test public void isValidFormatGraphExtensionValidWithMethod() { final UriInfo uri = this.mockery.mock(UriInfo.class); final List<PathSegment> pathSegments = new ArrayList<PathSegment>(); final PathSegment graphsPathSegment = this.mockery.mock(PathSegment.class, "graphsSegment"); final PathSegment graphPathSegment = this.mockery.mock(PathSegment.class, "graphPathSegment"); final PathSegment namespacePathSegment = this.mockery.mock(PathSegment.class, "namespacePathSegment"); final PathSegment extensionPathSegment = this.mockery.mock(PathSegment.class, "extensionPathSegment"); final PathSegment methodPathSegment = this.mockery.mock(PathSegment.class, "methodPathSegment"); pathSegments.add(graphsPathSegment); pathSegments.add(graphPathSegment); pathSegments.add(namespacePathSegment); pathSegments.add(extensionPathSegment); pathSegments.add(methodPathSegment); this.mockery.checking(new Expectations() {{ allowing(namespacePathSegment).getPath(); will(returnValue("ns")); allowing(extensionPathSegment).getPath(); will(returnValue("ext")); allowing(methodPathSegment).getPath(); will(returnValue("meth")); allowing(uri).getPathSegments(); will(returnValue(pathSegments)); }}); ExtensionSegmentSet extensionSegmentSet = new ExtensionSegmentSet(uri, ExtensionPoint.GRAPH); Assert.assertTrue(extensionSegmentSet.isValidFormat()); Assert.assertEquals("ns", extensionSegmentSet.getNamespace()); Assert.assertEquals("ext", extensionSegmentSet.getExtension()); Assert.assertEquals("meth", extensionSegmentSet.getExtensionMethod()); Assert.assertEquals("ns:ext", extensionSegmentSet.getNamespaceAndExtension()); Assert.assertEquals("ns:ext+meth", extensionSegmentSet.toString()); } @Test public void isValidFormatVertexExtensionNoNamespace() { final UriInfo uri = this.mockery.mock(UriInfo.class); final List<PathSegment> pathSegments = new ArrayList<PathSegment>(); final PathSegment graphsPathSegment = this.mockery.mock(PathSegment.class, "graphsSegment"); final PathSegment graphPathSegment = this.mockery.mock(PathSegment.class, "graphPathSegment"); final PathSegment elementPathSegment = this.mockery.mock(PathSegment.class, "elementPathSegment"); final PathSegment idPathSegment = this.mockery.mock(PathSegment.class, "idPathSegment"); pathSegments.add(graphsPathSegment); pathSegments.add(graphPathSegment); pathSegments.add(elementPathSegment); pathSegments.add(idPathSegment); this.mockery.checking(new Expectations() {{ allowing(uri).getPathSegments(); will(returnValue(pathSegments)); }}); ExtensionSegmentSet extensionSegmentSet = new ExtensionSegmentSet(uri, ExtensionPoint.VERTEX); Assert.assertFalse(extensionSegmentSet.isValidFormat()); Assert.assertEquals("", extensionSegmentSet.getNamespace()); Assert.assertEquals("", extensionSegmentSet.getExtension()); Assert.assertEquals("", extensionSegmentSet.getExtensionMethod()); Assert.assertEquals("", extensionSegmentSet.getNamespaceAndExtension()); Assert.assertEquals("[parse error]:[parse error]+*", extensionSegmentSet.toString()); } @Test public void isValidFormatVertexExtensionNoExtension() { final UriInfo uri = this.mockery.mock(UriInfo.class); final List<PathSegment> pathSegments = new ArrayList<PathSegment>(); final PathSegment graphsPathSegment = this.mockery.mock(PathSegment.class, "graphsSegment"); final PathSegment graphPathSegment = this.mockery.mock(PathSegment.class, "graphPathSegment"); final PathSegment elementPathSegment = this.mockery.mock(PathSegment.class, "elementPathSegment"); final PathSegment idPathSegment = this.mockery.mock(PathSegment.class, "idPathSegment"); final PathSegment namespacePathSegment = this.mockery.mock(PathSegment.class, "namespacePathSegment"); pathSegments.add(graphsPathSegment); pathSegments.add(graphPathSegment); pathSegments.add(elementPathSegment); pathSegments.add(idPathSegment); pathSegments.add(namespacePathSegment); this.mockery.checking(new Expectations() {{ allowing(namespacePathSegment).getPath(); will(returnValue("ns")); allowing(uri).getPathSegments(); will(returnValue(pathSegments)); }}); ExtensionSegmentSet extensionSegmentSet = new ExtensionSegmentSet(uri, ExtensionPoint.VERTEX); Assert.assertFalse(extensionSegmentSet.isValidFormat()); Assert.assertEquals("ns", extensionSegmentSet.getNamespace()); Assert.assertEquals("", extensionSegmentSet.getExtension()); Assert.assertEquals("", extensionSegmentSet.getExtensionMethod()); Assert.assertEquals("", extensionSegmentSet.getNamespaceAndExtension()); Assert.assertEquals("ns:[parse error]+*", extensionSegmentSet.toString()); } @Test public void isValidFormatVertexExtensionValidNoMethod() { final UriInfo uri = this.mockery.mock(UriInfo.class); final List<PathSegment> pathSegments = new ArrayList<PathSegment>(); final PathSegment graphsPathSegment = this.mockery.mock(PathSegment.class, "graphsSegment"); final PathSegment graphPathSegment = this.mockery.mock(PathSegment.class, "graphPathSegment"); final PathSegment elementPathSegment = this.mockery.mock(PathSegment.class, "elementPathSegment"); final PathSegment idPathSegment = this.mockery.mock(PathSegment.class, "idPathSegment"); final PathSegment namespacePathSegment = this.mockery.mock(PathSegment.class, "namespacePathSegment"); final PathSegment extensionPathSegment = this.mockery.mock(PathSegment.class, "extensionPathSegment"); pathSegments.add(graphsPathSegment); pathSegments.add(graphPathSegment); pathSegments.add(elementPathSegment); pathSegments.add(idPathSegment); pathSegments.add(namespacePathSegment); pathSegments.add(extensionPathSegment); this.mockery.checking(new Expectations() {{ allowing(namespacePathSegment).getPath(); will(returnValue("ns")); allowing(extensionPathSegment).getPath(); will(returnValue("ext")); allowing(uri).getPathSegments(); will(returnValue(pathSegments)); }}); ExtensionSegmentSet extensionSegmentSet = new ExtensionSegmentSet(uri, ExtensionPoint.VERTEX); Assert.assertTrue(extensionSegmentSet.isValidFormat()); Assert.assertEquals("ns", extensionSegmentSet.getNamespace()); Assert.assertEquals("ext", extensionSegmentSet.getExtension()); Assert.assertEquals("", extensionSegmentSet.getExtensionMethod()); Assert.assertEquals("ns:ext", extensionSegmentSet.getNamespaceAndExtension()); Assert.assertEquals("ns:ext+*", extensionSegmentSet.toString()); } @Test public void isValidFormatVertexExtensionValidWithMethod() { final UriInfo uri = this.mockery.mock(UriInfo.class); final List<PathSegment> pathSegments = new ArrayList<PathSegment>(); final PathSegment graphsPathSegment = this.mockery.mock(PathSegment.class, "graphsSegment"); final PathSegment graphPathSegment = this.mockery.mock(PathSegment.class, "graphPathSegment"); final PathSegment elementPathSegment = this.mockery.mock(PathSegment.class, "elementPathSegment"); final PathSegment idPathSegment = this.mockery.mock(PathSegment.class, "idPathSegment"); final PathSegment namespacePathSegment = this.mockery.mock(PathSegment.class, "namespacePathSegment"); final PathSegment extensionPathSegment = this.mockery.mock(PathSegment.class, "extensionPathSegment"); final PathSegment methodPathSegment = this.mockery.mock(PathSegment.class, "methodPathSegment"); pathSegments.add(graphsPathSegment); pathSegments.add(graphPathSegment); pathSegments.add(elementPathSegment); pathSegments.add(idPathSegment); pathSegments.add(namespacePathSegment); pathSegments.add(extensionPathSegment); pathSegments.add(methodPathSegment); this.mockery.checking(new Expectations() {{ allowing(namespacePathSegment).getPath(); will(returnValue("ns")); allowing(extensionPathSegment).getPath(); will(returnValue("ext")); allowing(methodPathSegment).getPath(); will(returnValue("meth")); allowing(uri).getPathSegments(); will(returnValue(pathSegments)); }}); ExtensionSegmentSet extensionSegmentSet = new ExtensionSegmentSet(uri, ExtensionPoint.VERTEX); Assert.assertTrue(extensionSegmentSet.isValidFormat()); Assert.assertEquals("ns", extensionSegmentSet.getNamespace()); Assert.assertEquals("ext", extensionSegmentSet.getExtension()); Assert.assertEquals("meth", extensionSegmentSet.getExtensionMethod()); Assert.assertEquals("ns:ext", extensionSegmentSet.getNamespaceAndExtension()); Assert.assertEquals("ns:ext+meth", extensionSegmentSet.toString()); } @Test public void isValidFormatEdgeExtensionNoNamespace() { final UriInfo uri = this.mockery.mock(UriInfo.class); final List<PathSegment> pathSegments = new ArrayList<PathSegment>(); final PathSegment graphsPathSegment = this.mockery.mock(PathSegment.class, "graphsSegment"); final PathSegment graphPathSegment = this.mockery.mock(PathSegment.class, "graphPathSegment"); final PathSegment elementPathSegment = this.mockery.mock(PathSegment.class, "elementPathSegment"); final PathSegment idPathSegment = this.mockery.mock(PathSegment.class, "idPathSegment"); pathSegments.add(graphsPathSegment); pathSegments.add(graphPathSegment); pathSegments.add(elementPathSegment); pathSegments.add(idPathSegment); this.mockery.checking(new Expectations() {{ allowing(uri).getPathSegments(); will(returnValue(pathSegments)); }}); ExtensionSegmentSet extensionSegmentSet = new ExtensionSegmentSet(uri, ExtensionPoint.EDGE); Assert.assertFalse(extensionSegmentSet.isValidFormat()); Assert.assertEquals("", extensionSegmentSet.getNamespace()); Assert.assertEquals("", extensionSegmentSet.getExtension()); Assert.assertEquals("", extensionSegmentSet.getExtensionMethod()); Assert.assertEquals("", extensionSegmentSet.getNamespaceAndExtension()); Assert.assertEquals("[parse error]:[parse error]+*", extensionSegmentSet.toString()); } @Test public void isValidFormatEdgeExtensionNoExtension() { final UriInfo uri = this.mockery.mock(UriInfo.class); final List<PathSegment> pathSegments = new ArrayList<PathSegment>(); final PathSegment graphsPathSegment = this.mockery.mock(PathSegment.class, "graphsSegment"); final PathSegment graphPathSegment = this.mockery.mock(PathSegment.class, "graphPathSegment"); final PathSegment elementPathSegment = this.mockery.mock(PathSegment.class, "elementPathSegment"); final PathSegment idPathSegment = this.mockery.mock(PathSegment.class, "idPathSegment"); final PathSegment namespacePathSegment = this.mockery.mock(PathSegment.class, "namespacePathSegment"); pathSegments.add(graphsPathSegment); pathSegments.add(graphPathSegment); pathSegments.add(elementPathSegment); pathSegments.add(idPathSegment); pathSegments.add(namespacePathSegment); this.mockery.checking(new Expectations() {{ allowing(namespacePathSegment).getPath(); will(returnValue("ns")); allowing(uri).getPathSegments(); will(returnValue(pathSegments)); }}); ExtensionSegmentSet extensionSegmentSet = new ExtensionSegmentSet(uri, ExtensionPoint.EDGE); Assert.assertFalse(extensionSegmentSet.isValidFormat()); Assert.assertEquals("ns", extensionSegmentSet.getNamespace()); Assert.assertEquals("", extensionSegmentSet.getExtension()); Assert.assertEquals("", extensionSegmentSet.getExtensionMethod()); Assert.assertEquals("", extensionSegmentSet.getNamespaceAndExtension()); Assert.assertEquals("ns:[parse error]+*", extensionSegmentSet.toString()); } @Test public void isValidFormatEdgeExtensionValidNoMethod() { final UriInfo uri = this.mockery.mock(UriInfo.class); final List<PathSegment> pathSegments = new ArrayList<PathSegment>(); final PathSegment graphsPathSegment = this.mockery.mock(PathSegment.class, "graphsSegment"); final PathSegment graphPathSegment = this.mockery.mock(PathSegment.class, "graphPathSegment"); final PathSegment elementPathSegment = this.mockery.mock(PathSegment.class, "elementPathSegment"); final PathSegment idPathSegment = this.mockery.mock(PathSegment.class, "idPathSegment"); final PathSegment namespacePathSegment = this.mockery.mock(PathSegment.class, "namespacePathSegment"); final PathSegment extensionPathSegment = this.mockery.mock(PathSegment.class, "extensionPathSegment"); pathSegments.add(graphsPathSegment); pathSegments.add(graphPathSegment); pathSegments.add(elementPathSegment); pathSegments.add(idPathSegment); pathSegments.add(namespacePathSegment); pathSegments.add(extensionPathSegment); this.mockery.checking(new Expectations() {{ allowing(namespacePathSegment).getPath(); will(returnValue("ns")); allowing(extensionPathSegment).getPath(); will(returnValue("ext")); allowing(uri).getPathSegments(); will(returnValue(pathSegments)); }}); ExtensionSegmentSet extensionSegmentSet = new ExtensionSegmentSet(uri, ExtensionPoint.EDGE); Assert.assertTrue(extensionSegmentSet.isValidFormat()); Assert.assertEquals("ns", extensionSegmentSet.getNamespace()); Assert.assertEquals("ext", extensionSegmentSet.getExtension()); Assert.assertEquals("", extensionSegmentSet.getExtensionMethod()); Assert.assertEquals("ns:ext", extensionSegmentSet.getNamespaceAndExtension()); Assert.assertEquals("ns:ext+*", extensionSegmentSet.toString()); } @Test public void isValidFormatEdgeExtensionValidWithMethod() { final UriInfo uri = this.mockery.mock(UriInfo.class); final List<PathSegment> pathSegments = new ArrayList<PathSegment>(); final PathSegment graphsPathSegment = this.mockery.mock(PathSegment.class, "graphsSegment"); final PathSegment graphPathSegment = this.mockery.mock(PathSegment.class, "graphPathSegment"); final PathSegment elementPathSegment = this.mockery.mock(PathSegment.class, "elementPathSegment"); final PathSegment idPathSegment = this.mockery.mock(PathSegment.class, "idPathSegment"); final PathSegment namespacePathSegment = this.mockery.mock(PathSegment.class, "namespacePathSegment"); final PathSegment extensionPathSegment = this.mockery.mock(PathSegment.class, "extensionPathSegment"); final PathSegment methodPathSegment = this.mockery.mock(PathSegment.class, "methodPathSegment"); pathSegments.add(graphsPathSegment); pathSegments.add(graphPathSegment); pathSegments.add(elementPathSegment); pathSegments.add(idPathSegment); pathSegments.add(namespacePathSegment); pathSegments.add(extensionPathSegment); pathSegments.add(methodPathSegment); this.mockery.checking(new Expectations() {{ allowing(namespacePathSegment).getPath(); will(returnValue("ns")); allowing(extensionPathSegment).getPath(); will(returnValue("ext")); allowing(methodPathSegment).getPath(); will(returnValue("meth")); allowing(uri).getPathSegments(); will(returnValue(pathSegments)); }}); ExtensionSegmentSet extensionSegmentSet = new ExtensionSegmentSet(uri, ExtensionPoint.EDGE); Assert.assertTrue(extensionSegmentSet.isValidFormat()); Assert.assertEquals("ns", extensionSegmentSet.getNamespace()); Assert.assertEquals("ext", extensionSegmentSet.getExtension()); Assert.assertEquals("meth", extensionSegmentSet.getExtensionMethod()); Assert.assertEquals("ns:ext", extensionSegmentSet.getNamespaceAndExtension()); Assert.assertEquals("ns:ext+meth", extensionSegmentSet.toString()); } @Test(expected = IllegalArgumentException.class) public void constructorNullMethod() { new ExtensionSegmentSet("ns", "ext", null); } @Test(expected = IllegalArgumentException.class) public void constructorNullExtensions() { new ExtensionSegmentSet("ns", null, "meth"); } @Test(expected = IllegalArgumentException.class) public void constructorNullNamespace() { new ExtensionSegmentSet(null, "ext", "meth"); } @Test public void equalsValid() { ExtensionSegmentSet extensionSegmentSet = new ExtensionSegmentSet("ns", "ext", "meth"); ExtensionSegmentSet extensionSegmentSetSame = new ExtensionSegmentSet("ns", "ext", "meth"); Assert.assertTrue(extensionSegmentSet.equals(extensionSegmentSetSame)); } @Test public void equalsInvalid() { ExtensionSegmentSet extensionSegmentSet = new ExtensionSegmentSet("ns", "ext", "meth"); ExtensionSegmentSet extensionSegmentSetSame = new ExtensionSegmentSet("ns", "ext", "different method"); Assert.assertFalse(extensionSegmentSet.equals(extensionSegmentSetSame)); } }