@@ -1610,7 +1610,50 @@ public void testLongSettingBounds() {
1610
1610
public void testRecordSetting () {
1611
1611
record TestSetting (int intSetting ) {}
1612
1612
Setting <TestSetting > setting = Setting .recordSetting ("record.setting" , TestSetting .class , MethodHandles .lookup (), List .of ());
1613
- assertEquals (new TestSetting (123 ), setting .get (Settings .builder ().put ("record.setting.int_setting" , 123 ).build ()));
1613
+ Settings settings123 = Settings .builder ().put ("record.setting.int_setting" , 123 ).build ();
1614
+ Settings settings456 = Settings .builder ().put ("record.setting.int_setting" , 456 ).build ();
1615
+
1616
+ assertEquals (new TestSetting (123 ), setting .get (settings123 ));
1614
1617
assertThrows (IllegalStateException .class , () -> setting .get (Settings .EMPTY ));
1618
+
1619
+ var watcher = new AtomicReference <TestSetting >(null );
1620
+ var updater = setting .newUpdater (watcher ::set , logger );
1621
+ assertNull ("Creating an updater does not call set" , watcher .get ());
1622
+ updater .apply (settings456 , settings123 );
1623
+ assertEquals ("Updater called when value changed" , new TestSetting (456 ), watcher .get ());
1624
+ assertThrows ("Throws when there's no default" , IllegalStateException .class , ()->updater .apply (Settings .EMPTY , settings456 ));
1625
+
1626
+ watcher .set (null );
1627
+ updater .apply (settings123 , settings123 );
1628
+ assertNull ("Updater NOT called when value unchanged" , watcher .get ());
1629
+ updater .apply (settings456 , settings456 );
1630
+ assertNull ("Updater again not called when value unchanged" , watcher .get ());
1631
+ }
1632
+
1633
+ public void testRecordWithDefaults () {
1634
+ record TestSetting (int i1 , int i2 ) {}
1635
+ Setting <Integer > i1Setting = Setting .intSetting ("record.setting.i1" , -1 );
1636
+ Setting <Integer > i2Setting = Setting .intSetting ("record.setting.i2" , -2 );
1637
+ Setting <TestSetting > setting = Setting .recordSetting ("record.setting" , TestSetting .class , MethodHandles .lookup (), List .of (i1Setting , i2Setting ));
1638
+ Settings settings123 = Settings .builder ().put ("record.setting.i1" , 123 ).build ();
1639
+
1640
+ assertEquals (new TestSetting (123 , 456 ), setting .get (Settings .builder ().put ("record.setting.i1" , 123 ).put ("record.setting.i2" , 456 ).build ()));
1641
+ assertEquals (new TestSetting (-1 , 456 ), setting .get (Settings .builder ().put ("record.setting.i2" , 456 ).build ()));
1642
+ assertEquals (new TestSetting (-1 , -2 ), setting .get (Settings .EMPTY ));
1643
+
1644
+ var watcher = new AtomicReference <TestSetting >(null );
1645
+ var updater = setting .newUpdater (watcher ::set , logger );
1646
+ updater .apply (settings123 , Settings .EMPTY );
1647
+ assertEquals (new TestSetting (123 , -2 ), watcher .get ());
1648
+ updater .apply (Settings .EMPTY , settings123 );
1649
+ assertEquals (new TestSetting (-1 , -2 ), watcher .get ());
1650
+
1651
+ Settings explicitDefaults = Settings .builder ().put ("record.setting.i1" , -1 ).put ("record.setting.i2" , -2 ).build ();
1652
+ watcher .set (null );
1653
+ updater .apply (Settings .EMPTY , explicitDefaults );
1654
+ assertNull ("Updater NOT called when value deleted from the default" , watcher .get ());
1655
+ updater .apply (explicitDefaults , Settings .EMPTY );
1656
+ assertNull ("Updater NOT called when value 'changed' to the default from nothing" , watcher .get ());
1615
1657
}
1658
+
1616
1659
}
0 commit comments