@@ -65,28 +65,35 @@ public void testBuild() {
6565 assertNotNull (query );
6666 }
6767
68- @ Test (expected = IllegalStateException .class )
69- public void testBuildTwice () {
70- QueryBuilder <TestEntity > queryBuilder = box .query ();
71- for (int i = 0 ; i < 2 ; i ++) {
72- // calling any builder method after build should fail
73- // note: not calling all variants for different types
74- queryBuilder .isNull (TestEntity_ .simpleString );
75- queryBuilder .and ();
76- queryBuilder .notNull (TestEntity_ .simpleString );
77- queryBuilder .or ();
78- queryBuilder .equal (TestEntity_ .simpleBoolean , true );
79- queryBuilder .notEqual (TestEntity_ .simpleBoolean , true );
80- queryBuilder .less (TestEntity_ .simpleInt , 42 );
81- queryBuilder .greater (TestEntity_ .simpleInt , 42 );
82- queryBuilder .between (TestEntity_ .simpleInt , 42 , 43 );
83- queryBuilder .in (TestEntity_ .simpleInt , new int []{42 });
84- queryBuilder .notIn (TestEntity_ .simpleInt , new int []{42 });
85- queryBuilder .contains (TestEntity_ .simpleString , "42" , StringOrder .CASE_INSENSITIVE );
86- queryBuilder .startsWith (TestEntity_ .simpleString , "42" , StringOrder .CASE_SENSITIVE );
87- queryBuilder .order (TestEntity_ .simpleInt );
88- queryBuilder .build ().find ();
89- }
68+ @ Test
69+ public void useAfterBuild_fails () {
70+ QueryBuilder <TestEntity > builder = box .query ();
71+ Query <TestEntity > query = builder .build ();
72+
73+ // Calling any builder method after build should fail.
74+ // note: not calling all variants for different types.
75+ assertThrowsBuilderClosed (() -> builder .isNull (TestEntity_ .simpleString ));
76+ assertThrowsBuilderClosed (builder ::and );
77+ assertThrowsBuilderClosed (() -> builder .notNull (TestEntity_ .simpleString ));
78+ assertThrowsBuilderClosed (builder ::or );
79+ assertThrowsBuilderClosed (() -> builder .equal (TestEntity_ .simpleBoolean , true ));
80+ assertThrowsBuilderClosed (() -> builder .notEqual (TestEntity_ .simpleBoolean , true ));
81+ assertThrowsBuilderClosed (() -> builder .less (TestEntity_ .simpleInt , 42 ));
82+ assertThrowsBuilderClosed (() -> builder .greater (TestEntity_ .simpleInt , 42 ));
83+ assertThrowsBuilderClosed (() -> builder .between (TestEntity_ .simpleInt , 42 , 43 ));
84+ assertThrowsBuilderClosed (() -> builder .in (TestEntity_ .simpleInt , new int []{42 }));
85+ assertThrowsBuilderClosed (() -> builder .notIn (TestEntity_ .simpleInt , new int []{42 }));
86+ assertThrowsBuilderClosed (() -> builder .contains (TestEntity_ .simpleString , "42" , StringOrder .CASE_INSENSITIVE ));
87+ assertThrowsBuilderClosed (() -> builder .startsWith (TestEntity_ .simpleString , "42" , StringOrder .CASE_SENSITIVE ));
88+ assertThrowsBuilderClosed (() -> builder .order (TestEntity_ .simpleInt ));
89+ assertThrowsBuilderClosed (builder ::build );
90+
91+ query .close ();
92+ }
93+
94+ private void assertThrowsBuilderClosed (ThrowingRunnable runnable ) {
95+ IllegalStateException ex = assertThrows (IllegalStateException .class , runnable );
96+ assertEquals ("This QueryBuilder has already been closed. Please use a new instance." , ex .getMessage ());
9097 }
9198
9299 @ Test
0 commit comments