2323import com .google .testing .junit .testparameterinjector .TestParameterInjector ;
2424import dev .cel .common .ast .CelExpr .ExprKind .Kind ;
2525import dev .cel .common .ast .CelMutableExpr .CelMutableCall ;
26+ import dev .cel .common .ast .CelMutableExpr .CelMutableComprehension ;
2627import dev .cel .common .ast .CelMutableExpr .CelMutableCreateList ;
2728import dev .cel .common .ast .CelMutableExpr .CelMutableCreateMap ;
2829import dev .cel .common .ast .CelMutableExpr .CelMutableCreateStruct ;
@@ -449,6 +450,73 @@ public void mutableCreateMapEntry_setters() {
449450 true ));
450451 }
451452
453+ @ Test
454+ public void ofComprehension_withId () {
455+ CelMutableExpr mutableExpr =
456+ CelMutableExpr .ofComprehension (
457+ 10L ,
458+ CelMutableComprehension .create (
459+ "iterVar" ,
460+ CelMutableExpr .ofCreateList (
461+ CelMutableCreateList .create (
462+ CelMutableExpr .ofConstant (CelConstant .ofValue (true )))),
463+ "accuVar" ,
464+ CelMutableExpr .ofConstant (CelConstant .ofValue (true )),
465+ CelMutableExpr .ofConstant (CelConstant .ofValue (true )),
466+ CelMutableExpr .ofConstant (CelConstant .ofValue (true )),
467+ CelMutableExpr .ofIdent ("__result__" )));
468+
469+ assertThat (mutableExpr .id ()).isEqualTo (10L );
470+ assertThat (mutableExpr .comprehension ())
471+ .isEqualTo (
472+ CelMutableComprehension .create (
473+ "iterVar" ,
474+ CelMutableExpr .ofCreateList (
475+ CelMutableCreateList .create (
476+ CelMutableExpr .ofConstant (CelConstant .ofValue (true )))),
477+ "accuVar" ,
478+ CelMutableExpr .ofConstant (CelConstant .ofValue (true )),
479+ CelMutableExpr .ofConstant (CelConstant .ofValue (true )),
480+ CelMutableExpr .ofConstant (CelConstant .ofValue (true )),
481+ CelMutableExpr .ofIdent ("__result__" )));
482+ }
483+
484+ @ Test
485+ public void mutableComprehension_setters () {
486+ CelMutableComprehension mutableComprehension =
487+ CelMutableComprehension .create (
488+ "iterVar" ,
489+ CelMutableExpr .ofNotSet (),
490+ "accuVar" ,
491+ CelMutableExpr .ofNotSet (),
492+ CelMutableExpr .ofNotSet (),
493+ CelMutableExpr .ofNotSet (),
494+ CelMutableExpr .ofNotSet ());
495+
496+ mutableComprehension .setIterVar ("iterVar2" );
497+ mutableComprehension .setAccuVar ("accuVar2" );
498+ mutableComprehension .setIterRange (
499+ CelMutableExpr .ofCreateList (
500+ CelMutableCreateList .create (CelMutableExpr .ofConstant (CelConstant .ofValue (true )))));
501+ mutableComprehension .setAccuInit (CelMutableExpr .ofConstant (CelConstant .ofValue (true )));
502+ mutableComprehension .setLoopCondition (CelMutableExpr .ofConstant (CelConstant .ofValue (true )));
503+ mutableComprehension .setLoopStep (CelMutableExpr .ofConstant (CelConstant .ofValue (true )));
504+ mutableComprehension .setResult (CelMutableExpr .ofIdent ("__result__" ));
505+
506+ assertThat (mutableComprehension )
507+ .isEqualTo (
508+ CelMutableComprehension .create (
509+ "iterVar2" ,
510+ CelMutableExpr .ofCreateList (
511+ CelMutableCreateList .create (
512+ CelMutableExpr .ofConstant (CelConstant .ofValue (true )))),
513+ "accuVar2" ,
514+ CelMutableExpr .ofConstant (CelConstant .ofValue (true )),
515+ CelMutableExpr .ofConstant (CelConstant .ofValue (true )),
516+ CelMutableExpr .ofConstant (CelConstant .ofValue (true )),
517+ CelMutableExpr .ofIdent ("__result__" )));
518+ }
519+
452520 @ Test
453521 public void equalityTest () {
454522 new EqualsTester ()
@@ -534,6 +602,42 @@ public void equalityTest() {
534602 CelMutableExpr .ofConstant (CelConstant .ofValue ("key" )),
535603 CelMutableExpr .ofConstant (CelConstant .ofValue ("value" )),
536604 /* optionalEntry= */ true ))))
605+ .addEqualityGroup (
606+ CelMutableExpr .ofComprehension (
607+ 10L ,
608+ CelMutableComprehension .create (
609+ "iterVar" ,
610+ CelMutableExpr .ofNotSet (),
611+ "accuVar" ,
612+ CelMutableExpr .ofNotSet (),
613+ CelMutableExpr .ofNotSet (),
614+ CelMutableExpr .ofNotSet (),
615+ CelMutableExpr .ofNotSet ())))
616+ .addEqualityGroup (
617+ CelMutableExpr .ofComprehension (
618+ 11L ,
619+ CelMutableComprehension .create (
620+ "iterVar" ,
621+ CelMutableExpr .ofCreateList (
622+ CelMutableCreateList .create (
623+ CelMutableExpr .ofConstant (CelConstant .ofValue (true )))),
624+ "accuVar" ,
625+ CelMutableExpr .ofConstant (CelConstant .ofValue (true )),
626+ CelMutableExpr .ofConstant (CelConstant .ofValue (true )),
627+ CelMutableExpr .ofConstant (CelConstant .ofValue (true )),
628+ CelMutableExpr .ofIdent ("__result__" ))),
629+ CelMutableExpr .ofComprehension (
630+ 11L ,
631+ CelMutableComprehension .create (
632+ "iterVar" ,
633+ CelMutableExpr .ofCreateList (
634+ CelMutableCreateList .create (
635+ CelMutableExpr .ofConstant (CelConstant .ofValue (true )))),
636+ "accuVar" ,
637+ CelMutableExpr .ofConstant (CelConstant .ofValue (true )),
638+ CelMutableExpr .ofConstant (CelConstant .ofValue (true )),
639+ CelMutableExpr .ofConstant (CelConstant .ofValue (true )),
640+ CelMutableExpr .ofIdent ("__result__" ))))
537641 .testEquals ();
538642 }
539643
@@ -549,6 +653,17 @@ private enum MutableExprKindTestCase {
549653 CelMutableExpr .ofCreateStruct (
550654 CelMutableCreateStruct .create ("message" , ImmutableList .of ()))),
551655 CREATE_MAP (CelMutableExpr .ofCreateMap (CelMutableCreateMap .create (ImmutableList .of ()))),
656+ COMPREHENSION (
657+ CelMutableExpr .ofComprehension (
658+ 10L ,
659+ CelMutableComprehension .create (
660+ "iterVar" ,
661+ CelMutableExpr .ofNotSet (),
662+ "accuVar" ,
663+ CelMutableExpr .ofNotSet (),
664+ CelMutableExpr .ofNotSet (),
665+ CelMutableExpr .ofNotSet (),
666+ CelMutableExpr .ofNotSet ()))),
552667 ;
553668
554669 private final CelMutableExpr mutableExpr ;
@@ -585,6 +700,9 @@ public void getExprValue_invalidKind_throws(@TestParameter MutableExprKindTestCa
585700 if (!testCaseKind .equals (Kind .CREATE_MAP )) {
586701 assertThrows (IllegalArgumentException .class , testCase .mutableExpr ::createMap );
587702 }
703+ if (!testCaseKind .equals (Kind .COMPREHENSION )) {
704+ assertThrows (IllegalArgumentException .class , testCase .mutableExpr ::comprehension );
705+ }
588706 }
589707
590708 @ SuppressWarnings ("Immutable" ) // Mutable by design
@@ -635,7 +753,20 @@ private enum HashCodeTestCase {
635753 CelMutableExpr .ofConstant (CelConstant .ofValue ("value" )),
636754 /* optionalEntry= */ true )))),
637755 1260717292 ),
638- ;
756+ COMPREHENSION (
757+ CelMutableExpr .ofComprehension (
758+ 10L ,
759+ CelMutableComprehension .create (
760+ "iterVar" ,
761+ CelMutableExpr .ofCreateList (
762+ CelMutableCreateList .create (
763+ CelMutableExpr .ofConstant (CelConstant .ofValue (true )))),
764+ "accuVar" ,
765+ CelMutableExpr .ofConstant (CelConstant .ofValue (true )),
766+ CelMutableExpr .ofConstant (CelConstant .ofValue (true )),
767+ CelMutableExpr .ofConstant (CelConstant .ofValue (true )),
768+ CelMutableExpr .ofIdent ("__result__" ))),
769+ -1006359408 );
639770
640771 private final CelMutableExpr mutableExpr ;
641772 private final int expectedHashCode ;
0 commit comments