@@ -2,6 +2,7 @@ package task_test
2
2
3
3
import (
4
4
"bytes"
5
+ "cmp"
5
6
"context"
6
7
"fmt"
7
8
"io"
@@ -134,8 +135,7 @@ func TestEnv(t *testing.T) {
134
135
},
135
136
}
136
137
tt .Run (t )
137
- t .Setenv ("TASK_X_ENV_PRECEDENCE" , "1" )
138
- experiments .EnvPrecedence = experiments .New ("ENV_PRECEDENCE" )
138
+ enableExperimentForTest (t , & experiments .EnvPrecedence , "1" )
139
139
ttt := fileContentTest {
140
140
Dir : "testdata/env" ,
141
141
Target : "overridden" ,
@@ -3207,6 +3207,110 @@ func TestReference(t *testing.T) {
3207
3207
}
3208
3208
}
3209
3209
3210
+ func TestVarInheritance (t * testing.T ) {
3211
+ enableExperimentForTest (t , & experiments .EnvPrecedence , "1" )
3212
+ tests := []struct {
3213
+ name string
3214
+ want string
3215
+ call string
3216
+ }{
3217
+ {
3218
+ name : "shell" ,
3219
+ want : "shell\n shell\n " ,
3220
+ },
3221
+ {
3222
+ name : "entrypoint-global-dotenv" ,
3223
+ want : "entrypoint-global-dotenv\n entrypoint-global-dotenv\n " ,
3224
+ },
3225
+ {
3226
+ name : "entrypoint-global-vars" ,
3227
+ want : "entrypoint-global-vars\n entrypoint-global-vars\n " ,
3228
+ },
3229
+ {
3230
+ // We can't send env vars to a called task, so the env var is not overridden
3231
+ name : "entrypoint-task-call-vars" ,
3232
+ want : "entrypoint-task-call-vars\n entrypoint-global-vars\n " ,
3233
+ },
3234
+ {
3235
+ // Dotenv doesn't set variables
3236
+ name : "entrypoint-task-call-dotenv" ,
3237
+ want : "entrypoint-task-call-vars\n entrypoint-task-call-dotenv\n " ,
3238
+ },
3239
+ {
3240
+ name : "entrypoint-task-call-task-vars" ,
3241
+ want : "entrypoint-task-call-task-vars\n entrypoint-task-call-task-vars\n " ,
3242
+ },
3243
+ {
3244
+ // Dotenv doesn't set variables
3245
+ name : "entrypoint-task-dotenv" ,
3246
+ want : "entrypoint-global-vars\n entrypoint-task-dotenv\n " ,
3247
+ },
3248
+ {
3249
+ name : "entrypoint-task-vars" ,
3250
+ want : "entrypoint-task-vars\n entrypoint-task-vars\n " ,
3251
+ },
3252
+ // {
3253
+ // // Dotenv not currently allowed in included taskfiles
3254
+ // name: "included-global-dotenv",
3255
+ // want: "included-global-dotenv\nincluded-global-dotenv\n",
3256
+ // },
3257
+ {
3258
+ name : "included-global-vars" ,
3259
+ want : "included-global-vars\n included-global-vars\n " ,
3260
+ call : "included" ,
3261
+ },
3262
+ {
3263
+ // We can't send env vars to a called task, so the env var is not overridden
3264
+ name : "included-task-call-vars" ,
3265
+ want : "included-task-call-vars\n included-global-vars\n " ,
3266
+ call : "included" ,
3267
+ },
3268
+ {
3269
+ // Dotenv doesn't set variables
3270
+ // Dotenv not currently allowed in included taskfiles (but doesn't error in a task)
3271
+ name : "included-task-call-dotenv" ,
3272
+ want : "included-task-call-vars\n included-global-vars\n " ,
3273
+ call : "included" ,
3274
+ },
3275
+ {
3276
+ name : "included-task-call-task-vars" ,
3277
+ want : "included-task-call-task-vars\n included-task-call-task-vars\n " ,
3278
+ call : "included" ,
3279
+ },
3280
+ {
3281
+ // Dotenv doesn't set variables
3282
+ // Somehow dotenv is working here!
3283
+ name : "included-task-dotenv" ,
3284
+ want : "included-global-vars\n included-task-dotenv\n " ,
3285
+ call : "included" ,
3286
+ },
3287
+ {
3288
+ name : "included-task-vars" ,
3289
+ want : "included-task-vars\n included-task-vars\n " ,
3290
+ call : "included" ,
3291
+ },
3292
+ }
3293
+
3294
+ for _ , test := range tests {
3295
+ t .Run (test .name , func (t * testing.T ) {
3296
+ var buff bytes.Buffer
3297
+ t .Setenv ("VAR" , "shell" )
3298
+ t .Setenv ("ENV" , "shell" )
3299
+ e := task.Executor {
3300
+ Dir : fmt .Sprintf ("testdata/var_inheritance/v3/%s" , test .name ),
3301
+ Stdout : & buff ,
3302
+ Stderr : & buff ,
3303
+ Silent : true ,
3304
+ Force : true ,
3305
+ }
3306
+ call := cmp .Or (test .call , "default" )
3307
+ require .NoError (t , e .Setup ())
3308
+ require .NoError (t , e .Run (context .Background (), & ast.Call {Task : call }))
3309
+ assert .Equal (t , test .want , buff .String ())
3310
+ })
3311
+ }
3312
+ }
3313
+
3210
3314
// enableExperimentForTest enables the experiment behind pointer e for the duration of test t and sub-tests,
3211
3315
// with the experiment being restored to its previous state when tests complete.
3212
3316
//
0 commit comments