@@ -10,8 +10,15 @@ import (
1010 "testing"
1111)
1212
13+ const moduleFixturesRoot = "testdata/modules"
14+
15+ func moduleTestEngine (t testing.TB ) * Engine {
16+ t .Helper ()
17+ return MustNewEngine (Config {ModulePaths : []string {filepath .FromSlash (moduleFixturesRoot )}})
18+ }
19+
1320func TestRequireProvidesExports (t * testing.T ) {
14- engine := MustNewEngine ( Config { ModulePaths : [] string { filepath . Join ( "testdata" , "modules" )}} )
21+ engine := moduleTestEngine ( t )
1522
1623 script , err := engine .Compile (`def run(value)
1724 helpers = require("helper")
3138}
3239
3340func TestRequireSupportsModuleAlias (t * testing.T ) {
34- engine := MustNewEngine ( Config { ModulePaths : [] string { filepath . Join ( "testdata" , "modules" )}} )
41+ engine := moduleTestEngine ( t )
3542
3643 script , err := engine .Compile (`def run(value)
3744 require("helper", as: "helpers")
5259}
5360
5461func TestRequireAliasValidation (t * testing.T ) {
55- engine := MustNewEngine ( Config { ModulePaths : [] string { filepath . Join ( "testdata" , "modules" )}} )
62+ engine := moduleTestEngine ( t )
5663
5764 cases := []struct {
5865 name string
@@ -105,7 +112,7 @@ end`,
105112}
106113
107114func TestRequireAliasRejectsConflictingGlobal (t * testing.T ) {
108- engine := MustNewEngine ( Config { ModulePaths : [] string { filepath . Join ( "testdata" , "modules" )}} )
115+ engine := moduleTestEngine ( t )
109116
110117 script , err := engine .Compile (`def helpers(value)
111118 value
@@ -126,7 +133,7 @@ end`)
126133}
127134
128135func TestRequireAliasConflictDoesNotLeakExportsWhenRescued (t * testing.T ) {
129- engine := MustNewEngine ( Config { ModulePaths : [] string { filepath . Join ( "testdata" , "modules" )}} )
136+ engine := moduleTestEngine ( t )
130137
131138 script , err := engine .Compile (`def helpers(value)
132139 value
@@ -159,7 +166,7 @@ end`)
159166}
160167
161168func TestRequirePreservesModuleLocalResolution (t * testing.T ) {
162- engine := MustNewEngine ( Config { ModulePaths : [] string { filepath . Join ( "testdata" , "modules" )}} )
169+ engine := moduleTestEngine ( t )
163170
164171 script , err := engine .Compile (`def rate()
165172 100
@@ -183,7 +190,7 @@ end`)
183190}
184191
185192func TestRequireNamespaceConflictKeepsExistingGlobalBinding (t * testing.T ) {
186- engine := MustNewEngine ( Config { ModulePaths : [] string { filepath . Join ( "testdata" , "modules" )}} )
193+ engine := moduleTestEngine ( t )
187194
188195 script , err := engine .Compile (`def double(value)
189196 value + 1
@@ -217,7 +224,7 @@ end`)
217224}
218225
219226func TestRequireNamespaceConflictKeepsFirstModuleBinding (t * testing.T ) {
220- engine := MustNewEngine ( Config { ModulePaths : [] string { filepath . Join ( "testdata" , "modules" )}} )
227+ engine := moduleTestEngine ( t )
221228
222229 script , err := engine .Compile (`def run(value)
223230 first = require("helper")
@@ -257,7 +264,7 @@ end`)
257264}
258265
259266func TestRequireMissingModule (t * testing.T ) {
260- engine := MustNewEngine ( Config { ModulePaths : [] string { filepath . Join ( "testdata" , "modules" )}} )
267+ engine := moduleTestEngine ( t )
261268
262269 script , err := engine .Compile (`def run()
263270 require("missing")
@@ -274,7 +281,7 @@ end`)
274281}
275282
276283func TestRequireCachesModules (t * testing.T ) {
277- engine := MustNewEngine ( Config { ModulePaths : [] string { filepath . Join ( "testdata" , "modules" )}} )
284+ engine := moduleTestEngine ( t )
278285
279286 script , err := engine .Compile (`def run()
280287 require("helper")
@@ -355,7 +362,7 @@ end`)
355362}
356363
357364func TestRequireRejectsAbsolutePaths (t * testing.T ) {
358- engine := MustNewEngine ( Config { ModulePaths : [] string { filepath . Join ( "testdata" , "modules" )}} )
365+ engine := moduleTestEngine ( t )
359366
360367 absPath := "/etc/passwd"
361368 if filepath .Separator == '\\' {
@@ -384,7 +391,7 @@ end`, absPath)
384391}
385392
386393func TestRequireRejectsPathTraversal (t * testing.T ) {
387- engine := MustNewEngine ( Config { ModulePaths : [] string { filepath . Join ( "testdata" , "modules" )}} )
394+ engine := moduleTestEngine ( t )
388395
389396 script , err := engine .Compile (`def run()
390397 require("nested/../../etc/passwd")
@@ -401,7 +408,7 @@ end`)
401408}
402409
403410func TestRequireRejectsBackslashPathTraversal (t * testing.T ) {
404- engine := MustNewEngine ( Config { ModulePaths : [] string { filepath . Join ( "testdata" , "modules" )}} )
411+ engine := moduleTestEngine ( t )
405412
406413 script , err := engine .Compile (`def run()
407414 require("nested\\..\\..\\etc\\passwd")
@@ -418,7 +425,7 @@ end`)
418425}
419426
420427func TestRequireNormalizesPathSeparators (t * testing.T ) {
421- engine := MustNewEngine ( Config { ModulePaths : [] string { filepath . Join ( "testdata" , "modules" )}} )
428+ engine := moduleTestEngine ( t )
422429
423430 script , err := engine .Compile (`def run(value)
424431 unix_style = require("shared/math")
@@ -442,7 +449,7 @@ end`)
442449}
443450
444451func TestRequireRelativePathRequiresModuleCaller (t * testing.T ) {
445- engine := MustNewEngine ( Config { ModulePaths : [] string { filepath . Join ( "testdata" , "modules" )}} )
452+ engine := moduleTestEngine ( t )
446453
447454 script , err := engine .Compile (`def run()
448455 require("./helper")
@@ -459,7 +466,7 @@ end`)
459466}
460467
461468func TestRequireRelativePathDoesNotLeakFromModuleIntoHostFunction (t * testing.T ) {
462- engine := MustNewEngine ( Config { ModulePaths : [] string { filepath . Join ( "testdata" , "modules" )}} )
469+ engine := moduleTestEngine ( t )
463470
464471 script , err := engine .Compile (`def host_relative()
465472 require("./helper")
@@ -481,7 +488,7 @@ end`)
481488}
482489
483490func TestRequireSupportsRelativePathsWithinModuleRoot (t * testing.T ) {
484- engine := MustNewEngine ( Config { ModulePaths : [] string { filepath . Join ( "testdata" , "modules" )}} )
491+ engine := moduleTestEngine ( t )
485492
486493 script , err := engine .Compile (`def run(value)
487494 mod = require("relative/root")
@@ -501,7 +508,7 @@ end`)
501508}
502509
503510func TestRequireRelativePathRejectsEscapingModuleRoot (t * testing.T ) {
504- engine := MustNewEngine ( Config { ModulePaths : [] string { filepath . Join ( "testdata" , "modules" )}} )
511+ engine := moduleTestEngine ( t )
505512
506513 script , err := engine .Compile (`def run()
507514 mod = require("relative/escape")
@@ -693,7 +700,7 @@ end`)
693700}
694701
695702func TestRequireRelativePathWorksInModuleDefinedBlockYieldedFromHost (t * testing.T ) {
696- engine := MustNewEngine ( Config { ModulePaths : [] string { filepath . Join ( "testdata" , "modules" )}} )
703+ engine := moduleTestEngine ( t )
697704
698705 script , err := engine .Compile (`def host_each()
699706 yield()
@@ -717,7 +724,7 @@ end`)
717724}
718725
719726func TestRequireExportsOnlyNonPrivateFunctions (t * testing.T ) {
720- engine := MustNewEngine ( Config { ModulePaths : [] string { filepath . Join ( "testdata" , "modules" )}} )
727+ engine := moduleTestEngine ( t )
721728
722729 script , err := engine .Compile (`def run(value)
723730 mod = require("private_exports")
@@ -741,7 +748,7 @@ end`)
741748}
742749
743750func TestRequireSupportsPrivateModuleExportOptOut (t * testing.T ) {
744- engine := MustNewEngine ( Config { ModulePaths : [] string { filepath . Join ( "testdata" , "modules" )}} )
751+ engine := moduleTestEngine ( t )
745752
746753 script , err := engine .Compile (`def run(value)
747754 mod = require("explicit_exports")
@@ -781,7 +788,7 @@ end`)
781788}
782789
783790func TestRequirePrivateFunctionsAreNotInjectedAsGlobals (t * testing.T ) {
784- engine := MustNewEngine ( Config { ModulePaths : [] string { filepath . Join ( "testdata" , "modules" )}} )
791+ engine := moduleTestEngine ( t )
785792
786793 script , err := engine .Compile (`def run(value)
787794 require("explicit_exports")
@@ -855,7 +862,7 @@ end`)
855862}
856863
857864func TestRequirePrivateFunctionsRemainModuleScoped (t * testing.T ) {
858- engine := MustNewEngine ( Config { ModulePaths : [] string { filepath . Join ( "testdata" , "modules" )}} )
865+ engine := moduleTestEngine ( t )
859866
860867 script , err := engine .Compile (`def run(value)
861868 require("private_exports")
@@ -873,7 +880,7 @@ end`)
873880}
874881
875882func TestRequireModuleCacheAvoidsDuplicateLoads (t * testing.T ) {
876- engine := MustNewEngine ( Config { ModulePaths : [] string { filepath . Join ( "testdata" , "modules" )}} )
883+ engine := moduleTestEngine ( t )
877884
878885 script , err := engine .Compile (`def run()
879886 require("circular_a")
@@ -894,7 +901,7 @@ end`)
894901}
895902
896903func TestRequireRuntimeModuleRecursionHitsRecursionLimit (t * testing.T ) {
897- engine := MustNewEngine ( Config { ModulePaths : [] string { filepath . Join ( "testdata" , "modules" )}} )
904+ engine := moduleTestEngine ( t )
898905
899906 script , err := engine .Compile (`def run()
900907 mod = require("circular_runtime_a")
@@ -912,7 +919,7 @@ end`)
912919}
913920
914921func TestRequireAllowsCachedModuleReuseAcrossModuleCalls (t * testing.T ) {
915- engine := MustNewEngine ( Config { ModulePaths : [] string { filepath . Join ( "testdata" , "modules" )}} )
922+ engine := moduleTestEngine ( t )
916923
917924 script , err := engine .Compile (`def run()
918925 mod = require("require_cached_a")
@@ -932,7 +939,7 @@ end`)
932939}
933940
934941func TestRequireConcurrentLoading (t * testing.T ) {
935- engine := MustNewEngine ( Config { ModulePaths : [] string { filepath . Join ( "testdata" , "modules" )}} )
942+ engine := moduleTestEngine ( t )
936943
937944 script , err := engine .Compile (`def run()
938945 require("helper")
0 commit comments