You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by da...@apache.org on 2016/04/12 12:56:59 UTC

svn commit: r1738759 - in /felix/trunk/converter/src: main/java/org/apache/felix/converter/impl/AdapterImpl.java test/java/org/apache/felix/converter/impl/JsonCodecTest.java

Author: davidb
Date: Tue Apr 12 10:56:59 2016
New Revision: 1738759

URL: http://svn.apache.org/viewvc?rev=1738759&view=rev
Log:
Felix Converter Service: add test for JSON Codec with Adapter

Modified:
    felix/trunk/converter/src/main/java/org/apache/felix/converter/impl/AdapterImpl.java
    felix/trunk/converter/src/test/java/org/apache/felix/converter/impl/JsonCodecTest.java

Modified: felix/trunk/converter/src/main/java/org/apache/felix/converter/impl/AdapterImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/src/main/java/org/apache/felix/converter/impl/AdapterImpl.java?rev=1738759&r1=1738758&r2=1738759&view=diff
==============================================================================
--- felix/trunk/converter/src/main/java/org/apache/felix/converter/impl/AdapterImpl.java (original)
+++ felix/trunk/converter/src/main/java/org/apache/felix/converter/impl/AdapterImpl.java Tue Apr 12 10:56:59 2016
@@ -69,6 +69,16 @@ public class AdapterImpl implements Adap
 
     @Override
     public <F, T> Adapter rule(Function<F, T> toFun, Function<T, F> fromFun) {
+//        Type[] t = toFun.getClass().getGenericInterfaces();
+//
+//        TypeVariable<?>[] tp = toFun.getClass().getTypeParameters();
+//        System.out.println("*** " + Arrays.toString(tp));
+//
+//        TypeReference<Map<String, Adapter>> tr = new TypeReference<Map<String,Adapter>>(){};
+//        System.out.println("### " + tr);
+//        Type type = tr.getType();
+//        System.out.println("### " + type);
+
         // TODO Auto-generated method stub
         return this;
     }

Modified: felix/trunk/converter/src/test/java/org/apache/felix/converter/impl/JsonCodecTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/src/test/java/org/apache/felix/converter/impl/JsonCodecTest.java?rev=1738759&r1=1738758&r2=1738759&view=diff
==============================================================================
--- felix/trunk/converter/src/test/java/org/apache/felix/converter/impl/JsonCodecTest.java (original)
+++ felix/trunk/converter/src/test/java/org/apache/felix/converter/impl/JsonCodecTest.java Tue Apr 12 10:56:59 2016
@@ -19,13 +19,30 @@ package org.apache.felix.converter.impl;
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.sling.commons.json.JSONException;
 import org.apache.sling.commons.json.JSONObject;
+import org.junit.After;
+import org.junit.Before;
 import org.junit.Test;
+import org.osgi.service.converter.Adapter;
+import org.osgi.service.converter.Converter;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
 public class JsonCodecTest {
+    private Converter converter;
+
+    @Before
+    public void setUp() {
+        converter = new ConverterImpl();
+    }
+
+    @After
+    public void tearDown() {
+        converter = null;
+    }
+
     @Test
     public void testJSONCodec() throws Exception {
         Map<Object, Object> m1 = new HashMap<>();
@@ -53,4 +70,41 @@ public class JsonCodecTest {
         assertEquals(m.get("ab"), m2.get("ab"));
         assertEquals(m.get(true), m2.get("true"));
     }
+
+    @Test
+    public void testCodecWithAdapter() throws JSONException {
+        Map<String, Foo> m1 = new HashMap<>();
+        m1.put("f", new Foo("fofofo"));
+        Map<String, Object> m = new HashMap<>();
+        m.put("submap", m1);
+
+        Adapter ca = converter.getAdapter();
+        ca.rule(Foo.class, String.class, Foo::tsFun, v -> Foo.fsFun(v));
+
+        JsonCodecImpl jsonCodec = new JsonCodecImpl();
+        String json = jsonCodec.with(ca).encode(m).toString();
+
+        JSONObject jo = new JSONObject(json);
+        assertEquals(1, jo.length());
+        JSONObject jo1 = jo.getJSONObject("submap");
+        assertEquals("<fofofo>", jo1.getString("f"));
+
+        // TODO convert back into a Map<String, Foo> via TypeReference
+    }
+
+    static class Foo {
+        private final String val;
+
+        public Foo(String s) {
+            val = s;
+        }
+
+        public String tsFun() {
+            return "<" + val + ">";
+        }
+
+        public static Foo fsFun(String s) {
+            return new Foo(s.substring(1, s.length() - 1));
+        }
+    }
 }