diff --git a/docs/api/05-language-reference.md b/docs/api/05-language-reference.md index f3240ad485e..f280f6fa600 100644 --- a/docs/api/05-language-reference.md +++ b/docs/api/05-language-reference.md @@ -593,6 +593,7 @@ the following properties (given an example intrinsic `@x`): | `@assert()` | checks a condition and _throws_ if evaluated to false | | `@filename` | absolute path of the source file | | `@dirname` | absolute path of the source file's directory | +| `@target` | a string identifying the current target platform | | `@app` | the root of the construct tree | | `@unsafeCast()` | cast a value into a different type | | `@nodeof()` | obtain the [tree node](/docs/concepts/application-tree) of a preflight object | diff --git a/docs/contributing/998-archived/01-compile-targets.md b/docs/contributing/998-archived/01-compile-targets.md index 8bac3608889..9ce21c51ff4 100644 --- a/docs/contributing/998-archived/01-compile-targets.md +++ b/docs/contributing/998-archived/01-compile-targets.md @@ -74,7 +74,7 @@ new cloud.Function(inflight ()=> { // push a message to queue queue.push("m"); // sleep according to target - if util.env("WING_TARGET") == "sim" { + if @target == "sim" { log("Running on Simulator, sleeping for 1s"); util.sleep(1s); } else { @@ -85,7 +85,7 @@ new cloud.Function(inflight ()=> { }); ``` -In this example, we want to sleep briefly for the Simulator target and for 30 seconds for cloud targets, this is achieved using the `WING_TARGET` environment variable. +In this example, we want to sleep briefly for the simulator target and for 30 seconds for cloud targets, this is achieved using the `@target` intrinsic function. ## Compiler plugins diff --git a/docs/docs/03-platforms/01-understanding-platforms.md b/docs/docs/03-platforms/01-understanding-platforms.md index 52b5c7db29e..a8ae8638259 100644 --- a/docs/docs/03-platforms/01-understanding-platforms.md +++ b/docs/docs/03-platforms/01-understanding-platforms.md @@ -121,7 +121,7 @@ vpc_api_gateway = true There might be times when you need to write code that is specific to a particular platform target. For example, you may want to activate a verbose logging service only when testing locally to save on cloud log storage costs. -With the Wing `util` library, you can access environment variables. The `WING_TARGET` environment variable contains the current platform target as it's value, which you can use to conditionally run target-specific code. See the example below: +The `@target` intrinsic returns the current platform target as a string value, which you can use to conditionally run target-specific code. See the example below: ```js playground example bring cloud; @@ -138,7 +138,7 @@ new cloud.Function(inflight ()=> { // push a message to queue queue.push("m"); // sleep according to target - if util.env("WING_TARGET") == "sim" { + if @target == "sim" { log("Running on Simulator, sleeping for 1s"); util.sleep(1s); } else { diff --git a/packages/@winglang/sdk/src/cloud/function.ts b/packages/@winglang/sdk/src/cloud/function.ts index ea4a33653f7..ba7ee65a63e 100644 --- a/packages/@winglang/sdk/src/cloud/function.ts +++ b/packages/@winglang/sdk/src/cloud/function.ts @@ -122,10 +122,6 @@ export class Function extends Resource implements IInflightHost { const entrypoint = join(workdir, `${assetName}.cjs`); this.entrypoint = entrypoint; - if (process.env.WING_TARGET) { - this.addEnvironment("WING_TARGET", process.env.WING_TARGET); - } - if (props.concurrency !== undefined && props.concurrency <= 0) { throw new Error( "concurrency option on cloud.Function must be a positive integer" diff --git a/packages/@winglang/sdk/src/cloud/service.ts b/packages/@winglang/sdk/src/cloud/service.ts index 1289da7eb3e..4d67f7ac8f9 100644 --- a/packages/@winglang/sdk/src/cloud/service.ts +++ b/packages/@winglang/sdk/src/cloud/service.ts @@ -107,10 +107,6 @@ export class Service extends Resource implements IInflightHost { const entrypoint = join(workdir, `${this.assetName}.cjs`); this.entrypoint = entrypoint; - if (process.env.WING_TARGET) { - this.addEnvironment("WING_TARGET", process.env.WING_TARGET); - } - this.handler = handler; } diff --git a/packages/@winglang/sdk/src/core/lifting.ts b/packages/@winglang/sdk/src/core/lifting.ts index 41d2bb7fad0..544f79d2e1a 100644 --- a/packages/@winglang/sdk/src/core/lifting.ts +++ b/packages/@winglang/sdk/src/core/lifting.ts @@ -423,5 +423,9 @@ export class Lifting { // no lift-related methods to call - it's probably a primitive // so no capabilities need to be added to the inflight host } + + if (process.env.WING_TARGET) { + host.addEnvironment("WING_TARGET", process.env.WING_TARGET!); + } } } diff --git a/packages/@winglang/sdk/src/target-sim/resource.ts b/packages/@winglang/sdk/src/target-sim/resource.ts index 7b2fa17cb5a..75ff2f1ff83 100644 --- a/packages/@winglang/sdk/src/target-sim/resource.ts +++ b/packages/@winglang/sdk/src/target-sim/resource.ts @@ -120,10 +120,6 @@ export class Resource const entrypoint = join(workdir, `${assetName}.cjs`); this.entrypoint = entrypoint; - if (process.env.WING_TARGET) { - this.addEnvironment("WING_TARGET", process.env.WING_TARGET); - } - this.factory = factory; } diff --git a/packages/@winglang/wingc/src/ast.rs b/packages/@winglang/wingc/src/ast.rs index 1c151d3b3bd..5ab099cc641 100644 --- a/packages/@winglang/wingc/src/ast.rs +++ b/packages/@winglang/wingc/src/ast.rs @@ -592,6 +592,7 @@ pub enum IntrinsicKind { Dirname, Filename, App, + Target, } impl Display for IntrinsicKind { @@ -601,6 +602,7 @@ impl Display for IntrinsicKind { IntrinsicKind::Dirname => write!(f, "@dirname"), IntrinsicKind::Filename => write!(f, "@filename"), IntrinsicKind::App => write!(f, "@app"), + IntrinsicKind::Target => write!(f, "@target"), } } } @@ -611,6 +613,7 @@ impl IntrinsicKind { "@dirname" => IntrinsicKind::Dirname, "@filename" => IntrinsicKind::Filename, "@app" => IntrinsicKind::App, + "@target" => IntrinsicKind::Target, _ => IntrinsicKind::Unknown, } } @@ -630,6 +633,7 @@ impl IntrinsicKind { Phase::Preflight => true, _ => false, }, + IntrinsicKind::Target => true, } } } diff --git a/packages/@winglang/wingc/src/jsify.rs b/packages/@winglang/wingc/src/jsify.rs index 7381b3df495..0ec7e4593cc 100644 --- a/packages/@winglang/wingc/src/jsify.rs +++ b/packages/@winglang/wingc/src/jsify.rs @@ -726,6 +726,9 @@ impl<'a> JSifier<'a> { IntrinsicKind::App => { new_code!(expr_span, HELPERS_VAR, ".nodeof(this).app") } + IntrinsicKind::Target => { + new_code!(expr_span, "process.env.WING_TARGET") + } }, ExprKind::Call { callee, arg_list } => { let function_type = match callee { diff --git a/packages/@winglang/wingc/src/lsp/snapshots/completions/intrinsics.snap b/packages/@winglang/wingc/src/lsp/snapshots/completions/intrinsics.snap index df4afd74925..b79b34d2f83 100644 --- a/packages/@winglang/wingc/src/lsp/snapshots/completions/intrinsics.snap +++ b/packages/@winglang/wingc/src/lsp/snapshots/completions/intrinsics.snap @@ -22,4 +22,11 @@ source: packages/@winglang/wingc/src/lsp/completions.rs kind: markdown value: "Get the normalized absolute path of the current Wing source file.\n\nThe resolved path represents a path during preflight only and is not guaranteed to be valid while inflight." sortText: bb|@filename +- label: "@target" + kind: 6 + detail: str + documentation: + kind: markdown + value: "Returns a string identifying the current compilation platform.\n\nThis value is set by the CLI at compile time and can be used to conditionally compile code that is dependent on the target platform." + sortText: bb|@target diff --git a/packages/@winglang/wingc/src/lsp/snapshots/completions/intrinsics_partial.snap b/packages/@winglang/wingc/src/lsp/snapshots/completions/intrinsics_partial.snap index df4afd74925..b79b34d2f83 100644 --- a/packages/@winglang/wingc/src/lsp/snapshots/completions/intrinsics_partial.snap +++ b/packages/@winglang/wingc/src/lsp/snapshots/completions/intrinsics_partial.snap @@ -22,4 +22,11 @@ source: packages/@winglang/wingc/src/lsp/completions.rs kind: markdown value: "Get the normalized absolute path of the current Wing source file.\n\nThe resolved path represents a path during preflight only and is not guaranteed to be valid while inflight." sortText: bb|@filename +- label: "@target" + kind: 6 + detail: str + documentation: + kind: markdown + value: "Returns a string identifying the current compilation platform.\n\nThis value is set by the CLI at compile time and can be used to conditionally compile code that is dependent on the target platform." + sortText: bb|@target diff --git a/packages/@winglang/wingc/src/parser.rs b/packages/@winglang/wingc/src/parser.rs index 67da995f7c9..88a88c8c6e0 100644 --- a/packages/@winglang/wingc/src/parser.rs +++ b/packages/@winglang/wingc/src/parser.rs @@ -2527,7 +2527,7 @@ impl<'s> Parser<'s> { }; if matches!(kind, IntrinsicKind::Unknown) { - self.add_error("Invalid intrinsic", &expression_node); + self.add_error(format!("Unknown intrinsic: @{}", name), &expression_node); } Ok(Expr::new( diff --git a/packages/@winglang/wingc/src/type_check.rs b/packages/@winglang/wingc/src/type_check.rs index 57c9a8bee83..707d2c688c0 100644 --- a/packages/@winglang/wingc/src/type_check.rs +++ b/packages/@winglang/wingc/src/type_check.rs @@ -2333,6 +2333,28 @@ See https://www.winglang.io/docs/concepts/application-tree for more information. AccessModifier::Public, StatementIdx::Top, ); + + // @target + let _ = self.types + .intrinsics + .define( + &Symbol::global(IntrinsicKind::Target.to_string()), + SymbolKind::Variable(VariableInfo { + access: AccessModifier::Public, + name: Symbol::global(IntrinsicKind::Target.to_string()), + docs: Some(Docs::with_summary( + r#"Returns a string identifying the current compilation platform. + +This value is set by the CLI at compile time and can be used to conditionally compile code that is dependent on the target platform."#, + )), + kind: VariableKind::StaticMember, + phase: Phase::Independent, + type_: self.types.string(), + reassignable: false, + }), + AccessModifier::Public, + StatementIdx::Top, + ); } fn add_builtin(&mut self, name: &str, typ: Type, scope: &mut Scope) { @@ -2981,7 +3003,11 @@ See https://www.winglang.io/docs/concepts/application-tree for more information. } match intrinsic.kind { - IntrinsicKind::Dirname | IntrinsicKind::Filename | IntrinsicKind::App | IntrinsicKind::Unknown => { + IntrinsicKind::Dirname + | IntrinsicKind::Filename + | IntrinsicKind::App + | IntrinsicKind::Target + | IntrinsicKind::Unknown => { return (sig.return_type, sig.phase); } } diff --git a/packages/winglang/project-templates/wing/private-api/main.w b/packages/winglang/project-templates/wing/private-api/main.w index 15a34c521a5..495be7679cc 100644 --- a/packages/winglang/project-templates/wing/private-api/main.w +++ b/packages/winglang/project-templates/wing/private-api/main.w @@ -1,6 +1,5 @@ bring cloud; bring http; -bring util; /** * The example below is a simple note-taking app. @@ -96,7 +95,7 @@ bring util; let noteService = new NoteService(); // Consumer functions (not required for the app to work, but useful for testing) -if util.env("WING_TARGET") == "tf-aws" { +if @target == "tf-aws" { new cloud.Function(inflight (event) => { if let event = event?.tryAsStr() { let parts = event.split(":"); @@ -128,4 +127,4 @@ if util.env("WING_TARGET") == "tf-aws" { return "event is required `NAME`"; }) as "Consumer-GET"; -} \ No newline at end of file +} diff --git a/tests/doc_examples/valid/01-understanding-platforms.md_example_1/main.w b/tests/doc_examples/valid/01-understanding-platforms.md_example_1/main.w index 3f8f521da20..0adc4312683 100644 --- a/tests/doc_examples/valid/01-understanding-platforms.md_example_1/main.w +++ b/tests/doc_examples/valid/01-understanding-platforms.md_example_1/main.w @@ -14,7 +14,7 @@ new cloud.Function(inflight ()=> { // push a message to queue queue.push("m"); // sleep according to target - if util.env("WING_TARGET") == "sim" { + if @target == "sim" { log("Running on Simulator, sleeping for 1s"); util.sleep(1s); } else { diff --git a/tests/error/invalid-token.test.w b/tests/error/invalid-token.test.w index 37dcb73a218..5da625c9941 100644 --- a/tests/error/invalid-token.test.w +++ b/tests/error/invalid-token.test.w @@ -1,5 +1,4 @@ bring sim; -bring util; inflight class MyResourceBackend impl sim.IResource { ctx: sim.IResourceContext; @@ -22,7 +21,7 @@ class MyResource { } // Only run these tests in the simulator -if util.env("WING_TARGET") == "sim" { +if @target == "sim" { let r = new MyResource(); let fakeAttr = r.fakeAttr(); diff --git a/tests/sdk_tests/api/aws-api.test.w b/tests/sdk_tests/api/aws-api.test.w index 9edfcc1c1de..b1cb9c74089 100644 --- a/tests/sdk_tests/api/aws-api.test.w +++ b/tests/sdk_tests/api/aws-api.test.w @@ -1,8 +1,5 @@ bring cloud; bring aws; -bring util; - -let target = util.env("WING_TARGET"); let api = new cloud.Api() as "api"; api.get("/api", inflight (req: cloud.ApiRequest): cloud.ApiResponse => { @@ -39,4 +36,4 @@ test "validates the AWS Api" { // If the test is not on AWS, it should not fail, so I am returning true. assert(true); } -} \ No newline at end of file +} diff --git a/tests/sdk_tests/api/cycle.test.w b/tests/sdk_tests/api/cycle.test.w index 8e87d265631..2bf274a7e4e 100644 --- a/tests/sdk_tests/api/cycle.test.w +++ b/tests/sdk_tests/api/cycle.test.w @@ -5,7 +5,7 @@ bring util; // This test checks that an API can have a route whose handler // references the API's URL. -if ["sim", "tf-aws", "awscdk"].contains(util.env("WING_TARGET")) { +if ["sim", "tf-aws", "awscdk"].contains(@target) { let api = new cloud.Api(); api.get("/my_url", inflight () => { diff --git a/tests/sdk_tests/bucket/aws-bucket.test.w b/tests/sdk_tests/bucket/aws-bucket.test.w index f9385552455..d9e6078e232 100644 --- a/tests/sdk_tests/bucket/aws-bucket.test.w +++ b/tests/sdk_tests/bucket/aws-bucket.test.w @@ -1,8 +1,5 @@ bring cloud; bring aws; -bring util; - -let target = util.env("WING_TARGET"); let bucket = new cloud.Bucket() as "aws-wing-bucket"; @@ -20,7 +17,7 @@ let bucketInfo = getBucketInfo(bucket); test "validates the AWS Bucket" { if let bucket = bucketInfo { - if target == "tf-aws" { + if @target == "tf-aws" { assert(bucket.get("bucketArn").contains("arn:aws:s3:::aws-wing-bucket")); assert(bucket.get("bucketName").contains("aws-wing-bucket")); } else { // If it's not a 'tf-aws' target, it's an 'awscdk' @@ -32,4 +29,4 @@ test "validates the AWS Bucket" { // If the test is not on AWS, it should not fail, so I am returning true. assert(true); } -} \ No newline at end of file +} diff --git a/tests/sdk_tests/bucket/bucket-ref.test.w b/tests/sdk_tests/bucket/bucket-ref.test.w index 7a4537a0c83..e7b6c6abcd7 100644 --- a/tests/sdk_tests/bucket/bucket-ref.test.w +++ b/tests/sdk_tests/bucket/bucket-ref.test.w @@ -1,7 +1,7 @@ bring cloud; bring aws; -bring util; bring expect; + let b = new cloud.Bucket(); // this will only work if we are testing on tf-aws @@ -14,7 +14,7 @@ if let name = aws.Bucket.from(b)?.bucketName { } } -if util.env("WING_TARGET") == "sim" { +if @target == "sim" { let dummyName = "wing-dummy-bucket"; let dummyArn = "arn:aws:s3:::{dummyName}"; let br = new aws.BucketRef(dummyName); diff --git a/tests/sdk_tests/bucket/events.test.w b/tests/sdk_tests/bucket/events.test.w index 13a1dd176b7..79ff51b9f15 100644 --- a/tests/sdk_tests/bucket/events.test.w +++ b/tests/sdk_tests/bucket/events.test.w @@ -62,7 +62,7 @@ new std.Test(inflight () => { b.delete("c"); // https://github.com/winglang/wing/issues/2724 - if (util.env("WING_TARGET") != "tf-aws") { + if @target != "tf-aws" { // assert that onCreate events about the "a", "b", and "c" objects were each produced exactly 1 time checkHitCount(key: "a", type: "OnCreate()", source: Source.anyEvent, count: 1); checkHitCount(key: "b", type: "OnCreate()", source: Source.anyEvent, count: 1); diff --git a/tests/sdk_tests/bucket/signed_url.test.w b/tests/sdk_tests/bucket/signed_url.test.w index 8c31d91acfa..94ff2dd8bae 100644 --- a/tests/sdk_tests/bucket/signed_url.test.w +++ b/tests/sdk_tests/bucket/signed_url.test.w @@ -51,14 +51,13 @@ test "signedUrl PUT" { test "signedUrl duration option is respected" { let isExpiredTokenError = (output: str) => { - let target = util.env("WING_TARGET"); let var result = false; - if target == "tf-aws" { + if @target == "tf-aws" { result = output.contains("AccessDeniedRequest has expired"); - } else if target == "tf-gcp" { + } else if @target == "tf-gcp" { result = output.contains("ExpiredTokenInvalid argument."); - } else if target == "sim" { + } else if @target == "sim" { result = output.contains("Signed URL has expired"); } diff --git a/tests/sdk_tests/container/container.test.w b/tests/sdk_tests/container/container.test.w index c21f2562537..9a89acad4f2 100644 --- a/tests/sdk_tests/container/container.test.w +++ b/tests/sdk_tests/container/container.test.w @@ -6,12 +6,10 @@ skipPlatforms: bring sim; bring http; -bring util; bring expect; // only relevant in simulator -if util.env("WING_TARGET") == "sim" { - +if @target == "sim" { let echo = new sim.Container( name: "http-echo", image: "hashicorp/http-echo", diff --git a/tests/sdk_tests/container/entrypoint.test.w b/tests/sdk_tests/container/entrypoint.test.w index c2799745c82..0dff2145ef3 100644 --- a/tests/sdk_tests/container/entrypoint.test.w +++ b/tests/sdk_tests/container/entrypoint.test.w @@ -6,11 +6,10 @@ skipPlatforms: bring sim; bring http; -bring util; bring expect; // only relevant in simulator -if util.env("WING_TARGET") == "sim" { +if @target == "sim" { let entrypoint = new sim.Container( name: "my-entrypoint-app", image: "./my-docker-image", diff --git a/tests/sdk_tests/container/mount.test.w b/tests/sdk_tests/container/mount.test.w index ab2588ff53e..7ea694c69f1 100644 --- a/tests/sdk_tests/container/mount.test.w +++ b/tests/sdk_tests/container/mount.test.w @@ -4,10 +4,9 @@ skipPlatforms: - darwin \*/ bring sim; -bring util; // only relevant in simulator -if util.env("WING_TARGET") == "sim" { +if @target == "sim" { let container = new sim.Container( name: "postgres", image: "postgres:15", diff --git a/tests/sdk_tests/container/network.test.w b/tests/sdk_tests/container/network.test.w index 41c43afd399..4ff3eafecae 100644 --- a/tests/sdk_tests/container/network.test.w +++ b/tests/sdk_tests/container/network.test.w @@ -6,11 +6,10 @@ skipPlatforms: bring sim; bring http; -bring util; bring expect; // only relevant in simulator -if util.env("WING_TARGET") == "sim" { +if @target == "sim" { let networkHost = new sim.Container( name: "http-echo", image: "hashicorp/http-echo", diff --git a/tests/sdk_tests/counter/aws-counter.test.w b/tests/sdk_tests/counter/aws-counter.test.w index 7dd1d5d2f25..acb5d2a53e7 100644 --- a/tests/sdk_tests/counter/aws-counter.test.w +++ b/tests/sdk_tests/counter/aws-counter.test.w @@ -1,8 +1,5 @@ bring cloud; bring aws; -bring util; - -let target = util.env("WING_TARGET"); let counter = new cloud.Counter(initial: 1) as "aws-wing-counter"; @@ -20,7 +17,7 @@ let counterInfo = getCounterInfo(counter); test "validates the AWS counter name" { if let counter = counterInfo { - if target == "tf-aws" { + if @target == "tf-aws" { assert(counter.get("dynamoTableArn").contains("arn:aws:dynamodb:")); assert(counter.get("dynamoTableArn").contains("aws-wing-counter")); assert(counter.get("dynamoTableName").contains("aws-wing-counter")); @@ -33,4 +30,4 @@ test "validates the AWS counter name" { // If the test is not on AWS, it should not fail, so I am returning true. assert(true); } -} \ No newline at end of file +} diff --git a/tests/sdk_tests/function/aws-function.test.w b/tests/sdk_tests/function/aws-function.test.w index 0164c3455ed..10c26c65629 100644 --- a/tests/sdk_tests/function/aws-function.test.w +++ b/tests/sdk_tests/function/aws-function.test.w @@ -1,9 +1,6 @@ bring aws; bring cloud; bring expect; -bring util; - -let target = util.env("WING_TARGET"); let getFunctionInfo = (f: cloud.Function): Map? => { if let lambda = aws.Function.from(f) { @@ -27,7 +24,7 @@ let fn = new cloud.Function(inflight (msg: Json?) => { let remainingTime = ctx.remainingTimeInMillis(); assert(remainingTime > 0); } else { - if target == "tf-aws" || target == "awscdk" { + if @target == "tf-aws" || @target == "awscdk" { expect.fail("Expected to have a context object"); } } @@ -39,18 +36,18 @@ let fnInfo = getFunctionInfo(fn); new std.Test(inflight () => { if let info = fnInfo { - if target == "tf-aws" { + if @target == "tf-aws" { assert(info.get("functionArn").contains("arn:aws:lambda:")); assert(info.get("functionArn").contains(":function:")); assert(info.get("functionArn").contains("aws-wing-function")); assert(info.get("functionName").contains("aws-wing-function")); - } else if target == "awscdk" { + } else if @target == "awscdk" { assert(info.get("functionArn").contains("arn:aws:lambda:")); assert(info.get("functionArn").contains(":function:")); assert(info.get("functionArn").contains("awswingfunction")); assert(info.get("functionName").contains("awswingfunction")); } else { - expect.fail("Unexpected target " + target); + expect.fail("Unexpected target " + @target); } } else { // If the test is not on AWS, it should not fail, so I am returning true. diff --git a/tests/sdk_tests/function/aws-layer.test.w b/tests/sdk_tests/function/aws-layer.test.w index 06124776aa5..26e640c8506 100644 --- a/tests/sdk_tests/function/aws-layer.test.w +++ b/tests/sdk_tests/function/aws-layer.test.w @@ -1,9 +1,8 @@ bring aws; bring cloud; bring expect; -bring util; -if util.env("WING_TARGET") == "tf-aws" { +if @target == "tf-aws" { let fn = new cloud.Function(inflight () => { return "Hello world!"; }); diff --git a/tests/sdk_tests/function/concurrency.test.w b/tests/sdk_tests/function/concurrency.test.w index 699c22e028c..f204c91cb05 100644 --- a/tests/sdk_tests/function/concurrency.test.w +++ b/tests/sdk_tests/function/concurrency.test.w @@ -3,7 +3,7 @@ bring util; // TODO: support concurrency on AWS -if util.env("WING_TARGET") == "sim" { +if @target == "sim" { let c = new cloud.Counter(); let f1 = new cloud.Function(inflight () => { diff --git a/tests/sdk_tests/function/function-ref.test.w b/tests/sdk_tests/function/function-ref.test.w index 0c2c29a0b7b..479f1b69792 100644 --- a/tests/sdk_tests/function/function-ref.test.w +++ b/tests/sdk_tests/function/function-ref.test.w @@ -22,7 +22,7 @@ if let arn = aws.Function.from(f)?.functionArn { } } -if util.env("WING_TARGET") == "sim" { +if @target == "sim" { bring expect; let dummyArn = "arn:aws:lambda:us-east-1:111111111111:function:Function-11111111"; diff --git a/tests/sdk_tests/function/timeout.test.w b/tests/sdk_tests/function/timeout.test.w index cc1da9c7c3b..e70618079b9 100644 --- a/tests/sdk_tests/function/timeout.test.w +++ b/tests/sdk_tests/function/timeout.test.w @@ -5,9 +5,9 @@ bring expect; let c = new cloud.Counter(); let ERROR_MSG_BY_TARGET: Map = {"tf-gcp": "upstream request timeout"}; -let timeoutError = ERROR_MSG_BY_TARGET.tryGet(util.env("WING_TARGET")) ?? "Function timed out"; +let timeoutError = ERROR_MSG_BY_TARGET.tryGet(@target) ?? "Function timed out"; let TIMEOUT_BY_TARGET: Map = {"tf-gcp": 120}; -let timeoutValue = TIMEOUT_BY_TARGET.tryGet(util.env("WING_TARGET")) ?? 60; +let timeoutValue = TIMEOUT_BY_TARGET.tryGet(@target) ?? 60; let f1 = new cloud.Function(inflight () => { util.sleep(1.5s); diff --git a/tests/sdk_tests/queue/aws-queue.test.w b/tests/sdk_tests/queue/aws-queue.test.w index c42fd4d69cc..bc99e349fe6 100644 --- a/tests/sdk_tests/queue/aws-queue.test.w +++ b/tests/sdk_tests/queue/aws-queue.test.w @@ -2,8 +2,6 @@ bring cloud; bring aws; bring util; -let target = util.env("WING_TARGET"); - let queue = new cloud.Queue() as "aws-wing-queue"; let getQueueInfo = (q: cloud.Queue): Map? => { @@ -21,7 +19,7 @@ let queueInfo = getQueueInfo(queue); test "validates the AWS queue name" { if let queue = queueInfo { - if target == "tf-aws" { + if @target == "tf-aws" { assert(queue.get("queueArn").contains("arn:aws:sqs:")); assert(queue.get("queueArn").contains("aws-wing-queue")); assert(queue.get("queueName").contains("aws-wing-queue")); @@ -34,4 +32,4 @@ test "validates the AWS queue name" { // If the test is not on AWS, it should not fail, so I am returning true. assert(true); } -} \ No newline at end of file +} diff --git a/tests/sdk_tests/queue/push.test.w b/tests/sdk_tests/queue/push.test.w index 817a7fd99dd..1afa08ac39d 100644 --- a/tests/sdk_tests/queue/push.test.w +++ b/tests/sdk_tests/queue/push.test.w @@ -41,7 +41,7 @@ new std.Test(inflight () => { }); q.purge(); - if util.env("WING_TARGET") != "sim" { + if @target != "sim" { // In a real cloud, purging is expensive so we should wait a minute regardless of .approxSize() // e.g. See AWS docs for queue purging (https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-sqs/classes/purgequeuecommand.html) util.sleep(1m); diff --git a/tests/sdk_tests/queue/queue-ref.test.w b/tests/sdk_tests/queue/queue-ref.test.w index fff25baefa4..39c0a16bdaf 100644 --- a/tests/sdk_tests/queue/queue-ref.test.w +++ b/tests/sdk_tests/queue/queue-ref.test.w @@ -31,7 +31,7 @@ if let arn = aws.Queue.from(q)?.queueArn { } } -if util.env("WING_TARGET") == "sim" { +if @target == "sim" { bring expect; let dummyArn = "arn:aws:sqs:us-east-1:111111111111:Queue-11111111"; @@ -51,4 +51,4 @@ if util.env("WING_TARGET") == "sim" { assert(err); } -} \ No newline at end of file +} diff --git a/tests/sdk_tests/queue/retention_period.main.w b/tests/sdk_tests/queue/retention_period.main.w index 9f664f2c9e9..41ab3f4052a 100644 --- a/tests/sdk_tests/queue/retention_period.main.w +++ b/tests/sdk_tests/queue/retention_period.main.w @@ -2,7 +2,7 @@ bring cloud; bring util; // TODO: timeout is not supported in sim - https://github.com/winglang/wing/issues/2401 -if util.env("WING_TARGET") != "sim" { +if @target != "sim" { let var timeout = 30s; let var retentionPeriod = 60s; diff --git a/tests/sdk_tests/queue/timeout.test.w b/tests/sdk_tests/queue/timeout.test.w index 604315a96b9..5ff40483ea9 100644 --- a/tests/sdk_tests/queue/timeout.test.w +++ b/tests/sdk_tests/queue/timeout.test.w @@ -7,7 +7,7 @@ bring util; let var timeout: duration = 30s; let var sleep: duration = 31s; -if (util.env("WING_TARGET") == "sim") { +if @target == "sim" { timeout = 1s; sleep = 2s; } @@ -29,7 +29,7 @@ new std.Test(inflight () => { util.sleep(duration.fromSeconds(timeout.seconds + 1)); // The queue should have 2 messages still due to timeout - doesn't work on aws or sim unfortunately // for aws- https://github.com/winglang/wing/issues/3354 - if (util.env("WING_TARGET") != "tf-aws") { + if @target != "tf-aws" { assert(q.approxSize() == 2); } }, timeout: 2m) as "timeout"; diff --git a/tests/sdk_tests/resource/call.test.w b/tests/sdk_tests/resource/call.test.w index 9ea58686123..bdb25e1f3ae 100644 --- a/tests/sdk_tests/resource/call.test.w +++ b/tests/sdk_tests/resource/call.test.w @@ -154,7 +154,7 @@ class MyResource { } // Only run these tests in the simulator -if util.env("WING_TARGET") == "sim" { +if @target == "sim" { let r1 = new MyResource(); test "resource.call with a field name returns the field value" { diff --git a/tests/sdk_tests/resource/no-stop.test.w b/tests/sdk_tests/resource/no-stop.test.w index cbd1d4b985d..77b7f37aa44 100644 --- a/tests/sdk_tests/resource/no-stop.test.w +++ b/tests/sdk_tests/resource/no-stop.test.w @@ -1,6 +1,5 @@ bring sim; bring expect; -bring util; class Simple { pub foo: str; @@ -14,7 +13,7 @@ class Simple { } // Only run these tests in the simulator -if util.env("WING_TARGET") == "sim" { +if @target == "sim" { let s = new Simple(); test "token is resolved" { diff --git a/tests/sdk_tests/resource/on-start.test.w b/tests/sdk_tests/resource/on-start.test.w index a1426e06092..a1505d91f18 100644 --- a/tests/sdk_tests/resource/on-start.test.w +++ b/tests/sdk_tests/resource/on-start.test.w @@ -1,5 +1,4 @@ bring sim; -bring util; inflight class OnStartThrowerBackend impl sim.IResource { new() { @@ -24,7 +23,7 @@ class OnStartThrower { } // Only run these tests in the simulator -if util.env("WING_TARGET") == "sim" { +if @target == "sim" { let r = new OnStartThrower(); test "method calls fail if the resource fails to start" { diff --git a/tests/sdk_tests/resource/on-stop.test.w b/tests/sdk_tests/resource/on-stop.test.w index ac4739d32f8..31f939ac967 100644 --- a/tests/sdk_tests/resource/on-stop.test.w +++ b/tests/sdk_tests/resource/on-stop.test.w @@ -1,5 +1,4 @@ bring sim; -bring util; inflight class OnStopThrowerBackend impl sim.IResource { pub onStop() { @@ -23,7 +22,7 @@ class OnStopThrower { } // Only run these tests in the simulator -if util.env("WING_TARGET") == "sim" { +if @target == "sim" { let r = new OnStopThrower(); test "if a resource throws an error on stopping, it doesn't crash the simulation" { diff --git a/tests/sdk_tests/resource/resource.test.w b/tests/sdk_tests/resource/resource.test.w index f3e7d320073..23a006ea2ef 100644 --- a/tests/sdk_tests/resource/resource.test.w +++ b/tests/sdk_tests/resource/resource.test.w @@ -1,6 +1,5 @@ bring cloud; bring sim; -bring util; inflight class CounterBackend impl sim.IResource { var counter: num; @@ -59,7 +58,7 @@ class Counter { let c = new Counter(); // Only run these tests in the simulator -if util.env("WING_TARGET") == "sim" { +if @target == "sim" { test "Counter" { assert(c.inc() == 0); assert(c.inc() == 1); @@ -80,7 +79,7 @@ class DoubleCounter extends Counter { let dc = new DoubleCounter(); -if util.env("WING_TARGET") == "sim" { +if @target == "sim" { test "DoubleCounter" { assert(dc.inc() == 0); assert(dc.inc() == 2); diff --git a/tests/sdk_tests/resource/state.test.w b/tests/sdk_tests/resource/state.test.w index a04ba5fac61..4606d3ae9ee 100644 --- a/tests/sdk_tests/resource/state.test.w +++ b/tests/sdk_tests/resource/state.test.w @@ -1,6 +1,5 @@ bring fs; bring sim; -bring util; inflight class ResourceWithStateBackend impl sim.IResource { ctx: sim.IResourceContext; @@ -37,7 +36,7 @@ class ResourceWithState { } // Only run these tests in the simulator -if util.env("WING_TARGET") == "sim" { +if @target == "sim" { let r = new ResourceWithState(); test "sim.Resource can read and write state" { diff --git a/tests/sdk_tests/resource/tokens.test.w b/tests/sdk_tests/resource/tokens.test.w index 1d80c62dbe2..ee4b9c9d738 100644 --- a/tests/sdk_tests/resource/tokens.test.w +++ b/tests/sdk_tests/resource/tokens.test.w @@ -1,5 +1,4 @@ bring sim; -bring util; inflight class BadTokenResolverBackend impl sim.IResource { ctx: sim.IResourceContext; @@ -26,7 +25,7 @@ class BadTokenResolver { } // Only run these tests in the simulator -if util.env("WING_TARGET") == "sim" { +if @target == "sim" { let r = new BadTokenResolver(); test "calling resolveToken during a method call emits an error" { diff --git a/tests/sdk_tests/schedule/init.test.w b/tests/sdk_tests/schedule/init.test.w index ee6cdcbda87..c60ce7afb3b 100644 --- a/tests/sdk_tests/schedule/init.test.w +++ b/tests/sdk_tests/schedule/init.test.w @@ -1,50 +1,42 @@ -/*\ -skip: true -\*/ - bring cloud; -bring util; bring expect; new cloud.Schedule( rate: 5m ) as "s0"; -// doesn't work on sim: https://github.com/winglang/wing/issues/2732 -if (util.env("WING_TARGET") != "sim") { - // Those are testing the many errors in initialization of a cloud.Schedule - let var error = ""; - try { - new cloud.Schedule( rate: nil, cron: nil ) as "s1"; - } catch e { - error = e; - } - expect.equal(error, "rate or cron need to be filled."); - - try { - new cloud.Schedule( rate: 2m, cron: "* * * * *" ) as "s2"; - } catch e { - error = e; - } - expect.equal(error, "rate and cron cannot be configured simultaneously."); - - - try { - new cloud.Schedule( rate: 1s ) as "s3"; - } catch e { - error = e; - } - expect.equal(error, "rate can not be set to less than 1 minute."); - - try { - new cloud.Schedule( cron: "* * * * * *" ) as "s4"; - } catch e { - error = e; - } - expect.equal(error, "cron string must be in UNIX cron format"); - - try { - new cloud.Schedule( cron: "* * * * ?" ) as "s5"; - } catch e { - error = e; - } - expect.equal(error, "cron string must be in UNIX cron format"); -} \ No newline at end of file +// Those are testing the many errors in initialization of a cloud.Schedule +let var error = ""; +try { + new cloud.Schedule( rate: nil, cron: nil ) as "s1"; +} catch e { + error = e; +} +expect.equal(error, "rate or cron need to be filled."); + +try { + new cloud.Schedule( rate: 2m, cron: "* * * * *" ) as "s2"; +} catch e { + error = e; +} +expect.equal(error, "rate and cron cannot be configured simultaneously."); + + +try { + new cloud.Schedule( rate: 1s ) as "s3"; +} catch e { + error = e; +} +expect.equal(error, "rate can not be set to less than 1 minute."); + +try { + new cloud.Schedule( cron: "* * * * * *" ) as "s4"; +} catch e { + error = e; +} +expect.equal(error, "cron string must be in UNIX cron format"); + +try { + new cloud.Schedule( cron: "* * * * ?" ) as "s5"; +} catch e { + error = e; +} +expect.equal(error, "cron string must be in UNIX cron format"); diff --git a/tests/sdk_tests/secret/secret-ref.test.w b/tests/sdk_tests/secret/secret-ref.test.w index e6adbc23720..13612d02eca 100644 --- a/tests/sdk_tests/secret/secret-ref.test.w +++ b/tests/sdk_tests/secret/secret-ref.test.w @@ -1,12 +1,11 @@ -bring util; bring aws; bring expect; -if util.env("WING_TARGET") == "tf-aws" { +if @target == "tf-aws" { let someExistingSecretArn = "arn:aws:secretsmanager:::secret:mysecret"; let secret = new aws.SecretRef(someExistingSecretArn); test "secretArn" { expect.equal(someExistingSecretArn, secret.secretArn); } -} \ No newline at end of file +} diff --git a/tests/sdk_tests/service/callbacks.test.w b/tests/sdk_tests/service/callbacks.test.w index dae377a4811..2b5074455d2 100644 --- a/tests/sdk_tests/service/callbacks.test.w +++ b/tests/sdk_tests/service/callbacks.test.w @@ -1,9 +1,8 @@ bring cloud; -bring util; bring http; -// hack: only supported in the "sim" target for now -if util.env("WING_TARGET") == "sim" { +// only supported in the "sim" target for now +if @target == "sim" { let b = new cloud.Bucket(); let startCounter = new cloud.Counter(); let status = "status"; diff --git a/tests/sdk_tests/service/http-server.test.w b/tests/sdk_tests/service/http-server.test.w index 52486f3ae8b..2d13352c6fb 100644 --- a/tests/sdk_tests/service/http-server.test.w +++ b/tests/sdk_tests/service/http-server.test.w @@ -1,5 +1,4 @@ bring cloud; -bring util; bring http; struct Address { @@ -12,8 +11,8 @@ inflight interface IHttpServer { } -// hack: only supported in the "sim" target for now -if util.env("WING_TARGET") == "sim" { +// only supported in the "sim" target for now +if @target == "sim" { class MyService { b: cloud.Bucket; body: str; diff --git a/tests/sdk_tests/service/minimal.test.w b/tests/sdk_tests/service/minimal.test.w index c1a0544027d..4dce1e770ce 100644 --- a/tests/sdk_tests/service/minimal.test.w +++ b/tests/sdk_tests/service/minimal.test.w @@ -1,9 +1,7 @@ bring cloud; -bring util; // hack: only supported in the "sim" target for now -if util.env("WING_TARGET") == "sim" { - +if @target == "sim" { let s = new cloud.Service(inflight () => { log("hello, service!"); @@ -17,4 +15,4 @@ if util.env("WING_TARGET") == "sim" { s.stop(); assert(!s.started()); } -} \ No newline at end of file +} diff --git a/tests/sdk_tests/service/stateful.test.w b/tests/sdk_tests/service/stateful.test.w index 6e6ba08cffc..80e8f177b85 100644 --- a/tests/sdk_tests/service/stateful.test.w +++ b/tests/sdk_tests/service/stateful.test.w @@ -3,7 +3,7 @@ bring util; bring http; // hack: only supported in the "sim" target for now -if util.env("WING_TARGET") == "sim" { +if @target == "sim" { class MyService { b: cloud.Bucket; body: str; @@ -46,4 +46,4 @@ if util.env("WING_TARGET") == "sim" { test "service is ready only after onStart finishes" { foo.access(); } -} \ No newline at end of file +} diff --git a/tests/sdk_tests/service/tokens.test.w b/tests/sdk_tests/service/tokens.test.w index 551be44b0db..771cff56c39 100644 --- a/tests/sdk_tests/service/tokens.test.w +++ b/tests/sdk_tests/service/tokens.test.w @@ -2,8 +2,8 @@ bring cloud; bring util; bring http; -// hack: only supported in the "sim" target for now -if util.env("WING_TARGET") == "sim" { +// only supported in the "sim" target for now +if @target == "sim" { let b = new cloud.Bucket(); let api = new cloud.Api(); api.get("/", inflight () => { diff --git a/tests/sdk_tests/state/get.test.w b/tests/sdk_tests/state/get.test.w index ff0951859d5..223e23e4c09 100644 --- a/tests/sdk_tests/state/get.test.w +++ b/tests/sdk_tests/state/get.test.w @@ -1,8 +1,6 @@ bring "./my-service.w" as my; -bring util; - -if util.env("WING_TARGET") == "sim" { +if @target == "sim" { let svc = new my.MyService(); test "state.get() returns the runtime value" { diff --git a/tests/sdk_tests/state/set.test.w b/tests/sdk_tests/state/set.test.w index f59658f3778..b062485145b 100644 --- a/tests/sdk_tests/state/set.test.w +++ b/tests/sdk_tests/state/set.test.w @@ -1,13 +1,10 @@ bring "./my-service.w" as my; -bring util; - -if util.env("WING_TARGET") == "sim" { +if @target == "sim" { let svc = new my.MyService(); test "token resolved at runtime" { log(svc.startTime); assert(svc.startTime == "2023-10-16T20:47:39.511Z"); } - -} \ No newline at end of file +} diff --git a/tests/sdk_tests/topic/aws-topic.test.w b/tests/sdk_tests/topic/aws-topic.test.w index d585b1a6b21..7d0d73e8389 100644 --- a/tests/sdk_tests/topic/aws-topic.test.w +++ b/tests/sdk_tests/topic/aws-topic.test.w @@ -1,8 +1,5 @@ bring cloud; bring aws; -bring util; - -let target = util.env("WING_TARGET"); let topic = new cloud.Topic() as "aws-wing-topic"; @@ -20,7 +17,7 @@ let topicInfo = getTopicInfo(topic); test "validates the AWS topic name" { if let topic = topicInfo { - if target == "tf-aws" { + if @target == "tf-aws" { assert(topic.get("topicArn").contains("arn:aws:sns:")); assert(topic.get("topicArn").contains("aws-wing-topic")); assert(topic.get("topicName").contains("aws-wing-topic")); @@ -32,4 +29,4 @@ test "validates the AWS topic name" { } // If the test is not on AWS, it should not fail, so I am returning true. assert(true); -} \ No newline at end of file +} diff --git a/tests/sdk_tests/util/shell.test.w b/tests/sdk_tests/util/shell.test.w index 5939d02b2e9..624e2108e35 100644 --- a/tests/sdk_tests/util/shell.test.w +++ b/tests/sdk_tests/util/shell.test.w @@ -2,10 +2,6 @@ bring util; bring expect; bring fs; -class Util { - extern "./util.js" pub static inflight platform(): str; -} - let assertThrows = inflight (expected: str, block: (): void) => { let var error = false; try { @@ -22,7 +18,7 @@ test "shell() with valid command" { let output = util.shell(command); - if Util.platform() != "win32" { + if util.os() != "win32" { expect.equal(output, "Hello, Wing!\n"); } else { expect.equal(output, "Hello, Wing!\r\n"); @@ -51,7 +47,7 @@ test "shell() with explicit non-zero exit status" { test "shell() with env option" { let var command = ""; - if Util.platform() != "win32" { + if util.os() != "win32" { command = "echo $WING_TARGET $ENV_VAR"; } else { command = "echo %WING_TARGET% %ENV_VAR%"; @@ -62,7 +58,7 @@ test "shell() with env option" { let output = util.shell(command, opts); - if Util.platform() != "win32" { + if util.os() != "win32" { expect.equal(output, "Wing\n"); } else { expect.equal(output, "%WING_TARGET% Wing\r\n"); @@ -70,10 +66,8 @@ test "shell() with env option" { } test "shell() with inheritEnv option" { - let target = util.env("WING_TARGET"); - let var command = ""; - if Util.platform() != "win32" { + if util.os() != "win32" { command = "echo $WING_TARGET"; } else { command = "echo %WING_TARGET%"; @@ -85,15 +79,15 @@ test "shell() with inheritEnv option" { let output1 = util.shell(command); let output2 = util.shell(command, opts); - if Util.platform() != "win32" { + if util.os() != "win32" { // \n expect.equal(output1.length, 1); } else { // %WING_TARGET%\r\n expect.equal(output1.length, 15); } - assert(output1.contains(target) == false); - assert(output2.contains(target) == true); + assert(output1.contains(@target) == false); + assert(output2.contains(@target) == true); } test "shell() with cwd option" { @@ -115,4 +109,4 @@ test "shell() with cwd option" { let output2 = util.shell(command2, opts2); expect.equal(output2, "Error executing command \"exit 1\". Exited with error code: 1"); -} \ No newline at end of file +} diff --git a/tests/sdk_tests/util/util.extern.d.ts b/tests/sdk_tests/util/util.extern.d.ts deleted file mode 100644 index 06d5b1d6059..00000000000 --- a/tests/sdk_tests/util/util.extern.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -export default interface extern { - platform: () => Promise, -} diff --git a/tests/sdk_tests/util/util.js b/tests/sdk_tests/util/util.js deleted file mode 100644 index 52c30974b28..00000000000 --- a/tests/sdk_tests/util/util.js +++ /dev/null @@ -1,5 +0,0 @@ -const os = require("os"); - -exports.platform = function () { - return os.platform(); -}; \ No newline at end of file diff --git a/tests/sdk_tests/website/aws-website.test.w b/tests/sdk_tests/website/aws-website.test.w index 70a8f5062ab..59406caaac8 100644 --- a/tests/sdk_tests/website/aws-website.test.w +++ b/tests/sdk_tests/website/aws-website.test.w @@ -1,9 +1,5 @@ bring cloud; bring aws; -bring util; - -let target = util.env("WING_TARGET"); - let website = new cloud.Website(path: "./website") as "aws-wing-website"; @@ -21,7 +17,7 @@ let websiteName = getWebsiteInfo(website); test "validates the AWS bucket name" { if let website = websiteName { - if target == "tf-aws" { + if @target == "tf-aws" { assert(website.get("bucketArn").contains("arn:aws:s3:::")); assert(website.get("bucketArn").contains("aws-wing-website")); assert(website.get("bucketName").contains("aws-wing-website")); @@ -33,4 +29,4 @@ test "validates the AWS bucket name" { } // If the test is not on AWS, it should not fail, so I am returning true. assert(true); -} \ No newline at end of file +} diff --git a/tests/valid/casting.test.w b/tests/valid/casting.test.w index e4ecffbbd1e..58412dcd403 100644 --- a/tests/valid/casting.test.w +++ b/tests/valid/casting.test.w @@ -1,10 +1,9 @@ bring cloud; -bring util; bring "@cdktf/provider-aws" as aws; let b = new cloud.Bucket(); -if util.env("WING_TARGET") == "tf-aws" { +if @target == "tf-aws" { let s3Bucket: aws.s3Bucket.S3Bucket = unsafeCast(nodeof(b).findChild("Default")); s3Bucket.addOverride("bucket_prefix", "my-prefix-"); diff --git a/tests/valid/dynamo.test.w b/tests/valid/dynamo.test.w index eda854e8be5..f5af47b99ae 100644 --- a/tests/valid/dynamo.test.w +++ b/tests/valid/dynamo.test.w @@ -6,7 +6,6 @@ skip: true bring "@cdktf/provider-aws" as tfaws; bring aws; bring cloud; -bring util; enum AttributeType { String, @@ -23,9 +22,8 @@ class DynamoTable { table: tfaws.dynamodbTable.DynamodbTable; tableName: str; new() { - let target = util.env("WING_TARGET"); - if target != "tf-aws" { - throw "Unsupported target: {target} (expected 'tf-aws')"; + if @target != "tf-aws" { + throw "Unsupported target: {@target} (expected 'tf-aws')"; } this.table = new tfaws.dynamodbTable.DynamodbTable( diff --git a/tests/valid/dynamo_awscdk.test.w b/tests/valid/dynamo_awscdk.test.w index c4cbb3b4cbb..d5a041bb04d 100644 --- a/tests/valid/dynamo_awscdk.test.w +++ b/tests/valid/dynamo_awscdk.test.w @@ -23,9 +23,8 @@ class DynamoTable { table: awscdk.aws_dynamodb.Table; tableName: str; new() { - let target = util.env("WING_TARGET"); - if target != "awscdk" { - throw "Unsupported target: {target} (expected 'awscdk')"; + if @target != "awscdk" { + throw "Unsupported target: {@target} (expected 'awscdk')"; } this.table = new awscdk.aws_dynamodb.Table( diff --git a/tests/valid/inflight_handler_singleton.test.w b/tests/valid/inflight_handler_singleton.test.w index c4cf053c5d8..379d301c0c4 100644 --- a/tests/valid/inflight_handler_singleton.test.w +++ b/tests/valid/inflight_handler_singleton.test.w @@ -30,8 +30,6 @@ let fn2 = new cloud.Function(inflight () => { return "{n}-fn2"; }) as "fn2"; -let sim = util.env("WING_TARGET") == "sim"; - test "single instance of Foo" { let x = fn.invoke(""); let y = fn.invoke(""); @@ -41,7 +39,7 @@ test "single instance of Foo" { // the simulator intentionally reuses the sandbox across invocations // but we can't trust that this will always happen on the cloud - if sim { + if @target == "sim" { expect.equal(y, "101"); log("client has been reused"); } diff --git a/tests/valid/intrinsics.test.w b/tests/valid/intrinsics.test.w index ee23acf5f96..ca9775f9d64 100644 --- a/tests/valid/intrinsics.test.w +++ b/tests/valid/intrinsics.test.w @@ -19,3 +19,8 @@ expect.equal(bar.Bar.getSubdir(), fs.join(@dirname, "subdir")); expect.equal(@filename, currentFile); expect.equal(fs.dirname(currentFile), @dirname); expect.equal(bar.Bar.getSubfile(), fs.join(@dirname, "subdir", "bar.w")); + +// @target + +// some of the targets we are testing in the monorepo - but any string is valid +expect.ok(["sim", "tf-aws", "tf-azure", "tf-gcp", "awscdk"].contains(@target)); diff --git a/tools/hangar/__snapshots__/test_corpus/sdk_tests/resource/on-start.test.w_test_sim.md b/tools/hangar/__snapshots__/test_corpus/sdk_tests/resource/on-start.test.w_test_sim.md index dd4557439b3..7a2968f04e6 100644 --- a/tools/hangar/__snapshots__/test_corpus/sdk_tests/resource/on-start.test.w_test_sim.md +++ b/tools/hangar/__snapshots__/test_corpus/sdk_tests/resource/on-start.test.w_test_sim.md @@ -3,14 +3,14 @@ ## stdout.log ```log [ERROR] method calls fail if the resource fails to start | Error: unexpected error! - --> on-start.test.w:6:5 + --> on-start.test.w:5:5 | | inflight class OnStartThrowerBackend impl sim.IResource { | new() { -6 | throw "unexpected error!"; +5 | throw "unexpected error!"; | ^ -at $inflight_init /on-start.test.w:6:5 -at /on-start.test.w:17:18 +at $inflight_init /on-start.test.w:5:5 +at /on-start.test.w:16:18 [ERROR] method calls fail if the resource fails to start | Error: root/Default/OnStartThrower/Resource failed to start: Error: unexpected error! [ERROR] method calls fail if the resource fails to start | Error: Resource is not running (it may have crashed or stopped) pass ─ on-start.test.wsim » root/Default/test:method calls fail if the resource fails to start diff --git a/tools/hangar/__snapshots__/test_corpus/sdk_tests/resource/on-stop.test.w_test_sim.md b/tools/hangar/__snapshots__/test_corpus/sdk_tests/resource/on-stop.test.w_test_sim.md index da5227a4fdf..5e6cb205fb8 100644 --- a/tools/hangar/__snapshots__/test_corpus/sdk_tests/resource/on-stop.test.w_test_sim.md +++ b/tools/hangar/__snapshots__/test_corpus/sdk_tests/resource/on-stop.test.w_test_sim.md @@ -3,13 +3,13 @@ ## stdout.log ```log [ERROR] if a resource throws an error on stopping, it doesn't crash the simulation | Error: unexpected error! - --> on-stop.test.w:6:5 + --> on-stop.test.w:5:5 | | inflight class OnStopThrowerBackend impl sim.IResource { | pub onStop() { -6 | throw "unexpected error!"; +5 | throw "unexpected error!"; | ^ -at onStop /on-stop.test.w:6:5 +at onStop /on-stop.test.w:5:5 pass ─ on-stop.test.wsim » root/Default/test:if a resource throws an error on stopping, it doesn't crash the simulation Tests 1 passed (1) diff --git a/tools/hangar/__snapshots__/test_corpus/sdk_tests/schedule/init.test.w_compile_tf-aws.md b/tools/hangar/__snapshots__/test_corpus/sdk_tests/schedule/init.test.w_compile_tf-aws.md new file mode 100644 index 00000000000..e93a393f163 --- /dev/null +++ b/tools/hangar/__snapshots__/test_corpus/sdk_tests/schedule/init.test.w_compile_tf-aws.md @@ -0,0 +1,33 @@ +# [init.test.w](../../../../../../tests/sdk_tests/schedule/init.test.w) | compile | tf-aws + +## main.tf.json +```json +{ + "//": { + "metadata": { + "backend": "local", + "stackName": "root" + }, + "outputs": {} + }, + "provider": { + "aws": [ + {} + ] + }, + "resource": { + "aws_cloudwatch_event_rule": { + "s0_Schedule_7FE1E150": { + "//": { + "metadata": { + "path": "root/Default/Default/s0/Schedule", + "uniqueId": "s0_Schedule_7FE1E150" + } + }, + "schedule_expression": "rate(5 minutes)" + } + } + } +} +``` + diff --git a/tools/hangar/__snapshots__/test_corpus/sdk_tests/schedule/init.test.w_test_sim.md b/tools/hangar/__snapshots__/test_corpus/sdk_tests/schedule/init.test.w_test_sim.md new file mode 100644 index 00000000000..9329ccefd9c --- /dev/null +++ b/tools/hangar/__snapshots__/test_corpus/sdk_tests/schedule/init.test.w_test_sim.md @@ -0,0 +1,12 @@ +# [init.test.w](../../../../../../tests/sdk_tests/schedule/init.test.w) | test | sim + +## stdout.log +```log +pass ─ init.test.wsim (no tests) + +Tests 1 passed (1) +Snapshots 1 skipped +Test Files 1 passed (1) +Duration +``` + diff --git a/tools/hangar/__snapshots__/test_corpus/valid/casting.test.w_compile_tf-aws.md b/tools/hangar/__snapshots__/test_corpus/valid/casting.test.w_compile_tf-aws.md index 47b9f5b4e68..86887482149 100644 --- a/tools/hangar/__snapshots__/test_corpus/valid/casting.test.w_compile_tf-aws.md +++ b/tools/hangar/__snapshots__/test_corpus/valid/casting.test.w_compile_tf-aws.md @@ -85,11 +85,10 @@ class $Root extends $stdlib.std.Resource { $helpers.nodeof(this).root.$preflightTypesMap = { }; let $preflightTypesMap = {}; const cloud = $stdlib.cloud; - const util = $stdlib.util; const aws = require("@cdktf/provider-aws"); $helpers.nodeof(this).root.$preflightTypesMap = $preflightTypesMap; const b = globalThis.$ClassFactory.new("@winglang/sdk.cloud.Bucket", cloud.Bucket, this, "Bucket"); - if ($helpers.eq((util.Util.env("WING_TARGET")), "tf-aws")) { + if ($helpers.eq(process.env.WING_TARGET, "tf-aws")) { const s3Bucket = ($helpers.nodeof(b).findChild("Default")); (s3Bucket.addOverride("bucket_prefix", "my-prefix-")); console.log($helpers.nodeof(s3Bucket).path); diff --git a/tools/hangar/__snapshots__/test_corpus/valid/inflight_handler_singleton.test.w_compile_tf-aws.md b/tools/hangar/__snapshots__/test_corpus/valid/inflight_handler_singleton.test.w_compile_tf-aws.md index 31d6ec7983f..385847fa764 100644 --- a/tools/hangar/__snapshots__/test_corpus/valid/inflight_handler_singleton.test.w_compile_tf-aws.md +++ b/tools/hangar/__snapshots__/test_corpus/valid/inflight_handler_singleton.test.w_compile_tf-aws.md @@ -51,7 +51,7 @@ module.exports = function({ $foo }) { "use strict"; const $helpers = require("@winglang/sdk/lib/helpers"); const $macros = require("@winglang/sdk/lib/macros"); -module.exports = function({ $expect_Util, $fn, $fn2, $sim }) { +module.exports = function({ $expect_Util, $fn, $fn2 }) { class $Closure3 { constructor($args) { const { } = $args; @@ -64,7 +64,7 @@ module.exports = function({ $expect_Util, $fn, $fn2, $sim }) { const y = (await $fn.invoke("")); const z = (await $fn2.invoke("")); (await $expect_Util.equal(x, "100")); - if ($sim) { + if ($helpers.eq(process.env.WING_TARGET, "sim")) { (await $expect_Util.equal(y, "101")); console.log("client has been reused"); } @@ -546,7 +546,6 @@ class $Root extends $stdlib.std.Resource { $expect_Util: ${$stdlib.core.liftObject($stdlib.core.toLiftableModuleType(globalThis.$ClassFactory.resolveType("@winglang/sdk.expect.Util") ?? expect.Util, "@winglang/sdk/expect", "Util"))}, $fn: ${$stdlib.core.liftObject(fn)}, $fn2: ${$stdlib.core.liftObject(fn2)}, - $sim: ${$stdlib.core.liftObject(sim)}, }) `; } @@ -556,13 +555,11 @@ class $Root extends $stdlib.std.Resource { [$stdlib.core.toLiftableModuleType(globalThis.$ClassFactory.resolveType("@winglang/sdk.expect.Util") ?? expect.Util, "@winglang/sdk/expect", "Util"), ["equal"]], [fn, ["invoke"]], [fn2, ["invoke"]], - [sim, []], ], "$inflight_init": [ [$stdlib.core.toLiftableModuleType(globalThis.$ClassFactory.resolveType("@winglang/sdk.expect.Util") ?? expect.Util, "@winglang/sdk/expect", "Util"), []], [fn, []], [fn2, []], - [sim, []], ], }); } @@ -630,7 +627,6 @@ class $Root extends $stdlib.std.Resource { const foo = new Foo(this, "Foo"); const fn = globalThis.$ClassFactory.new("@winglang/sdk.cloud.Function", cloud.Function, this, "Function", new $Closure1(this, "$Closure1")); const fn2 = globalThis.$ClassFactory.new("@winglang/sdk.cloud.Function", cloud.Function, this, "fn2", new $Closure2(this, "$Closure2")); - const sim = $helpers.eq((util.Util.env("WING_TARGET")), "sim"); globalThis.$ClassFactory.new("@winglang/sdk.std.Test", std.Test, this, "test:single instance of Foo", new $Closure3(this, "$Closure3")); const fn3 = globalThis.$ClassFactory.new("@winglang/sdk.cloud.Function", cloud.Function, this, "fn3", new $Closure4(this, "$Closure4")); globalThis.$ClassFactory.new("@winglang/sdk.std.Test", std.Test, this, "test:Foo state is not shared between function invocations", new $Closure5(this, "$Closure5")); diff --git a/tools/hangar/__snapshots__/test_corpus/valid/intrinsics.test.w_compile_tf-aws.md b/tools/hangar/__snapshots__/test_corpus/valid/intrinsics.test.w_compile_tf-aws.md index 98e4e785968..8c28992ceed 100644 --- a/tools/hangar/__snapshots__/test_corpus/valid/intrinsics.test.w_compile_tf-aws.md +++ b/tools/hangar/__snapshots__/test_corpus/valid/intrinsics.test.w_compile_tf-aws.md @@ -134,6 +134,7 @@ class $Root extends $stdlib.std.Resource { (expect.Util.equal($helpers.resolve(__dirname, "../../../intrinsics.test.w"), currentFile)); (expect.Util.equal((fs.Util.dirname(currentFile)), $helpers.resolve(__dirname, "../../.."))); (expect.Util.equal((bar.Bar.getSubfile(this)), (fs.Util.join($helpers.resolve(__dirname, "../../.."), "subdir", "bar.w")))); + (expect.Util.ok($macros.__Array_contains(false, ["sim", "tf-aws", "tf-azure", "tf-gcp", "awscdk"], process.env.WING_TARGET))); } } const $APP = $PlatformManager.createApp({ outdir: $outdir, name: "intrinsics.test", rootConstruct: $Root, isTestEnvironment: $wing_is_test, entrypointDir: process.env['WING_SOURCE_DIR'], rootId: process.env['WING_ROOT_ID'] });