From 8c56b2496671e5a5a9d92dc83f30674e9747db21 Mon Sep 17 00:00:00 2001 From: Harikrishna Date: Wed, 17 May 2023 18:49:57 +0530 Subject: [PATCH 1/3] Fix isWritable method check for the setter property to verify whether the field is writeable or not --- accessors-smart/src/main/java/net/minidev/asm/Accessor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/accessors-smart/src/main/java/net/minidev/asm/Accessor.java b/accessors-smart/src/main/java/net/minidev/asm/Accessor.java index 7c0e45f7..464bd598 100644 --- a/accessors-smart/src/main/java/net/minidev/asm/Accessor.java +++ b/accessors-smart/src/main/java/net/minidev/asm/Accessor.java @@ -125,7 +125,7 @@ public boolean isReadable() { * @return true if the field can be write */ public boolean isWritable() { - return field != null || getter != null; + return field != null || setter != null; } /** From eb47e560cf238d898786b7495a06847da61dfdad Mon Sep 17 00:00:00 2001 From: harikrishna553 Date: Wed, 17 May 2023 19:31:37 +0530 Subject: [PATCH 2/3] Add test cases --- .../com/mindev/pojos/AccessorTestPojo.java | 30 ++++++++ .../java/net/minidev/asm/AccessorTest.java | 72 +++++++++++++++++++ 2 files changed, 102 insertions(+) create mode 100644 accessors-smart/src/test/java/com/mindev/pojos/AccessorTestPojo.java create mode 100644 accessors-smart/src/test/java/net/minidev/asm/AccessorTest.java diff --git a/accessors-smart/src/test/java/com/mindev/pojos/AccessorTestPojo.java b/accessors-smart/src/test/java/com/mindev/pojos/AccessorTestPojo.java new file mode 100644 index 00000000..315a7be9 --- /dev/null +++ b/accessors-smart/src/test/java/com/mindev/pojos/AccessorTestPojo.java @@ -0,0 +1,30 @@ +package com.mindev.pojos; + +public class AccessorTestPojo { + + // Field with only setter method + private int writeOnlyField; + + // Field with only getter method + private int readOnlyField; + + // Field with both getter and setter methods + private int readAndWriteableField; + + public void setWriteOnlyField(int writeOnlyField) { + this.writeOnlyField = writeOnlyField; + } + + public int getReadOnlyField() { + return readOnlyField; + } + + public int getReadAndWriteableField() { + return readAndWriteableField; + } + + public void setReadAndWriteableField(int readAndWriteableField) { + this.readAndWriteableField = readAndWriteableField; + } + +} diff --git a/accessors-smart/src/test/java/net/minidev/asm/AccessorTest.java b/accessors-smart/src/test/java/net/minidev/asm/AccessorTest.java new file mode 100644 index 00000000..5e9f22ee --- /dev/null +++ b/accessors-smart/src/test/java/net/minidev/asm/AccessorTest.java @@ -0,0 +1,72 @@ +package net.minidev.asm; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; + +import org.junit.jupiter.api.Test; + +import com.mindev.pojos.AccessorTestPojo; + +public class AccessorTest { + + private static class AcceptAllFilter implements FieldFilter { + + @Override + public boolean canUse(Field field) { + return true; + } + + @Override + public boolean canUse(Field field, Method method) { + return true; + } + + @Override + public boolean canRead(Field field) { + return true; + } + + @Override + public boolean canWrite(Field field) { + return true; + } + + } + + @Test + public void testWriteOnlyField() throws NoSuchFieldException, SecurityException { + + Field writeOnlyField = AccessorTestPojo.class.getDeclaredField("writeOnlyField"); + Accessor accessor = new Accessor(AccessorTestPojo.class, writeOnlyField, new AcceptAllFilter()); + + assertTrue(accessor.isWritable()); + assertFalse(accessor.isReadable()); + + } + + @Test + public void testReadOnlyField() throws NoSuchFieldException, SecurityException { + + Field readOnlyField = AccessorTestPojo.class.getDeclaredField("readOnlyField"); + Accessor accessor = new Accessor(AccessorTestPojo.class, readOnlyField, new AcceptAllFilter()); + + assertFalse(accessor.isWritable()); + assertTrue(accessor.isReadable()); + + } + + @Test + public void testReadAndWriteableField() throws NoSuchFieldException, SecurityException { + + Field readAndWriteableField = AccessorTestPojo.class.getDeclaredField("readAndWriteableField"); + Accessor accessor = new Accessor(AccessorTestPojo.class, readAndWriteableField, new AcceptAllFilter()); + + assertTrue(accessor.isWritable()); + assertTrue(accessor.isReadable()); + + } + +} From 5f613969f39c1e8a63c990f8e8780c67b9fbdb7b Mon Sep 17 00:00:00 2001 From: harikrishna553 Date: Wed, 17 May 2023 19:37:06 +0530 Subject: [PATCH 3/3] Add test cases --- .../java/net/minidev/asm/AccessorTest.java | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/accessors-smart/src/test/java/net/minidev/asm/AccessorTest.java b/accessors-smart/src/test/java/net/minidev/asm/AccessorTest.java index 5e9f22ee..6d0c9d08 100644 --- a/accessors-smart/src/test/java/net/minidev/asm/AccessorTest.java +++ b/accessors-smart/src/test/java/net/minidev/asm/AccessorTest.java @@ -36,6 +36,30 @@ public boolean canWrite(Field field) { } + private static class AcceptNoneFilter implements FieldFilter { + + @Override + public boolean canUse(Field field) { + return false; + } + + @Override + public boolean canUse(Field field, Method method) { + return false; + } + + @Override + public boolean canRead(Field field) { + return false; + } + + @Override + public boolean canWrite(Field field) { + return false; + } + + } + @Test public void testWriteOnlyField() throws NoSuchFieldException, SecurityException { @@ -45,6 +69,10 @@ public void testWriteOnlyField() throws NoSuchFieldException, SecurityException assertTrue(accessor.isWritable()); assertFalse(accessor.isReadable()); + accessor = new Accessor(AccessorTestPojo.class, writeOnlyField, new AcceptNoneFilter()); + assertFalse(accessor.isWritable()); + assertFalse(accessor.isReadable()); + } @Test @@ -56,6 +84,9 @@ public void testReadOnlyField() throws NoSuchFieldException, SecurityException { assertFalse(accessor.isWritable()); assertTrue(accessor.isReadable()); + accessor = new Accessor(AccessorTestPojo.class, readOnlyField, new AcceptNoneFilter()); + assertFalse(accessor.isWritable()); + assertFalse(accessor.isReadable()); } @Test @@ -67,6 +98,9 @@ public void testReadAndWriteableField() throws NoSuchFieldException, SecurityExc assertTrue(accessor.isWritable()); assertTrue(accessor.isReadable()); + accessor = new Accessor(AccessorTestPojo.class, readAndWriteableField, new AcceptNoneFilter()); + assertFalse(accessor.isWritable()); + assertFalse(accessor.isReadable()); } }