The following issues were found

src/test/java/com/alibaba/json/bvt/serializer/SerialWriterTest.java
5 issues
JUnit 4 tests that execute tests should use the @Test annotation, JUnit 5 tests should use @Test, @RepeatedTest, @TestFactory, @TestTemplate or @ParameterizedTest
Design

Line: 11

              
public class SerialWriterTest extends TestCase {

    public void test_0() throws Exception {
        for (int i = 0; i < 3; ++i) {
            {
                String text = "abc";
                String charset = "UTF-8";
                SerializeWriter writer = new SerializeWriter();

            

Reported by PMD.

Avoid instantiating new objects inside loops
Performance

Line: 16

                          {
                String text = "abc";
                String charset = "UTF-8";
                SerializeWriter writer = new SerializeWriter();
                writer.append(text);
                byte[] bytes = writer.toBytes(charset);
                Assert.assertArrayEquals(text.getBytes(charset), bytes);
            }
            

            

Reported by PMD.

Potential violation of Law of Demeter (object not created locally)
Design

Line: 19

                              SerializeWriter writer = new SerializeWriter();
                writer.append(text);
                byte[] bytes = writer.toBytes(charset);
                Assert.assertArrayEquals(text.getBytes(charset), bytes);
            }
            
            {
                String text = "efg";
                String charset = "UTF-8";

            

Reported by PMD.

Avoid instantiating new objects inside loops
Performance

Line: 25

                          {
                String text = "efg";
                String charset = "UTF-8";
                SerializeWriter writer = new SerializeWriter();
                writer.append(text);
                byte[] bytes = writer.toBytes(charset);
                Assert.assertArrayEquals(text.getBytes(charset), bytes);
            }
        }

            

Reported by PMD.

Potential violation of Law of Demeter (object not created locally)
Design

Line: 28

                              SerializeWriter writer = new SerializeWriter();
                writer.append(text);
                byte[] bytes = writer.toBytes(charset);
                Assert.assertArrayEquals(text.getBytes(charset), bytes);
            }
        }
    }
}

            

Reported by PMD.

src/test/java/com/alibaba/json/bvt/parser/deser/deny/DenyTest2.java
5 issues
JUnit 4 tests that execute tests should use the @Test annotation, JUnit 5 tests should use @Test, @RepeatedTest, @TestFactory, @TestTemplate or @ParameterizedTest
Design

Line: 16

              
public class DenyTest2 extends TestCase {

    public void test_0() throws Exception {
        String text = "{}";

        ParserConfig config = new ParserConfig();

        Properties properties = new Properties();

            

Reported by PMD.

Potential violation of Law of Demeter (object not created locally)
Design

Line: 33

                      }
        Assert.assertNotNull(error);

        error.printStackTrace();
        
        JSON.parseObject(text, B.class, config, JSON.DEFAULT_PARSER_FEATURE);
    }
    
    public static class B {

            

Reported by PMD.

Avoid printStackTrace(); use a logger call instead.
Design

Line: 33

                      }
        Assert.assertNotNull(error);

        error.printStackTrace();
        
        JSON.parseObject(text, B.class, config, JSON.DEFAULT_PARSER_FEATURE);
    }
    
    public static class B {

            

Reported by PMD.

Avoid unused imports such as 'com.alibaba.json.bvtVO.deny.A'
Design

Line: 10

              import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.parser.ParserConfig;
import com.alibaba.json.bvtVO.deny.A;

import junit.framework.TestCase;

public class DenyTest2 extends TestCase {


            

Reported by PMD.

Found 'DD'-anomaly for variable 'error' (lines '25'-'29').
Error

Line: 25

                      properties.put(ParserConfig.DENY_PROPERTY, "com.alibaba.json.bvtVO.deny");
        config.configFromPropety(properties);
        
        Exception error = null;
        try {
            JSON.parseObject("{\"@type\":\"com.alibaba.json.bvtVO.deny$A\"}", Object.class, config, JSON.DEFAULT_PARSER_FEATURE);
        } catch (JSONException ex) {
            error = ex;
        }

            

Reported by PMD.

src/test/java/com/alibaba/json/bvt/serializer/IntegerArrayEncodeTest.java
5 issues
JUnit 4 tests that execute tests should use the @Test annotation, JUnit 5 tests should use @Test, @RepeatedTest, @TestFactory, @TestTemplate or @ParameterizedTest
Design

Line: 11

              
public class IntegerArrayEncodeTest extends TestCase {

    public void test_0_s() throws Exception {
        SerializeWriter out = new SerializeWriter();

        JSONSerializer serializer = new JSONSerializer(out);
        serializer.write(new Integer[] { 0, 1 });


            

Reported by PMD.

JUnit 4 tests that execute tests should use the @Test annotation, JUnit 5 tests should use @Test, @RepeatedTest, @TestFactory, @TestTemplate or @ParameterizedTest
Design

Line: 20

                      Assert.assertEquals("[0,1]", out.toString());
    }

    public void test_1_s() throws Exception {
        SerializeWriter out = new SerializeWriter();

        JSONSerializer serializer = new JSONSerializer(out);
        serializer.write(new Integer[] {});


            

Reported by PMD.

JUnit 4 tests that execute tests should use the @Test annotation, JUnit 5 tests should use @Test, @RepeatedTest, @TestFactory, @TestTemplate or @ParameterizedTest
Design

Line: 29

                      Assert.assertEquals("[]", out.toString());
    }

    public void test_2_s() throws Exception {
        SerializeWriter out = new SerializeWriter();

        JSONSerializer serializer = new JSONSerializer(out);
        serializer.write(new Integer[] { -2147483648 });


            

Reported by PMD.

JUnit 4 tests that execute tests should use the @Test annotation, JUnit 5 tests should use @Test, @RepeatedTest, @TestFactory, @TestTemplate or @ParameterizedTest
Design

Line: 38

                      Assert.assertEquals("[-2147483648]", out.toString());
    }

    public void test_3_s() throws Exception {
        SerializeWriter out = new SerializeWriter();

        JSONSerializer serializer = new JSONSerializer(out);

        StringBuilder sb = new StringBuilder();

            

Reported by PMD.

JUnit 4 tests that execute tests should use the @Test annotation, JUnit 5 tests should use @Test, @RepeatedTest, @TestFactory, @TestTemplate or @ParameterizedTest
Design

Line: 61

                      Assert.assertEquals(sb.toString(), out.toString());
    }

    public void test_4_s() throws Exception {
        SerializeWriter out = new SerializeWriter(1);

        JSONSerializer serializer = new JSONSerializer(out);
        serializer.write(new Integer[] { 1, null, null });


            

Reported by PMD.

src/test/java/com/alibaba/json/bvt/parser/deser/EnumMapTest.java
5 issues
System.out.println is used
Design

Line: 18

                      enumMap.put(Type.Big, "BIG");

        String json = JSON.toJSONString(enumMap);
        System.out.println(json);
        EnumMap<Type, String> enumMap2 = JSON.parseObject(json, new TypeReference<EnumMap<Type, String>>(){});
        assertEquals(1, enumMap2.size());
        assertEquals(enumMap.get(Type.Big), enumMap2.get(Type.Big));
    }


            

Reported by PMD.

JUnit 4 tests that execute tests should use the @Test annotation, JUnit 5 tests should use @Test, @RepeatedTest, @TestFactory, @TestTemplate or @ParameterizedTest
Design

Line: 13

               * Created by wenshao on 2016/10/18.
 */
public class EnumMapTest extends TestCase {
    public void test_for_enum_map() throws Exception {
        EnumMap<Type, String> enumMap = new EnumMap<Type, String>(Type.class);
        enumMap.put(Type.Big, "BIG");

        String json = JSON.toJSONString(enumMap);
        System.out.println(json);

            

Reported by PMD.

Unit tests should not contain more than 1 assert(s).
Design

Line: 13

               * Created by wenshao on 2016/10/18.
 */
public class EnumMapTest extends TestCase {
    public void test_for_enum_map() throws Exception {
        EnumMap<Type, String> enumMap = new EnumMap<Type, String>(Type.class);
        enumMap.put(Type.Big, "BIG");

        String json = JSON.toJSONString(enumMap);
        System.out.println(json);

            

Reported by PMD.

JUnit assertions should include a message
Design

Line: 20

                      String json = JSON.toJSONString(enumMap);
        System.out.println(json);
        EnumMap<Type, String> enumMap2 = JSON.parseObject(json, new TypeReference<EnumMap<Type, String>>(){});
        assertEquals(1, enumMap2.size());
        assertEquals(enumMap.get(Type.Big), enumMap2.get(Type.Big));
    }

    public static enum Type {
        Big, Small

            

Reported by PMD.

JUnit assertions should include a message
Design

Line: 21

                      System.out.println(json);
        EnumMap<Type, String> enumMap2 = JSON.parseObject(json, new TypeReference<EnumMap<Type, String>>(){});
        assertEquals(1, enumMap2.size());
        assertEquals(enumMap.get(Type.Big), enumMap2.get(Type.Big));
    }

    public static enum Type {
        Big, Small
    }

            

Reported by PMD.

src/test/java/com/alibaba/json/bvt/serializer/BugTest2.java
5 issues
System.out.println is used
Design

Line: 15

                      obj.put("a", new A());
        String text = obj.toString();

        System.out.println(text);
    }

    public static class A implements JSONAware {

        private int    id;

            

Reported by PMD.

JUnit tests should include assert() or fail()
Design

Line: 10

              
public class BugTest2 extends TestCase {

    public void test_0() throws Exception {
        JSONObject obj = new JSONObject();
        obj.put("a", new A());
        String text = obj.toString();

        System.out.println(text);

            

Reported by PMD.

JUnit 4 tests that execute tests should use the @Test annotation, JUnit 5 tests should use @Test, @RepeatedTest, @TestFactory, @TestTemplate or @ParameterizedTest
Design

Line: 10

              
public class BugTest2 extends TestCase {

    public void test_0() throws Exception {
        JSONObject obj = new JSONObject();
        obj.put("a", new A());
        String text = obj.toString();

        System.out.println(text);

            

Reported by PMD.

The class 'A' is suspected to be a Data Class (WOC=20.000%, NOPA=0, NOAM=4, WMC=6)
Design

Line: 18

                      System.out.println(text);
    }

    public static class A implements JSONAware {

        private int    id;
        private String name;

        private JSONObject toJSONObject() {

            

Reported by PMD.

Potential violation of Law of Demeter (method chain calls)
Design

Line: 47

                      }

        public String toJSONString() {
            return toJSONObject().toString();
        }

    }
}

            

Reported by PMD.

src/test/java/com/alibaba/json/bvt/serializer/Bug_for_yegaofei.java
5 issues
JUnit 4 tests that execute tests should use the @Test annotation, JUnit 5 tests should use @Test, @RepeatedTest, @TestFactory, @TestTemplate or @ParameterizedTest
Design

Line: 13

              import java.lang.reflect.Field;

public class Bug_for_yegaofei  extends TestCase {
    public void test_0() throws Exception {
        PlatformDepartmentVO vo = new PlatformDepartmentVO();
        vo.setId("xx");
        JSON.toJSONString(vo);
        JavaBeanSerializer serializer = (JavaBeanSerializer) SerializeConfig.globalInstance.getObjectWriter(PlatformDepartmentVO.class);
        Field field = JavaBeanSerializer.class.getDeclaredField("getters");

            

Reported by PMD.

Potential violation of Law of Demeter (static property access)
Design

Line: 17

                      PlatformDepartmentVO vo = new PlatformDepartmentVO();
        vo.setId("xx");
        JSON.toJSONString(vo);
        JavaBeanSerializer serializer = (JavaBeanSerializer) SerializeConfig.globalInstance.getObjectWriter(PlatformDepartmentVO.class);
        Field field = JavaBeanSerializer.class.getDeclaredField("getters");
        field.setAccessible(true);
        FieldSerializer[] getters = (FieldSerializer[]) field.get(serializer);
        for (FieldSerializer getter : getters) {
            assertNotNull(getter);

            

Reported by PMD.

Potential violation of Law of Demeter (object not created locally)
Design

Line: 19

                      JSON.toJSONString(vo);
        JavaBeanSerializer serializer = (JavaBeanSerializer) SerializeConfig.globalInstance.getObjectWriter(PlatformDepartmentVO.class);
        Field field = JavaBeanSerializer.class.getDeclaredField("getters");
        field.setAccessible(true);
        FieldSerializer[] getters = (FieldSerializer[]) field.get(serializer);
        for (FieldSerializer getter : getters) {
            assertNotNull(getter);
        }
    }

            

Reported by PMD.

Potential violation of Law of Demeter (object not created locally)
Design

Line: 20

                      JavaBeanSerializer serializer = (JavaBeanSerializer) SerializeConfig.globalInstance.getObjectWriter(PlatformDepartmentVO.class);
        Field field = JavaBeanSerializer.class.getDeclaredField("getters");
        field.setAccessible(true);
        FieldSerializer[] getters = (FieldSerializer[]) field.get(serializer);
        for (FieldSerializer getter : getters) {
            assertNotNull(getter);
        }
    }
}

            

Reported by PMD.

JUnit assertions should include a message
Design

Line: 22

                      field.setAccessible(true);
        FieldSerializer[] getters = (FieldSerializer[]) field.get(serializer);
        for (FieldSerializer getter : getters) {
            assertNotNull(getter);
        }
    }
}

            

Reported by PMD.

src/test/java/com/alibaba/json/bvt/serializer/InetAddressTest.java
5 issues
JUnit 4 tests that execute tests should use the @Test annotation, JUnit 5 tests should use @Test, @RepeatedTest, @TestFactory, @TestTemplate or @ParameterizedTest
Design

Line: 13

              
public class InetAddressTest extends TestCase {

    public void test_inetAddress() throws Exception {
        InetAddress address = InetAddress.getLocalHost();

        String text = JSON.toJSONString(address);

        Assert.assertEquals(JSON.toJSONString(address.getHostAddress()), text);

            

Reported by PMD.

Potential violation of Law of Demeter (object not created locally)
Design

Line: 18

              
        String text = JSON.toJSONString(address);

        Assert.assertEquals(JSON.toJSONString(address.getHostAddress()), text);

        InetAddress address2 = JSON.parseObject(text, InetAddress.class);
        Assert.assertEquals(address, address2);
        ParserConfig.getGlobalInstance().getDeserializer(InetAddress.class);
    }

            

Reported by PMD.

Potential violation of Law of Demeter (method chain calls)
Design

Line: 22

              
        InetAddress address2 = JSON.parseObject(text, InetAddress.class);
        Assert.assertEquals(address, address2);
        ParserConfig.getGlobalInstance().getDeserializer(InetAddress.class);
    }

    public void test_null() throws Exception {
        Assert.assertEquals(null, JSON.parseObject("null", InetAddress.class));
    }

            

Reported by PMD.

JUnit 4 tests that execute tests should use the @Test annotation, JUnit 5 tests should use @Test, @RepeatedTest, @TestFactory, @TestTemplate or @ParameterizedTest
Design

Line: 25

                      ParserConfig.getGlobalInstance().getDeserializer(InetAddress.class);
    }

    public void test_null() throws Exception {
        Assert.assertEquals(null, JSON.parseObject("null", InetAddress.class));
    }
    
    public void test_empty() throws Exception {
        Assert.assertEquals(null, JSON.parseObject("\"\"", InetAddress.class));

            

Reported by PMD.

JUnit 4 tests that execute tests should use the @Test annotation, JUnit 5 tests should use @Test, @RepeatedTest, @TestFactory, @TestTemplate or @ParameterizedTest
Design

Line: 29

                      Assert.assertEquals(null, JSON.parseObject("null", InetAddress.class));
    }
    
    public void test_empty() throws Exception {
        Assert.assertEquals(null, JSON.parseObject("\"\"", InetAddress.class));
    }
}

            

Reported by PMD.

src/test/java/com/alibaba/json/bvt/serializer/ByteArraySerializerTest.java
5 issues
JUnit 4 tests that execute tests should use the @Test annotation, JUnit 5 tests should use @Test, @RepeatedTest, @TestFactory, @TestTemplate or @ParameterizedTest
Design

Line: 13

              
public class ByteArraySerializerTest extends TestCase {

    public void test_b_0() {
        char[] buf = new char[4];
        IOUtils.getChars((byte) -127, 4, buf);
    }

    public void test_0() {

            

Reported by PMD.

JUnit tests should include assert() or fail()
Design

Line: 13

              
public class ByteArraySerializerTest extends TestCase {

    public void test_b_0() {
        char[] buf = new char[4];
        IOUtils.getChars((byte) -127, 4, buf);
    }

    public void test_0() {

            

Reported by PMD.

JUnit 4 tests that execute tests should use the @Test annotation, JUnit 5 tests should use @Test, @RepeatedTest, @TestFactory, @TestTemplate or @ParameterizedTest
Design

Line: 18

                      IOUtils.getChars((byte) -127, 4, buf);
    }

    public void test_0() {
        Assert.assertEquals("\"\"", JSON.toJSONString(new byte[0]));
        Assert.assertEquals("\"AQI=\"", JSON.toJSONString(new byte[] { 1, 2 }));
        Assert.assertEquals("\"AQID\"", JSON.toJSONString(new byte[] { 1, 2, 3 }));

        Assert.assertEquals("1", JSON.toJSONString((byte) 1));

            

Reported by PMD.

JUnit 4 tests that execute tests should use the @Test annotation, JUnit 5 tests should use @Test, @RepeatedTest, @TestFactory, @TestTemplate or @ParameterizedTest
Design

Line: 28

                      Assert.assertEquals("true", JSON.toJSONString(true));
    }

    public void test_1() throws Exception {
        SerializeWriter out = new SerializeWriter(1);
        out.writeByteArray(new byte[] { 1, 2, 3 });
        Assert.assertEquals("\"AQID\"", out.toString());
    }


            

Reported by PMD.

JUnit 4 tests that execute tests should use the @Test annotation, JUnit 5 tests should use @Test, @RepeatedTest, @TestFactory, @TestTemplate or @ParameterizedTest
Design

Line: 34

                      Assert.assertEquals("\"AQID\"", out.toString());
    }

    public void test_2() throws Exception {
        SerializeWriter out = new SerializeWriter(100);
        out.writeByteArray(new byte[] { 1, 2, 3 });
        Assert.assertEquals("\"AQID\"", out.toString());
    }
}

            

Reported by PMD.

src/test/java/com/alibaba/json/bvt/serializer/filters/ClassNameFilterTest.java
5 issues
JUnit 4 tests that execute tests should use the @Test annotation, JUnit 5 tests should use @Test, @RepeatedTest, @TestFactory, @TestTemplate or @ParameterizedTest
Design

Line: 13

              
public class ClassNameFilterTest extends TestCase {
    
    public void test_filter() throws Exception {
        NameFilter upcaseNameFilter = new NameFilter() {
            
            @Override
            public String process(Object object, String name, Object value) {
                return name.toUpperCase();

            

Reported by PMD.

When doing a String.toLowerCase()/toUpperCase() call, use a Locale
Error

Line: 18

                          
            @Override
            public String process(Object object, String name, Object value) {
                return name.toUpperCase();
            }
        };
        SerializeConfig.getGlobalInstance() //
                       .addFilter(A.class, upcaseNameFilter);
        

            

Reported by PMD.

Potential violation of Law of Demeter (method chain calls)
Design

Line: 21

                              return name.toUpperCase();
            }
        };
        SerializeConfig.getGlobalInstance() //
                       .addFilter(A.class, upcaseNameFilter);
        
        Assert.assertEquals("{\"ID\":0}", JSON.toJSONString(new A()));
        Assert.assertEquals("{\"id\":0}", JSON.toJSONString(new B()));
    }

            

Reported by PMD.

Found 'DU'-anomaly for variable 'upcaseNameFilter' (lines '14'-'26').
Error

Line: 14

              public class ClassNameFilterTest extends TestCase {
    
    public void test_filter() throws Exception {
        NameFilter upcaseNameFilter = new NameFilter() {
            
            @Override
            public String process(Object object, String name, Object value) {
                return name.toUpperCase();
            }

            

Reported by PMD.

Found 'DU'-anomaly for variable 'upcaseNameFilter' (lines '14'-'26').
Error

Line: 14

              public class ClassNameFilterTest extends TestCase {
    
    public void test_filter() throws Exception {
        NameFilter upcaseNameFilter = new NameFilter() {
            
            @Override
            public String process(Object object, String name, Object value) {
                return name.toUpperCase();
            }

            

Reported by PMD.

src/test/java/com/alibaba/json/bvt/serializer/filters/ClassNameFilterTest_private.java
5 issues
JUnit 4 tests that execute tests should use the @Test annotation, JUnit 5 tests should use @Test, @RepeatedTest, @TestFactory, @TestTemplate or @ParameterizedTest
Design

Line: 13

              
public class ClassNameFilterTest_private extends TestCase {
    
    public void test_filter() throws Exception {
        NameFilter upcaseNameFilter = new NameFilter() {
            
            @Override
            public String process(Object object, String name, Object value) {
                return name.toUpperCase();

            

Reported by PMD.

When doing a String.toLowerCase()/toUpperCase() call, use a Locale
Error

Line: 18

                          
            @Override
            public String process(Object object, String name, Object value) {
                return name.toUpperCase();
            }
        };
        SerializeConfig.getGlobalInstance() //
                       .addFilter(A.class, upcaseNameFilter);
        

            

Reported by PMD.

Potential violation of Law of Demeter (method chain calls)
Design

Line: 21

                              return name.toUpperCase();
            }
        };
        SerializeConfig.getGlobalInstance() //
                       .addFilter(A.class, upcaseNameFilter);
        
        Assert.assertEquals("{\"ID\":0}", JSON.toJSONString(new A()));
        Assert.assertEquals("{\"id\":0}", JSON.toJSONString(new B()));
    }

            

Reported by PMD.

Found 'DU'-anomaly for variable 'upcaseNameFilter' (lines '14'-'26').
Error

Line: 14

              public class ClassNameFilterTest_private extends TestCase {
    
    public void test_filter() throws Exception {
        NameFilter upcaseNameFilter = new NameFilter() {
            
            @Override
            public String process(Object object, String name, Object value) {
                return name.toUpperCase();
            }

            

Reported by PMD.

Found 'DU'-anomaly for variable 'upcaseNameFilter' (lines '14'-'26').
Error

Line: 14

              public class ClassNameFilterTest_private extends TestCase {
    
    public void test_filter() throws Exception {
        NameFilter upcaseNameFilter = new NameFilter() {
            
            @Override
            public String process(Object object, String name, Object value) {
                return name.toUpperCase();
            }

            

Reported by PMD.