add tests for JavaBeans
diff --git a/src/main/java/org/yaml/snakeyaml/representer/Representer.java b/src/main/java/org/yaml/snakeyaml/representer/Representer.java
index 4d2a68a..cf32873 100644
--- a/src/main/java/org/yaml/snakeyaml/representer/Representer.java
+++ b/src/main/java/org/yaml/snakeyaml/representer/Representer.java
@@ -127,10 +127,10 @@
&& !property.getReadMethod().getName().equals("getClass")) {
properties.add(new MethodProperty(property));
}
+ // add public fields
for (Field field : type.getFields()) {
int modifiers = field.getModifiers();
- if (!Modifier.isPublic(modifiers) || Modifier.isStatic(modifiers)
- || Modifier.isTransient(modifiers))
+ if (Modifier.isStatic(modifiers) || Modifier.isTransient(modifiers))
continue;
properties.add(new FieldProperty(field));
}
diff --git a/src/test/java/org/yaml/snakeyaml/constructor/ConstructorTest.java b/src/test/java/org/yaml/snakeyaml/constructor/ConstructorTest.java
index 9ee76be..32ae6d6 100644
--- a/src/test/java/org/yaml/snakeyaml/constructor/ConstructorTest.java
+++ b/src/test/java/org/yaml/snakeyaml/constructor/ConstructorTest.java
@@ -82,6 +82,17 @@
construct("--- !!org.yaml.snakeyaml.constructor.TestBean\nname: Ola Bini\nage: 24\nborn: 1982-05-03\n"));
}
+ public void testWrongName() {
+ try {
+ construct("--- !!org.yaml.snakeyaml.constructor.TestBean\nwrongName: No one\nage: 24\nborn: 1982-05-03\n");
+ fail("IntrospectionException expected.");
+ } catch (Exception e) {
+ assertEquals(
+ "null; Can't construct a java object for tag:yaml.org,2002:org.yaml.snakeyaml.constructor.TestBean; exception=org.yaml.snakeyaml.error.YAMLException: Unable to find property 'wrongName' on class: org.yaml.snakeyaml.constructor.TestBean",
+ e.getMessage());
+ }
+ }
+
private Object construct(String data) {
Yaml yaml = new Yaml();
return yaml.load(data);
diff --git a/src/test/java/org/yaml/snakeyaml/representer/RepresentFieldTest.java b/src/test/java/org/yaml/snakeyaml/representer/RepresentFieldTest.java
new file mode 100644
index 0000000..80d0b3d
--- /dev/null
+++ b/src/test/java/org/yaml/snakeyaml/representer/RepresentFieldTest.java
@@ -0,0 +1,50 @@
+/*
+ * See LICENSE file in distribution for copyright and licensing information.
+ */
+package org.yaml.snakeyaml.representer;
+
+import junit.framework.TestCase;
+
+import org.yaml.snakeyaml.Yaml;
+
+public class RepresentFieldTest extends TestCase {
+
+ public void testRepresent1() {
+ Yaml yaml = new Yaml();
+ WrongJavaBean bean = new WrongJavaBean();
+ bean.packageField = "Value";// the field is present
+ bean.publicField = "Michael Jackson";
+ WrongJavaBean.staticField = "Another value";
+ String output = yaml.dump(bean);
+ assertEquals(
+ "!!org.yaml.snakeyaml.representer.WrongJavaBean {publicField: Michael Jackson}\n",
+ output);
+ }
+
+ public void testWrongNotPublicField() {
+ Yaml yaml = new Yaml();
+ WrongJavaBean bean = new WrongJavaBean();
+ bean.packageField = "Value";// the field is present
+ try {
+ yaml.load("!!org.yaml.snakeyaml.representer.WrongJavaBean {packageField: Gnome}\n");
+ fail("Only public fields can be used.");
+ } catch (Exception e) {
+ assertEquals(
+ "null; Can't construct a java object for tag:yaml.org,2002:org.yaml.snakeyaml.representer.WrongJavaBean; exception=org.yaml.snakeyaml.error.YAMLException: Unable to find property 'packageField' on class: org.yaml.snakeyaml.representer.WrongJavaBean",
+ e.getMessage());
+ }
+ }
+
+ public void testStaticField() {
+ Yaml yaml = new Yaml();
+ WrongJavaBean.staticField = "Value";// the field is present
+ try {
+ yaml.load("!!org.yaml.snakeyaml.representer.WrongJavaBean {staticField: Gnome}\n");
+ fail("Static fields cannot be used.");
+ } catch (Exception e) {
+ assertEquals(
+ "null; Can't construct a java object for tag:yaml.org,2002:org.yaml.snakeyaml.representer.WrongJavaBean; exception=org.yaml.snakeyaml.error.YAMLException: Unable to find property 'staticField' on class: org.yaml.snakeyaml.representer.WrongJavaBean",
+ e.getMessage());
+ }
+ }
+}
diff --git a/src/test/java/org/yaml/snakeyaml/representer/WrongJavaBean.java b/src/test/java/org/yaml/snakeyaml/representer/WrongJavaBean.java
new file mode 100644
index 0000000..b80a009
--- /dev/null
+++ b/src/test/java/org/yaml/snakeyaml/representer/WrongJavaBean.java
@@ -0,0 +1,20 @@
+/*
+ * See LICENSE file in distribution for copyright and licensing information.
+ */
+package org.yaml.snakeyaml.representer;
+
+public class WrongJavaBean {
+ String packageField;
+ static String staticField;
+ public transient String dynamo;
+ public String publicField;
+ private int privateValue;
+
+ public WrongJavaBean() {
+ method();
+ }
+
+ private void method() {
+ privateValue++;
+ }
+}