package se.krka.kahlua.converter;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertSame;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.Test;
import se.krka.kahlua.converter.LuaConversionError;
import se.krka.kahlua.converter.LuaConverterManager;
import se.krka.kahlua.converter.LuaNumberConverter;
import se.krka.kahlua.converter.LuaTableConverter;
import se.krka.kahlua.vm.LuaTable;
import se.krka.kahlua.vm.LuaTableImpl;
public class LuaConverterManagerTest {
@Test
public void testPrimitives1() throws LuaConversionError {
LuaConverterManager manager = new LuaConverterManager();
LuaNumberConverter.install(manager);
Double result = manager.fromLuaToJava(new Double(1.25), double.class);
assertEquals(result.getClass(), Double.class);
assertEquals(result.doubleValue(), 1.25);
}
@Test
public void testPrimitives2() throws LuaConversionError {
LuaConverterManager manager = new LuaConverterManager();
LuaNumberConverter.install(manager);
Long result = manager.fromLuaToJava(new Double(123.45), long.class);
assertEquals(result.getClass(), Long.class);
assertEquals(result.longValue(), 123);
long result2 = manager.fromLuaToJava(new Double(123.45), long.class);
assertEquals(result2, 123);
}
@Test
public void testPrimitives3() throws LuaConversionError {
LuaConverterManager manager = new LuaConverterManager();
LuaNumberConverter.install(manager);
Object result = manager.fromJavaToLua(123);
assertEquals(result.getClass(), Double.class);
assertEquals(((Double) result).doubleValue(), 123.0);
result = manager.fromJavaToLua(new Integer(123));
assertEquals(result.getClass(), Double.class);
assertEquals(((Double) result).doubleValue(), 123.0);
}
@Test(expected = LuaConversionError.class)
public void testConversionError() throws LuaConversionError {
LuaConverterManager manager = new LuaConverterManager();
manager.fromLuaToJava(new Double(123.45), long.class);
}
@Test
public void testJavaToLua() throws LuaConversionError{
LuaConverterManager manager = new LuaConverterManager();
LuaNumberConverter.install(manager);
Object object = manager.fromJavaToLua(123L);
assertEquals(object, new Double(123));
}
@Test
public void testJavaToLuaDefault() throws LuaConversionError {
LuaConverterManager manager = new LuaConverterManager();
LuaNumberConverter.install(manager);
Object obj = new Object();
Object obj2 = manager.fromJavaToLua(obj);
assertSame(obj, obj2);
}
@Test
public void testJavaToLuaTables() throws LuaConversionError {
LuaConverterManager manager = new LuaConverterManager();
LuaTableConverter.install(manager);
List<String> list = new ArrayList<String>();
list.add("First");
list.add("Second");
list.add("Third");
Object obj = manager.fromJavaToLua(list);
assertEquals(obj.getClass(), LuaTableImpl.class);
LuaTable t = (LuaTable) obj;
assertEquals(t.len(), 3);
assertEquals(t.rawget(1), "First");
assertEquals(t.rawget(2), "Second");
assertEquals(t.rawget(3), "Third");
}
@Test
public void testJavaToLuaTablesMap() throws LuaConversionError {
LuaConverterManager manager = new LuaConverterManager();
LuaTableConverter.install(manager);
Map map = new HashMap();
map.put("X", 123);
map.put("Y", "Hello");
map.put("Z", "World");
Object obj = manager.fromJavaToLua(map);
assertEquals(obj.getClass(), LuaTableImpl.class);
LuaTable t = (LuaTable) obj;
assertEquals(t.len(), 0);
assertEquals(t.rawget("X"), 123);
assertEquals(t.rawget("Y"), "Hello");
assertEquals(t.rawget("Z"), "World");
}
@Test
public void testLuaToJavaTables() throws LuaConversionError {
LuaConverterManager manager = new LuaConverterManager();
LuaTableConverter.install(manager);
LuaTableImpl t = new LuaTableImpl();
t.rawset(1, "First");
t.rawset(2, "Second");
t.rawset(3, "Third");
List list = manager.fromLuaToJava(t, List.class);
assertEquals(list.size(), 3);
assertEquals(list.get(0), "First");
assertEquals(list.get(1), "Second");
assertEquals(list.get(2), "Third");
}
@Test
public void testLuaToJavaTablesMap() throws LuaConversionError {
LuaConverterManager manager = new LuaConverterManager();
LuaTableConverter.install(manager);
LuaTableImpl t = new LuaTableImpl();
t.rawset("X", "First");
t.rawset("Y", "Second");
t.rawset(t, "Third");
Map map = manager.fromLuaToJava(t, Map.class);
assertEquals(map.get("X"), "First");
assertEquals(map.get("Y"), "Second");
assertEquals(map.get(t), "Third");
}
@Test
public void testJavaToLuaTablesRecursion() throws LuaConversionError {
LuaConverterManager manager = new LuaConverterManager();
LuaTableConverter.install(manager);
LuaNumberConverter.install(manager);
Map map = new HashMap();
Map map2 = new HashMap();
map.put("X", 123);
map.put("Y", map2);
map.put("Z", "World");
Object obj = manager.fromJavaToLua(map);
assertEquals(obj.getClass(), LuaTableImpl.class);
LuaTable t = (LuaTable) obj;
assertEquals(t.len(), 0);
assertEquals(t.rawget("X"), 123.0);
assertEquals(t.rawget("Y").getClass(), LuaTableImpl.class);
assertEquals(t.rawget("Z"), "World");
}
@Test(expected = LuaConversionError.class)
public void testJavaToLuaTablesRecursionInfinite() throws LuaConversionError {
LuaConverterManager manager = new LuaConverterManager();
LuaTableConverter.install(manager);
Map map = new HashMap();
map.put("X", map);
Object obj = manager.fromJavaToLua(map);
}
@Test
public void testSubtypeReturn() throws LuaConversionError {
LuaConverterManager manager = new LuaConverterManager();
Object obj2 = new StringBuilder();
Object obj = manager.fromLuaToJava(obj2, Object.class);
assertSame(obj, obj2);
}
}