/*
* Created by Andrey Cherkashin (acherkashin)
* http://acherkashin.me
*
* License
* Copyright (c) 2015 Andrey Cherkashin
* The project released under the MIT license: http://opensource.org/licenses/MIT
*/
package com.juniform;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.junit.Assert;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
/**
*
* @author acherkashin
*/
public class JUniformObjectTest
{
@Test
public void testValueSaveLoad() {
JUniformObject object = new JUniformObject(2);
assertEquals(object.getValue(), 2);
}
@Test
public void testListSaveLoad() {
List<Integer> list = new ArrayList<>();
list.add(2);
list.add(3);
list.add(64);
JUniformObject object = new JUniformObject(list);
assertEquals(object.getValue(), list);
}
@Test
public void testNullIterator() {
JUniformObject object = new JUniformObject(2);
assertEquals(object.getValue(), 2); // check its still an integer
String items = "";
Iterator<JUniformObject> it = object.iterator();
while(it.hasNext()) {
items += it.next();
}
assertEquals("", items);
}
@Test
public void testListIterator() {
List<Integer> list = new ArrayList<>();
list.add(2);
list.add(3);
list.add(64);
JUniformObject object = new JUniformObject(list);
assertEquals(object.getValue(), list);
String items = "";
Iterator<JUniformObject> it = object.iterator();
while(it.hasNext()) {
items += it.next().getValue();
}
assertEquals("2364", items);
}
@Test
public void testArrayAccessByIndex() {
List<Integer> array = new ArrayList<>();
array.add(2);
array.add(3);
array.add(64);
JUniformObject object = new JUniformObject(array);
// OK
assertEquals(2, object.getElementByIndex(0).getValue());
assertEquals(3, object.getElementByIndex(1).getValue());
assertEquals(64, object.getElementByIndex(2).getValue());
// NOT OK
assertEquals(null, object.getElementByIndex(3).getValue());
assertTrue(null == object.getElementByIndex(3).toInteger());
assertEquals(0, object.getElementByIndex(3).toIntegerDefault(0));
}
@Test
public void testArrayIteratingByIndexes() {
List<Integer> array = new ArrayList<>();
array.add(2);
array.add(3);
array.add(64);
String result = "";
JUniformObject object = new JUniformObject(array);
for(int i = 0; i < object.getElementsCount(); i++) {
result += object.getElementByIndex(i);
}
assertEquals("2364", result);
}
@Test
public void testMap() {
Map<Integer,String> map = new HashMap<>();
map.put(1, "a");
map.put(2, "b");
JUniformObject object = new JUniformObject(map);
assertEquals("a", object.getProperty(1).getValue());
}
@Test
public void testMapIterator() {
Map<Integer,String> map = new HashMap<>();
map.put(1, "a");
map.put(2, "b");
String result = "";
JUniformObject object = new JUniformObject(map);
Iterator<Map.Entry<Object,JUniformObject>> it = object.entrySet().iterator();
while(it.hasNext()) {
Map.Entry<Object,JUniformObject> entry = it.next();
result += entry.getKey() + "_" + entry.getValue().getValue();
}
assertEquals("1_a2_b", result);
}
@Test
public void testMapAccess() {
Map<String,Object> map = new HashMap<>();
map.put("speed", 55);
map.put("gear", "R");
Map<String,Object> map2 = new HashMap<>();
map2.put("mine", map);
map2.put("wife", false);
Map<String,Object> map3 = new HashMap<>();
map3.put("mycar", map);
map3.put("cars", map2);
// OK
JUniformObject object = new JUniformObject(map3);
Assert.assertEquals("R", object.getProperty("mycar").getProperty("gear").toString());
Assert.assertTrue(55 == object.getProperty("mycar").getProperty("speed").toInteger());
Assert.assertTrue(false == object.getProperty("cars").getProperty("wife").toBoolean());
Assert.assertEquals("java.util.HashMap", object.getProperty("cars").getProperty("mine").getValue().getClass().getName());
Assert.assertEquals("R", object.getProperty("cars").getProperty("mine").getProperty("gear").toString());
// NOT OK
Assert.assertEquals(null, object.getProperty("mycar").getProperty("direction").getValue());
Assert.assertEquals(null, object.getProperty("mycar").getProperty("direction").getProperty("x").toInteger());
}
@Test
public void testMapPrimitiveAccess() {
Map<String,Object> map = new HashMap<>();
map.put("speed", 55);
map.put("gear", "R");
Map<String,Object> map2 = new HashMap<>();
map2.put("mine", map);
map2.put("wife", false);
Map<String,Object> map3 = new HashMap<>();
map3.put("mycar", map);
map3.put("cars", map2);
// OK
JUniformObject object = new JUniformObject(map3);
Assert.assertEquals("R", object.getProperty("mycar").getProperty("gear").toStringDefault(""));
Assert.assertEquals(55, object.getProperty("mycar").getProperty("speed").toIntegerDefault(0));
Assert.assertEquals(false, object.getProperty("cars").getProperty("wife").toBooleanDefault(false));
Assert.assertEquals("R", object.getProperty("cars").getProperty("mine").getProperty("gear").toStringDefault(""));
Assert.assertEquals("", object.getProperty("mycar").getProperty("direction").toStringDefault(""));
Assert.assertEquals(0, object.getProperty("mycar").getProperty("direction").getProperty("x").toIntegerDefault(0));
}
@Test
public void testPrimitives() {
JUniformObject object = new JUniformObject(55);
assertEquals("55", object.toString());
assertTrue(55 == object.toInteger());
assertTrue(55L == object.toLong());
assertEquals(55.f, object.toFloat(), 0.00001f);
assertEquals(55.f, object.toDouble(), 0.00001f);
}
@Test
public void testPrimitivesFromString() {
JUniformObject object = new JUniformObject("55");
assertEquals("55", object.toString());
assertTrue(55 == object.toInteger());
assertTrue(55L == object.toLong());
assertEquals(55.f, object.toFloat(), 0.00001f);
assertEquals(55.f, object.toDouble(), 0.00001f);
}
@Test
public void testPrimitivesFromStringFloat() {
JUniformObject object = new JUniformObject("55.125");
assertEquals("55.125", object.toString());
assertTrue(55 == object.toInteger());
assertTrue(55L == object.toLong());
assertEquals(55.125f, object.toFloat(), 0.00001f);
assertEquals(55.125f, object.toDouble(), 0.00001f);
}
@Test
public void testPrimitivesFromFloat() {
JUniformObject object = new JUniformObject(55.125F);
assertEquals("55.125", object.toString());
assertTrue(55 == object.toInteger());
assertTrue(55L == object.toLong());
assertEquals(55.125f, object.toFloat(), 0.00001f);
assertEquals(55.125f, object.toDouble(), 0.00001f);
}
}