@@ -1383,4 +1383,36 @@ public void consumeTerms(Query query, Term... terms) {
1383
1383
}
1384
1384
});
1385
1385
}
1386
+
1387
+ public void testClauseSetsImmutability () throws Exception {
1388
+ Term a = new Term ("f" , "a" );
1389
+ Term b = new Term ("f" , "b" );
1390
+ Term c = new Term ("f" , "c" );
1391
+ Term d = new Term ("f" , "d" );
1392
+ BooleanQuery .Builder bqBuilder = new BooleanQuery .Builder ();
1393
+ bqBuilder .add (new TermQuery (a ), Occur .SHOULD );
1394
+ bqBuilder .add (new TermQuery (a ), Occur .SHOULD );
1395
+ bqBuilder .add (new TermQuery (b ), Occur .MUST );
1396
+ bqBuilder .add (new TermQuery (b ), Occur .MUST );
1397
+ bqBuilder .add (new TermQuery (c ), Occur .FILTER );
1398
+ bqBuilder .add (new TermQuery (c ), Occur .FILTER );
1399
+ bqBuilder .add (new TermQuery (d ), Occur .MUST_NOT );
1400
+ bqBuilder .add (new TermQuery (d ), Occur .MUST_NOT );
1401
+ BooleanQuery bq = bqBuilder .build ();
1402
+ // should and must are not dedupliacated
1403
+ assertEquals (2 , bq .getClauses (Occur .SHOULD ).size ());
1404
+ assertEquals (2 , bq .getClauses (Occur .MUST ).size ());
1405
+ // filter and must not are deduplicated
1406
+ assertEquals (1 , bq .getClauses (Occur .FILTER ).size ());
1407
+ assertEquals (1 , bq .getClauses (Occur .MUST_NOT ).size ());
1408
+ // check immutability
1409
+ for (var occur : Occur .values ()) {
1410
+ assertThrows (
1411
+ UnsupportedOperationException .class ,
1412
+ () -> bq .getClauses (occur ).add (new MatchNoDocsQuery ()));
1413
+ }
1414
+ assertThrows (
1415
+ UnsupportedOperationException .class ,
1416
+ () -> bq .clauses ().add (new BooleanClause (new MatchNoDocsQuery (), Occur .SHOULD )));
1417
+ }
1386
1418
}
0 commit comments