@@ -307,9 +307,102 @@ object MainTests extends TestSuite {
307307 |- 2""" .stripMargin
308308 assert((res, out, err) == ((0 , expectedYaml, " " )))
309309 }
310+
311+ test(" jsonnetPath" ) {
312+ // Create temp directories with library files to test JSONNET_PATH resolution
313+ val libDir = os.temp.dir()
314+ os.write(libDir / " mylib.libsonnet" , """ { x: 42 }""" )
315+
316+ val mainFile = os.temp(suffix = " .jsonnet" )
317+ os.write.over(mainFile, """ local lib = import 'mylib.libsonnet'; lib.x""" )
318+
319+ // Without JSONNET_PATH or -J, the import should fail
320+ val (res1, _, err1) = runMain(mainFile)
321+ assert(res1 == 1 )
322+ assert(err1.contains(" Couldn't import" ))
323+
324+ // With -J pointing to the lib directory, the import should succeed
325+ val (res2, out2, _) = runMain(" -J" , libDir, mainFile)
326+ assert(res2 == 0 )
327+ assert(out2.trim == " 42" )
328+
329+ // With JSONNET_PATH pointing to the lib directory, the import should succeed
330+ val (res3, out3, _) =
331+ runMainWithEnv(jsonnetPathEnv = libDir.toString, mainFile)
332+ assert(res3 == 0 )
333+ assert(out3.trim == " 42" )
334+ }
335+
336+ test(" jsonnetPathMultipleDirs" ) {
337+ // Test that JSONNET_PATH=a:b results in left-most winning (a has priority over b)
338+ val libDirA = os.temp.dir()
339+ val libDirB = os.temp.dir()
340+
341+ // Both dirs have mylib.libsonnet but with different values
342+ os.write(libDirA / " mylib.libsonnet" , """ { x: "from_a" }""" )
343+ os.write(libDirB / " mylib.libsonnet" , """ { x: "from_b" }""" )
344+
345+ val mainFile = os.temp(suffix = " .jsonnet" )
346+ os.write.over(mainFile, """ local lib = import 'mylib.libsonnet'; lib.x""" )
347+
348+ // JSONNET_PATH=a:b → left-most (a) wins
349+ val sep = java.io.File .pathSeparator
350+ val (res, out, _) =
351+ runMainWithEnv(jsonnetPathEnv = s " $libDirA$sep$libDirB" , mainFile)
352+ assert(res == 0 )
353+ assert(out.trim == " \" from_a\" " )
354+ }
355+
356+ test(" jsonnetPathJpathPriority" ) {
357+ // -J flags should take priority over JSONNET_PATH
358+ val libDirEnv = os.temp.dir()
359+ val libDirJ = os.temp.dir()
360+
361+ os.write(libDirEnv / " mylib.libsonnet" , """ { x: "from_env" }""" )
362+ os.write(libDirJ / " mylib.libsonnet" , """ { x: "from_jflag" }""" )
363+
364+ val mainFile = os.temp(suffix = " .jsonnet" )
365+ os.write.over(mainFile, """ local lib = import 'mylib.libsonnet'; lib.x""" )
366+
367+ // -J flag should win over JSONNET_PATH
368+ val (res, out, _) =
369+ runMainWithEnv(jsonnetPathEnv = libDirEnv.toString, " -J" , libDirJ, mainFile)
370+ assert(res == 0 )
371+ assert(out.trim == " \" from_jflag\" " )
372+ }
373+
374+ test(" jsonnetPathReverseJpathsPriority" ) {
375+ // With --reverse-jpaths-priority, rightmost -J wins, but -J still beats JSONNET_PATH
376+ val libDirEnv = os.temp.dir()
377+ val libDirC = os.temp.dir()
378+ val libDirD = os.temp.dir()
379+
380+ os.write(libDirEnv / " mylib.libsonnet" , """ { x: "from_env" }""" )
381+ os.write(libDirC / " mylib.libsonnet" , """ { x: "from_c" }""" )
382+ os.write(libDirD / " mylib.libsonnet" , """ { x: "from_d" }""" )
383+
384+ val mainFile = os.temp(suffix = " .jsonnet" )
385+ os.write.over(mainFile, """ local lib = import 'mylib.libsonnet'; lib.x""" )
386+
387+ // With --reverse-jpaths-priority, -J d (rightmost) should win over -J c and JSONNET_PATH
388+ val (res, out, _) = runMainWithEnv(
389+ jsonnetPathEnv = libDirEnv.toString,
390+ " --reverse-jpaths-priority" ,
391+ " -J" ,
392+ libDirC,
393+ " -J" ,
394+ libDirD,
395+ mainFile
396+ )
397+ assert(res == 0 )
398+ assert(out.trim == " \" from_d\" " )
399+ }
310400 }
311401
312- def runMain (args : os.Shellable * ): (Int , String , String ) = {
402+ def runMain (args : os.Shellable * ): (Int , String , String ) =
403+ runMainWithEnv(jsonnetPathEnv = " " , args* )
404+
405+ def runMainWithEnv (jsonnetPathEnv : String , args : os.Shellable * ): (Int , String , String ) = {
313406 val err = new ByteArrayOutputStream ()
314407 val perr = new PrintStream (err, true , " UTF-8" )
315408 val out = new ByteArrayOutputStream ()
@@ -321,7 +414,8 @@ object MainTests extends TestSuite {
321414 pout,
322415 perr,
323416 workspaceRoot,
324- None
417+ None ,
418+ jsonnetPathEnv = Some (jsonnetPathEnv)
325419 )
326420 (res, new String (out.toByteArray, " UTF-8" ), new String (err.toByteArray, " UTF-8" ))
327421 }
0 commit comments