@@ -2,6 +2,7 @@ package sjsonnet
22
33import utest ._
44import TestUtils .{eval , evalErr }
5+
56object EvaluatorTests extends TestSuite {
67 def allTests (useNewEvaluator : Boolean ): Tests = Tests {
78 test(" arithmetic" ) {
@@ -763,6 +764,90 @@ object EvaluatorTests extends TestSuite {
763764 )
764765 }
765766 }
767+ test(" assertInheritanceWithBrokenAssertions" ) {
768+ test - assert(
769+ evalErr(
770+ """ { } + {assert false}""" ,
771+ useNewEvaluator = useNewEvaluator,
772+ brokenAssertionLogic = true
773+ ).contains(
774+ " sjsonnet.Error: Assertion failed"
775+ )
776+ )
777+ test - assert(
778+ evalErr(
779+ """ {assert false} + {}""" ,
780+ useNewEvaluator = useNewEvaluator,
781+ brokenAssertionLogic = true
782+ ).contains(
783+ " sjsonnet.Error: Assertion failed"
784+ )
785+ )
786+ test - assert(
787+ evalErr(
788+ """ {assert false} + {} + {}""" ,
789+ useNewEvaluator = useNewEvaluator,
790+ brokenAssertionLogic = true
791+ ).contains(
792+ " sjsonnet.Error: Assertion failed"
793+ )
794+ )
795+ test - assert(
796+ evalErr(
797+ """ {} + {assert false} + {}""" ,
798+ useNewEvaluator = useNewEvaluator,
799+ brokenAssertionLogic = true
800+ ).contains(
801+ " sjsonnet.Error: Assertion failed"
802+ )
803+ )
804+ test - assert(
805+ evalErr(
806+ """ {} + {} + {assert false}""" ,
807+ useNewEvaluator = useNewEvaluator,
808+ brokenAssertionLogic = true
809+ ).contains(
810+ " sjsonnet.Error: Assertion failed"
811+ )
812+ )
813+ test - assert(
814+ evalErr(
815+ " ({assert false} + {f(x): x}).f(1)" ,
816+ useNewEvaluator = useNewEvaluator,
817+ brokenAssertionLogic = true
818+ ).contains(
819+ " sjsonnet.Error: Assertion failed"
820+ )
821+ )
822+ test - {
823+ val problematicStrictInheritedAssertionsSnippet =
824+ """ local template = { assert self.flag };
825+ |{ a: template { flag: true, }, b: template { flag: false, } }
826+ |""" .stripMargin
827+ assert(
828+ evalErr(
829+ problematicStrictInheritedAssertionsSnippet,
830+ useNewEvaluator = useNewEvaluator,
831+ brokenAssertionLogic = true
832+ ).contains(" sjsonnet.Error: Assertion failed" )
833+ )
834+ }
835+
836+ // Behavior is different from now on.
837+ test {
838+ eval(
839+ " {assert false} + {assert true}" ,
840+ useNewEvaluator = useNewEvaluator,
841+ brokenAssertionLogic = true
842+ ) ==> ujson.Obj ()
843+ eval(
844+ " ({assert false} + {x: 2}).x" ,
845+ useNewEvaluator = useNewEvaluator,
846+ brokenAssertionLogic = true
847+ ) ==> ujson.Num (2 )
848+ }
849+ }
850+
766851 }
767852 def tests = allTests(false ).prefix(" Evaluator" ) ++ allTests(true ).prefix(" NewEvaluator" )
768853}
0 commit comments