File tree 1 file changed +22
-0
lines changed
java/core/src/test/java/com/google/protobuf
1 file changed +22
-0
lines changed Original file line number Diff line number Diff line change 33
33
import static com .google .common .truth .Truth .assertThat ;
34
34
35
35
import protobuf_unittest .Engine ;
36
+ import protobuf_unittest .TimingBelt ;
36
37
import protobuf_unittest .Vehicle ;
37
38
import protobuf_unittest .Wheel ;
38
39
import java .util .ArrayList ;
48
49
@ RunWith (JUnit4 .class )
49
50
public class NestedBuildersTest {
50
51
52
+ @ Test
53
+ public void test3LayerPropagationWithIntermediateClear () {
54
+ Vehicle .Builder vehicleBuilder = Vehicle .newBuilder ();
55
+ vehicleBuilder .getEngineBuilder ().getTimingBeltBuilder ();
56
+
57
+ // This step detaches the TimingBelt.Builder (though it leaves a SingleFieldBuilder in place)
58
+ vehicleBuilder .getEngineBuilder ().clear ();
59
+
60
+ // These steps build the middle and top level messages, it used to leave the vestigial
61
+ // TimingBelt.Builder in a state where further changes didn't propagate anymore
62
+ Object unused = vehicleBuilder .getEngineBuilder ().build ();
63
+ unused = vehicleBuilder .build ();
64
+
65
+ TimingBelt expected = TimingBelt .newBuilder ().setNumberOfTeeth (124 ).build ();
66
+ vehicleBuilder .getEngineBuilder ().setTimingBelt (expected );
67
+ // Testing that b/254158939 is fixed. It used to be that the setTimingBelt call above didn't
68
+ // propagate a change notification and the call below would return a stale version of the timing
69
+ // belt.
70
+ assertThat (vehicleBuilder .getEngine ().getTimingBelt ()).isEqualTo (expected );
71
+ }
72
+
51
73
@ Test
52
74
public void testMessagesAndBuilders () {
53
75
Vehicle .Builder vehicleBuilder = Vehicle .newBuilder ();
You can’t perform that action at this time.
0 commit comments