You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2011/10/17 23:04:13 UTC

svn commit: r1185378 [2/2] - in /incubator/isis/trunk/framework: tck/tck-dom/src/main/java/org/apache/isis/tck/dom/simples/ viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/ viewer/json/json-applib/src/main/java/org/apache/isis/...

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/home/HomePageReprRenderer.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/home/HomePageReprRenderer.java?rev=1185378&r1=1185377&r2=1185378&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/home/HomePageReprRenderer.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/home/HomePageReprRenderer.java Mon Oct 17 21:04:11 2011
@@ -8,6 +8,7 @@ import org.apache.isis.viewer.json.appli
 import org.apache.isis.viewer.json.viewer.ResourceContext;
 import org.apache.isis.viewer.json.viewer.representations.LinkFollower;
 import org.apache.isis.viewer.json.viewer.representations.LinkBuilder;
+import org.apache.isis.viewer.json.viewer.representations.Rel;
 import org.apache.isis.viewer.json.viewer.representations.RendererFactory;
 import org.apache.isis.viewer.json.viewer.representations.RendererFactoryRegistry;
 import org.apache.isis.viewer.json.viewer.representations.ReprRenderer;
@@ -65,7 +66,7 @@ public class HomePageReprRenderer extend
     }
 
     private void putLinkToSelf(JsonRepresentation representation) {
-        final LinkBuilder linkBuilder = LinkBuilder.newBuilder(resourceContext, "self", getRepresentationType(), "");
+        final LinkBuilder linkBuilder = LinkBuilder.newBuilder(resourceContext, Rel.SELF, getRepresentationType(), "");
 
         final LinkFollower linkFollower = getLinkFollower().follow("self");
         if(linkFollower.isFollowing()) {
@@ -80,7 +81,7 @@ public class HomePageReprRenderer extend
     }
 
     private void putLinkToCapabilities(final JsonRepresentation representation) {
-        final LinkBuilder linkBuilder = LinkBuilder.newBuilder(getResourceContext(), "capabilities", RepresentationType.CAPABILITIES, "capabilities");
+        final LinkBuilder linkBuilder = LinkBuilder.newBuilder(getResourceContext(), Rel.CAPABILITIES, RepresentationType.CAPABILITIES, "capabilities");
         
         final LinkFollower linkFollower = getLinkFollower().follow("capabilities");
         if(linkFollower.isFollowing()) {
@@ -97,7 +98,7 @@ public class HomePageReprRenderer extend
     private void putLinkToServices(JsonRepresentation representation) {
 
         final LinkBuilder linkBuilder = 
-                LinkBuilder.newBuilder(getResourceContext(), "services", RepresentationType.LIST, "services");
+                LinkBuilder.newBuilder(getResourceContext(), Rel.SERVICES, RepresentationType.LIST, "services");
         
         final LinkFollower linkFollower = getLinkFollower().follow("services");
         if(linkFollower.isFollowing()) {
@@ -119,7 +120,7 @@ public class HomePageReprRenderer extend
 
     private void putLinkToUser(JsonRepresentation representation) {
         final LinkBuilder userLinkBuilder = 
-                LinkBuilder.newBuilder(getResourceContext(), "user", RepresentationType.USER, "user");
+                LinkBuilder.newBuilder(getResourceContext(), Rel.USER, RepresentationType.USER, "user");
         
         final LinkFollower linkFollower = getLinkFollower().follow("user");
         if(linkFollower.isFollowing()) {

Added: incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainResourceHelperTest_readBodyAsMap.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainResourceHelperTest_readBodyAsMap.java?rev=1185378&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainResourceHelperTest_readBodyAsMap.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainResourceHelperTest_readBodyAsMap.java Mon Oct 17 21:04:11 2011
@@ -0,0 +1,61 @@
+package org.apache.isis.viewer.json.viewer.resources.domainobjects;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+import javax.ws.rs.WebApplicationException;
+
+import org.apache.isis.viewer.json.applib.JsonRepresentation;
+import org.apache.isis.viewer.json.viewer.JsonApplicationException;
+import org.junit.Test;
+
+public class DomainResourceHelperTest_readBodyAsMap {
+
+    private JsonRepresentation representation;
+
+    @Test
+    public void whenNull() throws Exception {
+        representation = DomainResourceHelper.readBodyAsMap(null);
+        
+        assertThat(representation.isMap(), is(true));
+        assertThat(representation.size(), is(0));
+    }
+
+    @Test
+    public void whenEmptyString() throws Exception {
+        representation = DomainResourceHelper.readBodyAsMap("");
+        
+        assertThat(representation.isMap(), is(true));
+        assertThat(representation.size(), is(0));
+    }
+
+    @Test
+    public void whenWhitespaceOnlyString() throws Exception {
+        representation = DomainResourceHelper.readBodyAsMap(" \t ");
+        
+        assertThat(representation.isMap(), is(true));
+        assertThat(representation.size(), is(0));
+    }
+
+    @Test
+    public void emptyMap() throws Exception {
+        representation = DomainResourceHelper.readBodyAsMap("{}");
+        
+        assertThat(representation.isMap(), is(true));
+        assertThat(representation.size(), is(0));
+    }
+
+    @Test
+    public void map() throws Exception {
+        representation = DomainResourceHelper.readBodyAsMap("{\"foo\":\"bar\"}");
+        
+        assertThat(representation.isMap(), is(true));
+        assertThat(representation.size(), is(1));
+    }
+
+    @Test(expected=JsonApplicationException.class)
+    public void whenArray() throws Exception {
+        DomainResourceHelper.readBodyAsMap("[]");
+    }
+
+}

Added: incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/JsonValueEncoderTest_asAdapter.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/JsonValueEncoderTest_asAdapter.java?rev=1185378&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/JsonValueEncoderTest_asAdapter.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/JsonValueEncoderTest_asAdapter.java Mon Oct 17 21:04:11 2011
@@ -0,0 +1,343 @@
+package org.apache.isis.viewer.json.viewer.resources.domainobjects;
+
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertSame;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facets.object.encodeable.EncodableFacet;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.viewer.json.applib.JsonRepresentation;
+import org.codehaus.jackson.node.BigIntegerNode;
+import org.codehaus.jackson.node.BooleanNode;
+import org.codehaus.jackson.node.DecimalNode;
+import org.codehaus.jackson.node.DoubleNode;
+import org.codehaus.jackson.node.IntNode;
+import org.codehaus.jackson.node.LongNode;
+import org.codehaus.jackson.node.TextNode;
+import org.jmock.Expectations;
+import org.jmock.Mockery;
+import org.jmock.integration.junit4.JMock;
+import org.jmock.integration.junit4.JUnit4Mockery;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(JMock.class)
+public class JsonValueEncoderTest_asAdapter {
+
+    private Mockery context = new JUnit4Mockery();
+    
+    private JsonValueEncoder jsonValueEncoder;
+    private JsonRepresentation representation;
+    private ObjectSpecification objectSpec;
+
+    private EncodableFacet encodableFacet;
+    private ObjectAdapter objectAdapter;
+
+    @Before
+    public void setUp() throws Exception {
+        objectSpec = context.mock(ObjectSpecification.class);
+        encodableFacet = context.mock(EncodableFacet.class);
+        objectAdapter = context.mock(ObjectAdapter.class);
+        
+        representation = new JsonRepresentation(TextNode.valueOf("aString"));
+        jsonValueEncoder = new JsonValueEncoder();
+    }
+
+    @Test(expected=IllegalArgumentException.class)
+    public void whenSpecIsNull() throws Exception {
+        jsonValueEncoder.asAdapter(null, representation);
+    }
+
+    @Test(expected=IllegalArgumentException.class)
+    public void whenReprIsNull() throws Exception {
+        allowingObjectSpecHas(EncodableFacet.class, encodableFacet);
+        jsonValueEncoder.asAdapter(objectSpec, null);
+    }
+
+    @Test(expected=IllegalArgumentException.class)
+    public void whenReprIsAnArray() throws Exception {
+        allowingObjectSpecHas(EncodableFacet.class, encodableFacet);
+        jsonValueEncoder.asAdapter(objectSpec, JsonRepresentation.newArray());
+    }
+
+    @Test(expected=IllegalArgumentException.class)
+    public void whenReprIsAMap() throws Exception {
+        allowingObjectSpecHas(EncodableFacet.class, encodableFacet);
+        assertNull(jsonValueEncoder.asAdapter(objectSpec, JsonRepresentation.newMap()));
+    }
+
+    @Test(expected=IllegalArgumentException.class)
+    public void whenSpecDoesNotHaveAnEncodableFacet() throws Exception {
+        allowingObjectSpecHas(EncodableFacet.class, null);
+
+        assertNull(jsonValueEncoder.asAdapter(objectSpec, representation));
+    }
+
+    @Test
+    public void whenReprIsBooleanPrimitive() throws Exception {
+        whenReprIsBoolean(boolean.class);
+    }
+
+    @Test
+    public void whenReprIsBooleanWrapper() throws Exception {
+        whenReprIsBoolean(Boolean.class);
+    }
+
+    private void whenReprIsBoolean(final Class<?> correspondingClass) {
+        // given
+        allowingObjectSpecHas(EncodableFacet.class, encodableFacet);
+        allowingObjectSpecCorrespondingClassIs(correspondingClass);
+        final boolean value = true;
+        representation = new JsonRepresentation(BooleanNode.valueOf(value));
+        context.checking(new Expectations() {
+            {
+                one(encodableFacet).fromEncodedString("" + value);
+                will(returnValue(objectAdapter));
+            }
+        });
+        
+        // when
+        final ObjectAdapter adapter = jsonValueEncoder.asAdapter(objectSpec, representation);
+        
+        // then
+        assertSame(objectAdapter, adapter);
+    }
+
+    @Test(expected=IllegalArgumentException.class)
+    public void whenObjectSpecIsBooleanButReprIsNot() throws Exception {
+        // given
+        allowingObjectSpecHas(EncodableFacet.class, encodableFacet);
+        allowingObjectSpecCorrespondingClassIs(boolean.class);
+        
+        // when
+        jsonValueEncoder.asAdapter(objectSpec, representation);
+    }
+
+    @Test
+    public void whenReprIsIntegerPrimitive() throws Exception {
+        whenReprIsInteger(int.class);
+    }
+
+    @Test
+    public void whenReprIsIntegerWrapper() throws Exception {
+        whenReprIsInteger(Integer.class);
+    }
+
+    private void whenReprIsInteger(final Class<?> correspondingClass) {
+        // given
+        allowingObjectSpecHas(EncodableFacet.class, encodableFacet);
+        allowingObjectSpecCorrespondingClassIs(correspondingClass);
+        final int value = 123;
+        representation = new JsonRepresentation(IntNode.valueOf(value));
+        context.checking(new Expectations() {
+            {
+                one(encodableFacet).fromEncodedString("" + value);
+                will(returnValue(objectAdapter));
+            }
+        });
+        
+        // when
+        final ObjectAdapter adapter = jsonValueEncoder.asAdapter(objectSpec, representation);
+        
+        // then
+        assertSame(objectAdapter, adapter);
+    }
+
+    @Test(expected=IllegalArgumentException.class)
+    public void whenObjectSpecIsIntegerButReprIsNot() throws Exception {
+        // given
+        allowingObjectSpecHas(EncodableFacet.class, encodableFacet);
+        allowingObjectSpecCorrespondingClassIs(int.class);
+        
+        // when
+        jsonValueEncoder.asAdapter(objectSpec, representation);
+    }
+
+    @Test
+    public void whenReprIsLongPrimitive() throws Exception {
+        whenReprIsLong(long.class);
+    }
+
+    @Test
+    public void whenReprIsLongWrapper() throws Exception {
+        whenReprIsLong(Long.class);
+    }
+
+    private void whenReprIsLong(final Class<?> correspondingClass) {
+        // given
+        allowingObjectSpecHas(EncodableFacet.class, encodableFacet);
+        allowingObjectSpecCorrespondingClassIs(correspondingClass);
+        final long value = 1234567890L;
+        representation = new JsonRepresentation(LongNode.valueOf(value));
+        context.checking(new Expectations() {
+            {
+                one(encodableFacet).fromEncodedString("" + value);
+                will(returnValue(objectAdapter));
+            }
+        });
+        
+        // when
+        final ObjectAdapter adapter = jsonValueEncoder.asAdapter(objectSpec, representation);
+        
+        // then
+        assertSame(objectAdapter, adapter);
+    }
+
+    @Test(expected=IllegalArgumentException.class)
+    public void whenObjectSpecIsLongButReprIsNot() throws Exception {
+        // given
+        allowingObjectSpecHas(EncodableFacet.class, encodableFacet);
+        allowingObjectSpecCorrespondingClassIs(long.class);
+        
+        // when
+        jsonValueEncoder.asAdapter(objectSpec, representation);
+    }
+
+    @Test
+    public void whenReprIsDoublePrimitive() throws Exception {
+        whenReprIsDouble(double.class);
+    }
+
+    @Test
+    public void whenReprIsDoubleWrapper() throws Exception {
+        whenReprIsDouble(Double.class);
+    }
+
+    private void whenReprIsDouble(final Class<?> correspondingClass) {
+        // given
+        allowingObjectSpecHas(EncodableFacet.class, encodableFacet);
+        allowingObjectSpecCorrespondingClassIs(correspondingClass);
+        final double value = 123.45;
+        representation = new JsonRepresentation(DoubleNode.valueOf(value));
+        context.checking(new Expectations() {
+            {
+                one(encodableFacet).fromEncodedString("" + value);
+                will(returnValue(objectAdapter));
+            }
+        });
+        
+        // when
+        final ObjectAdapter adapter = jsonValueEncoder.asAdapter(objectSpec, representation);
+        
+        // then
+        assertSame(objectAdapter, adapter);
+    }
+
+    @Test(expected=IllegalArgumentException.class)
+    public void whenObjectSpecIsDoubleButReprIsNot() throws Exception {
+        // given
+        allowingObjectSpecHas(EncodableFacet.class, encodableFacet);
+        allowingObjectSpecCorrespondingClassIs(double.class);
+        
+        // when
+        jsonValueEncoder.asAdapter(objectSpec, representation);
+    }
+
+    @Test
+    public void whenReprIsBigInteger() throws Exception {
+        // given
+        allowingObjectSpecHas(EncodableFacet.class, encodableFacet);
+        allowingObjectSpecCorrespondingClassIs(BigInteger.class);
+        final BigInteger value = BigInteger.valueOf(123);
+        representation = new JsonRepresentation(BigIntegerNode.valueOf(value));
+        context.checking(new Expectations() {
+            {
+                one(encodableFacet).fromEncodedString("" + value);
+                will(returnValue(objectAdapter));
+            }
+        });
+        
+        // when
+        final ObjectAdapter adapter = jsonValueEncoder.asAdapter(objectSpec, representation);
+        
+        // then
+        assertSame(objectAdapter, adapter);
+    }
+
+    @Test(expected=IllegalArgumentException.class)
+    public void whenObjectSpecIsBigIntegerButReprIsNot() throws Exception {
+        // given
+        allowingObjectSpecHas(EncodableFacet.class, encodableFacet);
+        allowingObjectSpecCorrespondingClassIs(BigInteger.class);
+        
+        // when
+        jsonValueEncoder.asAdapter(objectSpec, representation);
+    }
+
+    @Test
+    public void whenReprIsBigDecimal() throws Exception {
+        // given
+        allowingObjectSpecHas(EncodableFacet.class, encodableFacet);
+        allowingObjectSpecCorrespondingClassIs(BigDecimal.class);
+        final BigDecimal value = new BigDecimal("123234234.45612312343535");
+        representation = new JsonRepresentation(DecimalNode.valueOf(value));
+        context.checking(new Expectations() {
+            {
+                one(encodableFacet).fromEncodedString("" + value);
+                will(returnValue(objectAdapter));
+            }
+        });
+        
+        // when
+        final ObjectAdapter adapter = jsonValueEncoder.asAdapter(objectSpec, representation);
+        
+        // then
+        assertSame(objectAdapter, adapter);
+    }
+
+    @Test(expected=IllegalArgumentException.class)
+    public void whenObjectSpecIsBigDecimalButReprIsNot() throws Exception {
+        // given
+        allowingObjectSpecHas(EncodableFacet.class, encodableFacet);
+        allowingObjectSpecCorrespondingClassIs(BigDecimal.class);
+        
+        // when
+        jsonValueEncoder.asAdapter(objectSpec, representation);
+    }
+
+
+    @Test
+    public void whenReprIsString() throws Exception {
+        // given
+        allowingObjectSpecHas(EncodableFacet.class, encodableFacet);
+        allowingObjectSpecCorrespondingClassIs(String.class);
+        representation = new JsonRepresentation(TextNode.valueOf("aString"));
+        
+        context.checking(new Expectations() {
+            {
+                one(encodableFacet).fromEncodedString("aString");
+                will(returnValue(objectAdapter));
+            }
+        });
+        
+        // when
+        final ObjectAdapter adapter = jsonValueEncoder.asAdapter(objectSpec, representation);
+        
+        // then
+        assertSame(objectAdapter, adapter);
+    }
+    
+    private <T extends Facet> void allowingObjectSpecHas(final Class<T> facetClass, final T encodableFacet) {
+        context.checking(new Expectations() {
+            {
+                allowing(objectSpec).getFacet(facetClass);
+                will(returnValue(encodableFacet));
+            }
+        });
+    }
+
+    private void allowingObjectSpecCorrespondingClassIs(final Class<?> result) {
+        context.checking(new Expectations() {
+            {
+                allowing(objectSpec).getCorrespondingClass();
+                will(returnValue(result));
+            }
+        });
+    }
+
+}

Added: incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/JsonValueEncoderTest_asObject.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/JsonValueEncoderTest_asObject.java?rev=1185378&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/JsonValueEncoderTest_asObject.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/JsonValueEncoderTest_asObject.java Mon Oct 17 21:04:11 2011
@@ -0,0 +1,231 @@
+package org.apache.isis.viewer.json.viewer.resources.domainobjects;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertSame;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facets.object.encodeable.EncodableFacet;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.viewer.json.applib.JsonRepresentation;
+import org.jmock.Expectations;
+import org.jmock.Mockery;
+import org.jmock.integration.junit4.JMock;
+import org.jmock.integration.junit4.JUnit4Mockery;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(JMock.class)
+public class JsonValueEncoderTest_asObject {
+
+    private Mockery context = new JUnit4Mockery();
+    
+    private JsonValueEncoder jsonValueEncoder;
+    private JsonRepresentation representation;
+    private ObjectAdapter objectAdapter;
+    private ObjectSpecification objectSpec;
+
+    private EncodableFacet encodableFacet;
+    private Object encoded;
+
+    @Before
+    public void setUp() throws Exception {
+        objectAdapter = context.mock(ObjectAdapter.class);
+        objectSpec = context.mock(ObjectSpecification.class);
+        
+        context.checking(new Expectations() {
+            {
+                allowing(objectAdapter).getSpecification();
+                will(returnValue(objectSpec));
+            }
+        });
+        encodableFacet = context.mock(EncodableFacet.class);
+        
+        encoded = new Object();
+        
+        jsonValueEncoder = new JsonValueEncoder();
+    }
+
+    @Test(expected=IllegalArgumentException.class)
+    public void whenAdapterIsNull() throws Exception {
+        jsonValueEncoder.asObject(null);
+    }
+
+    @Test(expected=IllegalArgumentException.class)
+    public void whenObjectAdapterIsNotSpecialCaseAndSpecIsNotEncodable() throws Exception {
+        allowingObjectSpecCorrespondingClassIs(String.class);
+        allowingObjectSpecHas(EncodableFacet.class, null);
+        jsonValueEncoder.asObject(objectAdapter);
+    }
+
+    @Test
+    public void whenBooleanPrimitive() throws Exception {
+        whenBoolean(boolean.class);
+    }
+
+    @Test
+    public void whenBooleanWrapper() throws Exception {
+        whenBoolean(Boolean.class);
+    }
+
+    private void whenBoolean(final Class<?> cls) {
+        allowingObjectSpecCorrespondingClassIs(cls);
+        allowingObjectSpecHas(EncodableFacet.class, encodableFacet);
+        never(encodableFacet);
+        context.checking(new Expectations() {
+            {
+                one(objectAdapter).getObject();
+                will(returnValue(true));
+            }
+        });
+        assertEquals(true, jsonValueEncoder.asObject(objectAdapter));
+    }
+
+
+    @Test
+    public void whenIntegerPrimitive() throws Exception {
+        whenInteger(int.class);
+    }
+
+    @Test
+    public void whenIntegerWrapper() throws Exception {
+        whenInteger(Integer.class);
+    }
+
+    private void whenInteger(final Class<?> cls) {
+        allowingObjectSpecCorrespondingClassIs(cls);
+        allowingObjectSpecHas(EncodableFacet.class, encodableFacet);
+        never(encodableFacet);
+        context.checking(new Expectations() {
+            {
+                one(objectAdapter).getObject();
+                will(returnValue(123));
+            }
+        });
+        assertEquals(123, jsonValueEncoder.asObject(objectAdapter));
+    }
+
+    @Test
+    public void whenLongPrimitive() throws Exception {
+        whenLong(long.class);
+    }
+
+    @Test
+    public void whenLongWrapper() throws Exception {
+        whenLong(Long.class);
+    }
+
+    private void whenLong(final Class<?> cls) {
+        allowingObjectSpecCorrespondingClassIs(cls);
+        allowingObjectSpecHas(EncodableFacet.class, encodableFacet);
+        never(encodableFacet);
+        context.checking(new Expectations() {
+            {
+                one(objectAdapter).getObject();
+                will(returnValue(123456789L));
+            }
+        });
+        assertEquals(123456789L, jsonValueEncoder.asObject(objectAdapter));
+    }
+
+    @Test
+    public void whenDoublePrimitive() throws Exception {
+        whenDouble(double.class);
+    }
+
+    @Test
+    public void whenDoubleWrapper() throws Exception {
+        whenDouble(Double.class);
+    }
+
+    private void whenDouble(final Class<?> cls) {
+        allowingObjectSpecCorrespondingClassIs(cls);
+        allowingObjectSpecHas(EncodableFacet.class, encodableFacet);
+        never(encodableFacet);
+        context.checking(new Expectations() {
+            {
+                one(objectAdapter).getObject();
+                will(returnValue(12345.6789));
+            }
+        });
+        assertEquals(12345.6789, jsonValueEncoder.asObject(objectAdapter));
+    }
+
+    @Test
+    public void whenBigInteger() throws Exception {
+        allowingObjectSpecCorrespondingClassIs(BigInteger.class);
+        allowingObjectSpecHas(EncodableFacet.class, encodableFacet);
+        never(encodableFacet);
+        final BigInteger value = new BigInteger("123456789012345");
+        context.checking(new Expectations() {
+
+            {
+                one(objectAdapter).getObject();
+                will(returnValue(value));
+            }
+        });
+        assertEquals(value, jsonValueEncoder.asObject(objectAdapter));
+    }
+
+    @Test
+    public void whenBigDecimal() throws Exception {
+        allowingObjectSpecCorrespondingClassIs(BigDecimal.class);
+        allowingObjectSpecHas(EncodableFacet.class, encodableFacet);
+        never(encodableFacet);
+        final BigDecimal value = new BigDecimal("1234567890.1234567890");
+        context.checking(new Expectations() {
+
+            {
+                one(objectAdapter).getObject();
+                will(returnValue(value));
+            }
+        });
+        assertEquals(value, jsonValueEncoder.asObject(objectAdapter));
+    }
+
+    
+    @Test
+    public void whenString() throws Exception {
+        allowingObjectSpecCorrespondingClassIs(String.class);
+        allowingObjectSpecHas(EncodableFacet.class, encodableFacet);
+        context.checking(new Expectations() {
+            {
+                one(encodableFacet).toEncodedString(objectAdapter);
+                will(returnValue("encodedString"));
+            }
+        });
+        assertSame("encodedString", jsonValueEncoder.asObject(objectAdapter));
+    }
+
+    private void allowingObjectSpecCorrespondingClassIs(final Class<?> result) {
+        context.checking(new Expectations() {
+            {
+                allowing(objectSpec).getCorrespondingClass();
+                will(returnValue(result));
+            }
+        });
+    }
+
+    private <T extends Facet> void allowingObjectSpecHas(final Class<T> facetClass, final T encodableFacet) {
+        context.checking(new Expectations() {
+            {
+                allowing(objectSpec).getFacet(facetClass);
+                will(returnValue(encodableFacet));
+            }
+        });
+    }
+
+    private void never(final EncodableFacet encodableFacet2) {
+        context.checking(new Expectations() {
+            {
+                never(encodableFacet2);
+            }
+        });
+    }
+
+
+}