@Test public void fieldWithoutObject() { ASSERT.about(javaSource()) .that(JavaFileObjects.forResource("model/bad/FieldWithoutObjectModel.java")) .processedWith(new JsonAnnotationProcessor()) .failsToCompile() .withErrorContaining("@JsonField fields can only be in classes annotated with @JsonObject."); }
@Test public void simpleObjectMapWithoutNulls() { String json = "{\"obj1\":{\"date\":\"2015-02-21T18:45:50.748+0000\",\"string\":\"testString\",\"test_double\":342.0,\"test_double_obj\":345.0,\"test_float\":898.0,\"test_float_obj\":382.0,\"test_int\":32,\"test_int_obj\":323,\"test_long\":932,\"test_long_obj\":3920,\"test_string\":\"anotherTestString\"}," + "\"obj2\":{\"date\":\"2015-02-22T18:45:50.748+0000\",\"string\":\"testString2\",\"test_double\":342.0,\"test_double_obj\":345.0,\"test_float\":898.0,\"test_float_obj\":382.0,\"test_int\":32,\"test_int_obj\":323,\"test_long\":932,\"test_long_obj\":3920,\"test_string\":\"anotherTestString\"}," + "\"obj3\":{\"string\":\"testString2\",\"test_double\":342.0,\"test_float\":898.0,\"test_int\":32,\"test_long\":932}," + "\"obj4\":null}"; String reserialized = null; try { Map<String, SimpleModelWithoutNullObjects> simpleModelMap = LoganSquare.parseMap(json, SimpleModelWithoutNullObjects.class); TreeMap<String, SimpleModelWithoutNullObjects> sortedMap = new TreeMap<>(); sortedMap.put("obj1", simpleModelMap.get("obj1")); sortedMap.put("obj2", simpleModelMap.get("obj2")); sortedMap.put("obj3", simpleModelMap.get("obj3")); sortedMap.put("obj4", simpleModelMap.get("obj4")); reserialized = LoganSquare.serialize(sortedMap, SimpleModelWithoutNullObjects.class); } catch (Exception ignored) { } ASSERT.that(json.equals(reserialized)).isTrue(); }
@Test public void privateField() { ASSERT.about(javaSource()) .that(JavaFileObjects.forResource("model/bad/PrivateFieldModelWithoutAccessors.java")) .processedWith(new JsonAnnotationProcessor()) .failsToCompile() .withErrorContaining("@JsonField annotation can only be used on private fields if both getter and setter are present."); }
@Test public void simpleObjectMapWithNulls() { String json = "{\"obj1\":{\"date\":\"2015-02-21T18:45:50.748+0000\",\"string\":\"testString\",\"test_double\":342.0,\"test_double_obj\":345.0,\"test_float\":898.0,\"test_float_obj\":382.0,\"test_int\":32,\"test_int_obj\":323,\"test_long\":932,\"test_long_obj\":3920,\"test_string\":\"anotherTestString\"}," + "\"obj2\":{\"date\":\"2015-02-22T18:45:50.748+0000\",\"string\":\"testString2\",\"test_double\":342.0,\"test_double_obj\":345.0,\"test_float\":898.0,\"test_float_obj\":382.0,\"test_int\":32,\"test_int_obj\":323,\"test_long\":932,\"test_long_obj\":3920,\"test_string\":\"anotherTestString\"}," + "\"obj3\":{\"date\":null,\"string\":\"testString2\",\"test_double\":342.0,\"test_double_obj\":null,\"test_float\":898.0,\"test_float_obj\":null,\"test_int\":32,\"test_int_obj\":null,\"test_long\":932,\"test_long_obj\":null,\"test_string\":null}," + "\"obj4\":null}"; String reserialized = null; try { Map<String, SimpleModel> simpleModelMap = LoganSquare.parseMap(json, SimpleModel.class); TreeMap<String, SimpleModel> sortedMap = new TreeMap<>(); sortedMap.put("obj1", simpleModelMap.get("obj1")); sortedMap.put("obj2", simpleModelMap.get("obj2")); sortedMap.put("obj3", simpleModelMap.get("obj3")); sortedMap.put("obj4", simpleModelMap.get("obj4")); reserialized = LoganSquare.serialize(sortedMap, SimpleModel.class); } catch (Exception ignored) { } ASSERT.that(json.equals(reserialized)).isTrue(); }
@Test public void invalidTypeConverter() { ASSERT.about(javaSource()) .that(JavaFileObjects.forResource("model/bad/InvalidTypeConverterModel.java")) .processedWith(new JsonAnnotationProcessor()) .failsToCompile() .withErrorContaining("TypeConverter elements must implement the TypeConverter interface or extend from one of the convenience helpers"); }
@Test public void stringMap() { String json = "{\"key1\":\"val1\",\"key2\":\"val2\",\"key3\":\"val3\"}"; String reserialized = null; try { Map<String, String> map = new TreeMap<>(LoganSquare.parseMap(json, String.class)); reserialized = LoganSquare.serialize(map, String.class); } catch (Exception ignored) { } ASSERT.that(json.equals(reserialized)).isTrue(); }
@Test public void methodWithArgs() { ASSERT.about(javaSource()) .that(JavaFileObjects.forResource("model/bad/MethodWithArgsModel.java")) .processedWith(new JsonAnnotationProcessor()) .failsToCompile() .withErrorContaining("@OnJsonParseComplete methods must not take any parameters."); }
@Test public void intMap() { String json = "{\"key1\":1,\"key2\":2,\"key3\":3}"; String reserialized = null; try { Map<String, Integer> map = new TreeMap<>(LoganSquare.parseMap(json, Integer.class)); reserialized = LoganSquare.serialize(map, Integer.class); } catch (Exception ignored) { } ASSERT.that(json.equals(reserialized)).isTrue(); }
@Test public void multipleMethods() { ASSERT.about(javaSource()) .that(JavaFileObjects.forResource("model/bad/MultipleMethodsModel.java")) .processedWith(new JsonAnnotationProcessor()) .failsToCompile() .withErrorContaining("There can only be one @OnJsonParseComplete method per class"); } }
@Test public void floatMap() { String json = "{\"key1\":1.4,\"key2\":2.0,\"key3\":3.224}"; String reserialized = null; try { Map<String, Float> map = new TreeMap<>(LoganSquare.parseMap(json, Float.class)); reserialized = LoganSquare.serialize(map, Float.class); } catch (Exception ignored) { } ASSERT.that(json.equals(reserialized)).isTrue(); }
@Test public void methodObject() { ASSERT.about(javaSource()) .that(JavaFileObjects.forResource("model/bad/MethodWithoutObjectModel.java")) .processedWith(new JsonAnnotationProcessor()) .failsToCompile() .withErrorContaining("@OnJsonParseComplete methods can only be in classes annotated with @JsonObject."); }
@Test public void simpleObjectMap() { String json = "{\"obj1\":{\"date\":\"2015-02-21T18:45:50.748+0000\",\"string\":\"testString\",\"test_double\":342.0,\"test_double_obj\":345.0,\"test_float\":898.0,\"test_float_obj\":382.0,\"test_int\":32,\"test_int_obj\":323,\"test_long\":932,\"test_long_obj\":3920,\"test_string\":\"anotherTestString\"}," + "\"obj2\":{\"date\":\"2015-02-22T18:45:50.748+0000\",\"string\":\"testString2\",\"test_double\":342.0,\"test_double_obj\":345.0,\"test_float\":898.0,\"test_float_obj\":382.0,\"test_int\":32,\"test_int_obj\":323,\"test_long\":932,\"test_long_obj\":3920,\"test_string\":\"anotherTestString\"}}"; String reserialized = null; try { Map<String, SimpleModel> simpleModelMap = new TreeMap<>(LoganSquare.parseMap(json, SimpleModel.class)); reserialized = LoganSquare.serialize(simpleModelMap, SimpleModel.class); } catch (Exception ignored) { } ASSERT.that(json.equals(reserialized)).isTrue(); }
@Test public void generatedSource() { ASSERT.about(javaSource()) .that(JavaFileObjects.forResource("model/good/NestedCollectionModel.java")) .processedWith(new JsonAnnotationProcessor()) .compilesWithoutError() .and() .generatesSources(JavaFileObjects.forResource("generated/NestedCollectionModel$$JsonObjectMapper.java")); } }
@Test public void booleanMap() { String json = "{\"key1\":true,\"key2\":true,\"key3\":false}"; String reserialized = null; try { Map<String, Boolean> map = new TreeMap<>(LoganSquare.parseMap(json, Boolean.class)); reserialized = LoganSquare.serialize(map, Boolean.class); } catch (Exception ignored) { } ASSERT.that(json.equals(reserialized)).isTrue(); }
@Test public void generatedSource() { ASSERT.about(javaSource()) .that(JavaFileObjects.forResource("model/good/AbstractParentModel.java")) .processedWith(new JsonAnnotationProcessor()) .compilesWithoutError() .and() .generatesSources(JavaFileObjects.forResource("generated/AbstractParentModel$$JsonObjectMapper.java")); } }
@Test public void mixedObjectMap() { String json = "{\"key1\":true,\"key2\":1,\"key3\":1.02,\"key4\":1002020,\"key5\":\"test2\",\"key6\":{\"subkey1\":1,\"subkey2\":\"string\"},\"key7\":[1,2,3]}"; String reserialized = null; try { Map<String, Object> map = new TreeMap<>(LoganSquare.parseMap(json, Object.class)); reserialized = LoganSquare.serialize(map, Object.class); } catch (Exception ignored) { } ASSERT.that(json.equals(reserialized)).isTrue(); }
@Test public void generatedSource() { ASSERT.about(javaSource()) .that(JavaFileObjects.forResource("model/good/NonPrivateFieldsFieldDetectionPolicyModel.java")) .processedWith(new JsonAnnotationProcessor()) .compilesWithoutError() .and() .generatesSources(JavaFileObjects.forResource("generated/NonPrivateFieldsFieldDetectionPolicyModel$$JsonObjectMapper.java")); } }
@Test public void testListFiles() throws IOException { try (FileSystem fs = getTestBucket()) { List<Path> goodPaths = new ArrayList<>(); List<Path> paths = new ArrayList<>(); goodPaths.add(fs.getPath("dir/angel")); goodPaths.add(fs.getPath("dir/alone")); paths.add(fs.getPath("dir/dir2/another_angel")); paths.add(fs.getPath("atroot")); paths.addAll(goodPaths); goodPaths.add(fs.getPath("dir/dir2/")); for (Path path : paths) { fillFile(storage, BUCKET, path.toString(), SML_SIZE); } List<Path> got = new ArrayList<>(); for (String folder : new String[] {"/dir/", "/dir", "dir/", "dir"}) { got.clear(); for (Path path : Files.newDirectoryStream(fs.getPath(folder))) { got.add(path); } assertWithMessage("Listing " + folder + ": ") .that(got) .containsExactlyElementsIn(goodPaths); } // clean up for (Path path : paths) { Files.delete(path); } } }
@Test public void generatedSource() { ASSERT.about(javaSource()) .that(JavaFileObjects.forResource("model/good/SimpleWrapperModel.java")) .processedWith(new JsonAnnotationProcessor()) .compilesWithoutError() .and() .generatesSources(JavaFileObjects.forResource("generated/SimpleWrapperModel$$JsonObjectMapper.java")); } }
@Test public void stringList() { String json = "[\"test1\",\"test2\",\"test3\",\"test4\"]"; String reserialized = null; try { List<String> list = LoganSquare.parseList(json, String.class); reserialized = LoganSquare.serialize(list, String.class); } catch (Exception ignored) { } ASSERT.that(json.equals(reserialized)).isTrue(); }