Skip to content

Commit 897ec34

Browse files
committed
fix propertyChange when oldValue is null and newValue is not null
1 parent 56898e8 commit 897ec34

File tree

3 files changed

+124
-20
lines changed

3 files changed

+124
-20
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
<groupId>com.github.leonardofel</groupId>
55
<artifactId>json-java-put-null-fix</artifactId>
6-
<version>3.0.39.unsafe</version>
6+
<version>3.0.40.unsafe</version>
77
<packaging>jar</packaging>
88

99
<name>JSON in Java WITH WORKING .put(null)</name>

src/main/java/org/json/JSONObject.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1932,7 +1932,7 @@ private JSONObject updateOrRemove(JSONObject jo, boolean remove) throws JSONExce
19321932
if (oldValue == null && newValue == null) {
19331933
this.propertyChangeSupport.firePropertyChange(key, JSONObject.NULL, newValue);
19341934
} else {
1935-
this.propertyChangeSupport.firePropertyChange(key, JSONObject.NULL, newValue);
1935+
this.propertyChangeSupport.firePropertyChange(key, oldValue, newValue);
19361936
}
19371937
});
19381938

src/test/java/org/json/junit/JSONTest.java

Lines changed: 122 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import static org.junit.Assert.assertEquals;
44
import static org.junit.Assert.assertNotEquals;
5-
import static org.junit.Assert.assertNotNull;
65
import static org.junit.Assert.assertNull;
76
import static org.junit.Assert.assertThrows;
87
import static org.junit.Assert.assertTrue;
@@ -523,11 +522,9 @@ public void updateListener2Test() {
523522
.put("nullAfter", null)
524523
.put("stringKey", "hello world!")
525524
.put("escapeStringKey", "h\be\tllo w\u1234orld!")
526-
.put("intKey", Long.valueOf(42));
525+
.put("intKey", 42);
527526
//.put("doubleKey", Double.valueOf(-23.45e67)); PROBLEM WITH DOUBLE CONVERTING TO BIGDECIMAL AFTER JSONOBJECT.TOSTRING
528527

529-
final JSONObject jsonObject3 = new JSONObject(jsonObject2.toString());
530-
531528
final JSONObject oldJsonObject2 = new JSONObject(jsonObject2.toString());
532529

533530
jsonObject1.addUpdateListenerGlobal(evt -> {
@@ -540,34 +537,81 @@ public void updateListener2Test() {
540537
});
541538

542539
jsonObject1.addUpdateListener("trueKey", evt -> {
543-
assertNull(evt.getOldValue());
544-
assertTrue("expected \"trueKey\":true", Boolean.TRUE.equals(evt.getNewValue()));
540+
assertEquals(Boolean.valueOf(true), evt.getOldValue());
541+
assertNull(evt.getNewValue());
545542
});
546543
jsonObject1.addUpdateListener("falseKey", evt -> {
547-
assertNull(evt.getOldValue());
548-
assertTrue("expected \"falseKey\":false", Boolean.FALSE.equals(evt.getNewValue()));
544+
assertEquals(Boolean.valueOf(false), evt.getOldValue());
545+
assertNull(evt.getNewValue());
549546
});
550547
jsonObject1.addUpdateListener("stringKey", evt -> {
551-
assertNotNull(evt.getOldValue());
552-
assertTrue("expected \"stringKey\":\"hello world!\"", "hello world!".equals(evt.getNewValue()));
548+
assertEquals("CHANGE ME!!!", evt.getOldValue());
549+
assertEquals("hello world!", evt.getNewValue());
553550
});
554551
jsonObject1.addUpdateListener("nullKey", evt -> {
555-
fail("They are the same");
552+
assertNull(evt.getOldValue());
553+
assertNull(null, evt.getNewValue());
554+
});
555+
jsonObject1.addUpdateListener("nullBefore", evt -> {
556+
assertNull(evt.getOldValue());
557+
assertEquals("null", evt.getNewValue());
558+
});
559+
jsonObject1.addUpdateListener("nullAfter", evt -> {
560+
assertEquals("null", evt.getOldValue());
561+
assertEquals(null, evt.getNewValue());
556562
});
557563
jsonObject1.addUpdateListener("escapeStringKey", evt -> {
558-
assertNotNull(evt.getOldValue());
559-
assertTrue("expected \"escapeStringKey\":\"h\be\tllo w\u1234orld!\"", "h\be\tllo w\u1234orld!".equals(evt.getNewValue()));
564+
assertNull(evt.getOldValue());
565+
assertEquals("h\be\tllo w\u1234orld!", evt.getNewValue());
560566
});
561567
jsonObject1.addUpdateListener("intKey", evt -> {
562-
assertNotNull(evt.getOldValue());
563-
assertTrue("expected \"intKey\":42", Long.valueOf("42").equals(evt.getNewValue()));
568+
assertNull(evt.getOldValue());
569+
assertEquals(42, evt.getNewValue());
564570
});
565571

566572
assertEquals(jsonObject1.toString(), oldJsonObject1.toString());
567-
assertEquals(jsonObject2.toString(), oldJsonObject2.toString());
568573

569574
jsonObject1.update(jsonObject2);
570-
jsonObject3.updateOrRemove(jsonObject2);
575+
576+
assertNotEquals(jsonObject1.toString(), oldJsonObject1.toString());
577+
assertEquals(jsonObject2.toString(), oldJsonObject2.toString());
578+
579+
oldJsonObject1.addUpdateListener("trueKey", evt -> {
580+
assertEquals(Boolean.valueOf(true), evt.getOldValue());
581+
assertNull(evt.getNewValue());
582+
});
583+
oldJsonObject1.addUpdateListener("falseKey", evt -> {
584+
assertEquals(Boolean.valueOf(false), evt.getOldValue());
585+
assertNull(evt.getNewValue());
586+
});
587+
oldJsonObject1.addUpdateListener("stringKey", evt -> {
588+
assertEquals("CHANGE ME!!!", evt.getOldValue());
589+
assertEquals("hello world!", evt.getNewValue());
590+
});
591+
oldJsonObject1.addUpdateListener("nullKey", evt -> {
592+
assertNull(evt.getOldValue());
593+
assertNull(null, evt.getNewValue());
594+
});
595+
oldJsonObject1.addUpdateListener("nullBefore", evt -> {
596+
assertNull(evt.getOldValue());
597+
assertEquals("null", evt.getNewValue());
598+
});
599+
oldJsonObject1.addUpdateListener("nullAfter", evt -> {
600+
assertEquals("null", evt.getOldValue());
601+
assertEquals(null, evt.getNewValue());
602+
});
603+
oldJsonObject1.addUpdateListener("escapeStringKey", evt -> {
604+
assertNull(evt.getOldValue());
605+
assertEquals("h\be\tllo w\u1234orld!", evt.getNewValue());
606+
});
607+
oldJsonObject1.addUpdateListener("intKey", evt -> {
608+
assertNull(evt.getOldValue());
609+
assertEquals(42, evt.getNewValue());
610+
});
611+
612+
assertEquals(jsonObject2.toString(), oldJsonObject2.toString());
613+
614+
oldJsonObject1.updateOrRemove(oldJsonObject2);
571615

572616
assertNotEquals(jsonObject1.toString(), oldJsonObject1.toString());
573617
assertEquals(jsonObject2.toString(), oldJsonObject2.toString());
@@ -626,7 +670,7 @@ public void updateOrRemoveDstEmptyTest() {
626670
}
627671

628672
@Test
629-
public void updateOrRemoveAlltEmptyTest() {
673+
public void updateOrRemoveAllEmptyTest() {
630674
try {
631675
final JSONObject jsonObject1 = new JSONObject();
632676
final JSONObject jsonObject2 = new JSONObject();
@@ -646,4 +690,64 @@ public void updateOrRemoveAlltEmptyTest() {
646690
fail(ex.getMessage());
647691
}
648692
}
693+
694+
@Test
695+
public void updateOrRemoveSrcTest() {
696+
try {
697+
final JSONObject jsonObject1 = new JSONObject()
698+
.put("stringKey", "hello world!");
699+
final JSONObject jsonObject2 = new JSONObject();
700+
701+
jsonObject1.addUpdateListenerGlobal(evt -> {
702+
final Object oldValue = evt.getOldValue();
703+
final Object newValue = evt.getNewValue();
704+
705+
assertEquals("hello world!", oldValue);
706+
assertNull(newValue);
707+
});
708+
709+
jsonObject1.addUpdateListener("stringKey", evt -> {
710+
final Object oldValue = evt.getOldValue();
711+
final Object newValue = evt.getNewValue();
712+
713+
assertEquals("hello world!", oldValue);
714+
assertNull(newValue);
715+
});
716+
717+
jsonObject1.updateOrRemove(jsonObject2);
718+
} catch (Exception ex) {
719+
ex.printStackTrace();
720+
fail(ex.getMessage());
721+
}
722+
}
723+
724+
@Test
725+
public void updateOrRemoveDstTest() {
726+
try {
727+
final JSONObject jsonObject1 = new JSONObject();
728+
final JSONObject jsonObject2 = new JSONObject()
729+
.put("stringKey", "hello world!");
730+
731+
jsonObject1.addUpdateListenerGlobal(evt -> {
732+
final Object oldValue = evt.getOldValue();
733+
final Object newValue = evt.getNewValue();
734+
735+
assertNull(oldValue);
736+
assertEquals("hello world!", newValue);
737+
});
738+
739+
jsonObject1.addUpdateListener("stringKey", evt -> {
740+
final Object oldValue = evt.getOldValue();
741+
final Object newValue = evt.getNewValue();
742+
743+
assertNull(oldValue);
744+
assertEquals("hello world!", newValue);
745+
});
746+
747+
jsonObject1.updateOrRemove(jsonObject2);
748+
} catch (Exception ex) {
749+
ex.printStackTrace();
750+
fail(ex.getMessage());
751+
}
752+
}
649753
}

0 commit comments

Comments
 (0)