Unverified Commit 8911e865 authored by Harry Barber's avatar Harry Barber Committed by GitHub
Browse files

Make unitTest accept a closure using RustWriter (#1450)

* Make `unitTest` take `RustWriter.() -> Unit`

* Convert `unitTests` which use dependencies to use `unitTest` with `RustWriter.() -> Unit`
parent 66ff2bd0
Loading
Loading
Loading
Loading
+38 −36
Original line number Diff line number Diff line
@@ -8,6 +8,8 @@ package software.amazon.smithy.rustsdk
import org.junit.jupiter.api.Test
import software.amazon.smithy.model.node.ObjectNode
import software.amazon.smithy.rust.codegen.rustlang.CargoDependency
import software.amazon.smithy.rust.codegen.rustlang.asType
import software.amazon.smithy.rust.codegen.rustlang.rustTemplate
import software.amazon.smithy.rust.codegen.smithy.CodegenContext
import software.amazon.smithy.rust.codegen.smithy.CodegenVisitor
import software.amazon.smithy.rust.codegen.smithy.RustCrate
@@ -24,6 +26,10 @@ import software.amazon.smithy.rust.codegen.testutil.unitTest
import software.amazon.smithy.rust.codegen.util.runCommand

internal class EndpointConfigCustomizationTest {
    private val codegenScope = arrayOf(
        "http" to CargoDependency.Http.asType(),
        "aws_types" to awsTypes(AwsTestRuntimeConfig).asType()
    )

    private val model = """
        namespace test
@@ -163,51 +169,47 @@ internal class EndpointConfigCustomizationTest {
    fun `support region-specific endpoint overrides`() {
        validateEndpointCustomizationForService("test#TestService") { crate ->
            crate.lib {
                it.addDependency(awsTypes(AwsTestRuntimeConfig))
                it.addDependency(CargoDependency.Http)
                it.unitTest(
                    "region_override",
                it.unitTest("region_override") {
                    rustTemplate(
                        """
                    use aws_types::region::Region;
                    use http::Uri;
                        let conf = crate::config::Config::builder().build();
                        let endpoint = conf.endpoint_resolver
                        .resolve_endpoint(&Region::new("fips-ca-central-1")).expect("default resolver produces a valid endpoint");
                    let mut uri = Uri::from_static("/?k=v");
                            .resolve_endpoint(&#{aws_types}::region::Region::new("fips-ca-central-1")).expect("default resolver produces a valid endpoint");
                        let mut uri = #{http}::Uri::from_static("/?k=v");
                        endpoint.set_endpoint(&mut uri, None);
                    assert_eq!(uri, Uri::from_static("https://access-analyzer-fips.ca-central-1.amazonaws.com/?k=v"));
                    """
                        assert_eq!(uri, #{http}::Uri::from_static("https://access-analyzer-fips.ca-central-1.amazonaws.com/?k=v"));
                        """,
                        *codegenScope
                    )
                }
            }
        }
    }

    @Test
    fun `support region-agnostic services`() {
        validateEndpointCustomizationForService("test#NoRegions") { crate ->
            crate.lib {
                it.addDependency(awsTypes(AwsTestRuntimeConfig))
                it.addDependency(CargoDependency.Http)
                it.unitTest(
                    "global_services",
                it.unitTest("global_services") {
                    rustTemplate(
                        """
                    use aws_types::region::Region;
                    use http::Uri;
                        let conf = crate::config::Config::builder().build();
                        let endpoint = conf.endpoint_resolver
                        .resolve_endpoint(&Region::new("us-east-1")).expect("default resolver produces a valid endpoint");
                    let mut uri = Uri::from_static("/?k=v");
                            .resolve_endpoint(&#{aws_types}::region::Region::new("us-east-1")).expect("default resolver produces a valid endpoint");
                        let mut uri = #{http}::Uri::from_static("/?k=v");
                        endpoint.set_endpoint(&mut uri, None);
                    assert_eq!(uri, Uri::from_static("https://iam.amazonaws.com/?k=v"));
                        assert_eq!(uri, #{http}::Uri::from_static("https://iam.amazonaws.com/?k=v"));

                        let endpoint = conf.endpoint_resolver
                        .resolve_endpoint(&Region::new("iam-fips")).expect("default resolver produces a valid endpoint");
                    let mut uri = Uri::from_static("/?k=v");
                            .resolve_endpoint(&#{aws_types}::region::Region::new("iam-fips")).expect("default resolver produces a valid endpoint");
                        let mut uri = #{http}::Uri::from_static("/?k=v");
                        endpoint.set_endpoint(&mut uri, None);
                    assert_eq!(uri, Uri::from_static("https://iam-fips.amazonaws.com/?k=v"));
                    """
                        assert_eq!(uri, #{http}::Uri::from_static("https://iam-fips.amazonaws.com/?k=v"));
                        """,
                        *codegenScope
                    )
                }
            }
        }
    }
}
+12 −0
Original line number Diff line number Diff line
@@ -171,6 +171,18 @@ fun RustWriter.unitTest(
    }
}

/*
 * Writes a Rust-style unit test
 */
fun RustWriter.unitTest(
    name: String,
    vararg args: Any,
    block: RustWriter.() -> Unit
): RustWriter {
    raw("#[test]")
    return rustBlock("fn $name()", *args, block = block)
}

/**
 * WriterDelegator used for test purposes
 *