ONOS-1479 -- GUI - augmenting topology view for extensibility:
- Cleaning up PropertyPanel methods - overloading values (string, int, long, object)

Change-Id: I84c86a48de8a776b407982687bc02def18eaef61
diff --git a/core/api/src/test/java/org/onosproject/ui/topo/PropertyPanelTest.java b/core/api/src/test/java/org/onosproject/ui/topo/PropertyPanelTest.java
index 65bb167..7ca9ce5 100644
--- a/core/api/src/test/java/org/onosproject/ui/topo/PropertyPanelTest.java
+++ b/core/api/src/test/java/org/onosproject/ui/topo/PropertyPanelTest.java
@@ -17,12 +17,17 @@
 
 package org.onosproject.ui.topo;
 
+import org.junit.BeforeClass;
 import org.junit.Test;
 import org.onosproject.ui.topo.PropertyPanel.Prop;
 
+import java.util.HashMap;
 import java.util.Iterator;
+import java.util.Map;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.fail;
 
 /**
  * Unit tests for {@link PropertyPanel}.
@@ -33,20 +38,49 @@
     private static final String TYPE_ORIG = "Original type ID";
     private static final String TITLE_NEW = "New Title";
     private static final String TYPE_NEW = "New type";
+    private static final String SOME_IDENTIFICATION = "It's Me!";
 
-    private static final Prop PROP_A = new Prop("A", "Hay");
-    private static final Prop PROP_B = new Prop("B", "Bee");
-    private static final Prop PROP_C = new Prop("C", "Sea");
-    private static final Prop PROP_Z = new Prop("Z", "Zed");
+    private static final String KEY_A = "A";
+    private static final String KEY_B = "B";
+    private static final String KEY_C = "C";
+    private static final String KEY_Z = "Z";
+    private static final String VALUE_A = "Hay";
+    private static final String VALUE_B = "Bee";
+    private static final String VALUE_C = "Sea";
+    private static final String VALUE_Z = "Zed";
+
+    private static final Map<String, Prop> PROP_MAP = new HashMap<>();
+
+    private static class FooClass {
+        private final String s;
+        FooClass(String s) {
+            this.s = s;
+        }
+
+        @Override
+        public String toString() {
+            return ">" + s + "<";
+        }
+    }
 
     private PropertyPanel pp;
 
 
+
+    @BeforeClass
+    public static void setUpClass() {
+        PROP_MAP.put(KEY_A, new Prop(KEY_A, VALUE_A));
+        PROP_MAP.put(KEY_B, new Prop(KEY_B, VALUE_B));
+        PROP_MAP.put(KEY_C, new Prop(KEY_C, VALUE_C));
+        PROP_MAP.put(KEY_Z, new Prop(KEY_Z, VALUE_Z));
+    }
+
     @Test
     public void basic() {
         pp = new PropertyPanel(TITLE_ORIG, TYPE_ORIG);
         assertEquals("wrong title", TITLE_ORIG, pp.title());
         assertEquals("wrong type", TYPE_ORIG, pp.typeId());
+        assertNull("id?", pp.id());
         assertEquals("unexpected props", 0, pp.properties().size());
     }
 
@@ -64,20 +98,46 @@
         assertEquals("wrong type", TYPE_NEW, pp.typeId());
     }
 
-    private void validateProps(Prop... props) {
+    @Test
+    public void setId() {
+        basic();
+        pp.id(SOME_IDENTIFICATION);
+        assertEquals("wrong id", SOME_IDENTIFICATION, pp.id());
+    }
+
+    private void validateProps(String... keys) {
         Iterator<Prop> iter = pp.properties().iterator();
-        for (Prop p: props) {
-            Prop ppProp = iter.next();
-            assertEquals("Bad prop sequence", p, ppProp);
+        for (String k: keys) {
+            Prop exp = PROP_MAP.get(k);
+            Prop act = iter.next();
+            assertEquals("Bad prop sequence", exp, act);
         }
     }
 
+    private void validateProp(String key, String expValue) {
+        Iterator<Prop> iter = pp.properties().iterator();
+        Prop prop = null;
+        while (iter.hasNext()) {
+            Prop p = iter.next();
+            if (p.key().equals(key)) {
+                prop = p;
+                break;
+            }
+        }
+        if (prop == null) {
+            fail("no prop found with key: " + key);
+        }
+        assertEquals("Wrong prop value", expValue, prop.value());
+    }
+
     @Test
     public void props() {
         basic();
-        pp.add(PROP_A).add(PROP_B).add(PROP_C);
+        pp.addProp(KEY_A, VALUE_A)
+            .addProp(KEY_B, VALUE_B)
+            .addProp(KEY_C, VALUE_C);
         assertEquals("bad props", 3, pp.properties().size());
-        validateProps(PROP_A, PROP_B, PROP_C);
+        validateProps(KEY_A, KEY_B, KEY_C);
     }
 
     @Test
@@ -91,8 +151,45 @@
     @Test
     public void adjustProps() {
         props();
-        pp.removeProps("B", "A");
-        pp.add(PROP_Z);
-        validateProps(PROP_C, PROP_Z);
+        pp.removeProps(KEY_B, KEY_A);
+        pp.addProp(KEY_Z, VALUE_Z);
+        validateProps(KEY_C, KEY_Z);
     }
+
+    @Test
+    public void intValues() {
+        basic();
+        pp.addProp(KEY_A, 200)
+          .addProp(KEY_B, 2000)
+          .addProp(KEY_C, 1234567);
+
+        validateProp(KEY_A, "200");
+        validateProp(KEY_B, "2,000");
+        validateProp(KEY_C, "1,234,567");
+    }
+
+    @Test
+    public void longValues() {
+        basic();
+        pp.addProp(KEY_A, 200L)
+          .addProp(KEY_B, 2000L)
+          .addProp(KEY_C, 1234567L)
+          .addProp(KEY_Z, Long.MAX_VALUE);
+
+        validateProp(KEY_A, "200");
+        validateProp(KEY_B, "2,000");
+        validateProp(KEY_C, "1,234,567");
+        validateProp(KEY_Z, "9,223,372,036,854,775,807");
+    }
+
+    @Test
+    public void objectValue() {
+        basic();
+        pp.addProp(KEY_A, new FooClass("a"))
+            .addProp(KEY_B, new FooClass("bxyyzy"), "[xz]");
+
+        validateProp(KEY_A, ">a<");
+        validateProp(KEY_B, ">byyy<");
+    }
+
 }