package com.framsticks.params; import static org.fest.assertions.Assertions.*; import java.util.Arrays; import java.util.Map; import java.util.TreeMap; import org.testng.annotations.Test; import com.framsticks.params.AccessOperations; import com.framsticks.params.FramsClass; import com.framsticks.params.ListSink; import com.framsticks.params.ReflectionAccess; import com.framsticks.params.types.UniversalParam; import com.framsticks.parsers.Savers; import com.framsticks.test.TestConfiguration; import com.framsticks.test.TestSerializedClass; public class ParamsUtilTest extends TestConfiguration { @Test public void testSerialization() { FramsClass framsClass; ReflectionAccess access; framsClass = FramsClass.build().forClass(TestSerializedClass.class); assertThat(framsClass.getParamCount()).isEqualTo(1); assertThat(framsClass.getParam("theArray")).isInstanceOf(UniversalParam.class); access = new ReflectionAccess(TestSerializedClass.class, framsClass); assertThat(Savers.saveFramsClass(new ListSink(), framsClass).getOut()).isEqualTo( Arrays.asList( "class:", "name:TestSerializedClass", "id:TestSerializedClass", "", "prop:", "id:theArray", "name:TheArray", "type:x", "" ) ); TestSerializedClass test = new TestSerializedClass(); test.getTheArray().add(1); test.getTheArray().add(3.0); test.getTheArray().add("word"); ListSink sink = new ListSink(); AccessOperations.savePrimitives(access.select(test), sink); assertThat(sink.getOut()).isEqualTo(Arrays.asList( "TestSerializedClass:", "theArray:@Serialized:[1,3.0,\"word\"]", "" )); assertThat(ParamsUtil.serialize("@Serialized:")).isEqualTo("@Serialized:\"@Serialized:\""); assertThat(ParamsUtil.serialize(Arrays.asList(12, null, "abc"))).isEqualTo("@Serialized:[12,null,\"abc\"]"); assertThat(ParamsUtil.serialize(Arrays.asList(Arrays.asList(Arrays.asList())))).isEqualTo("@Serialized:[[[]]]"); Map f12 = new TreeMap(); f12.put("a", 123); f12.put("b", Arrays.asList(7, 8, 9)); assertThat(ParamsUtil.serialize(f12)).isEqualTo("@Serialized:{\"a\":123,\"b\":[7,8,9]}"); // List f18 = new ArrayList<>(); // List f18_0 = new ArrayList<>(); // List f18_1 = Arrays.asList("x", f18); // List f18_2 = new ArrayList<>(); // f18_2.add(f18_0); // f18_0.add(f18_2); // f18.add(f18_0); // f18.add(f18_1); // f18.add(f18_2); // root[0] is f18_0 // root[0]==root[2][0], root[1][1]==root, root[1][1][1][1][0]=="x". // assertThat(ParamsUtil.serialize(f18)).isEqualTo("@Serialized:[[^3],[\"x\",^0],[^1]]"); } }