protected void generateTestCaseValues()

in codegen/smithy-go-codegen/src/main/java/software/amazon/smithy/go/codegen/integration/HttpProtocolUnitTestRequestGenerator.java [114:208]


    protected void generateTestCaseValues(GoWriter writer, HttpRequestTestCase testCase) {
        writeStructField(writer, "Params", inputShape, testCase.getParams());

        writeStructField(writer, "ExpectMethod", "$S", testCase.getMethod());
        writeStructField(writer, "ExpectURIPath", "$S", testCase.getUri());

        writeQueryItemsStructField(writer, "ExpectQuery", testCase.getQueryParams());
        writeStringSliceStructField(writer, "RequireQuery", testCase.getRequireQueryParams());
        writeStringSliceStructField(writer, "ForbidQuery", testCase.getForbidQueryParams());

        writeHeaderStructField(writer, "ExpectHeader", testCase.getHeaders());
        writeStringSliceStructField(writer, "RequireHeader", testCase.getRequireHeaders());
        writeStringSliceStructField(writer, "ForbidHeader", testCase.getForbidHeaders());

        if (testCase.getHost().isPresent()) {
            writeStructField(writer, "Host", (w) -> {
                var hostValue = testCase.getHost()
                        .orElse("");
                if (hostValue.length() == 0) {
                    w.write("nil,");
                    return;
                }
                if (hostValue.split("://", 2).length == 1) {
                    hostValue = "https://" + hostValue;
                }
                w.pushState();
                w.putContext("url", SymbolUtils.createPointableSymbolBuilder("URL",
                        SmithyGoDependency.NET_URL).build());
                w.putContext("parse", SymbolUtils.createPointableSymbolBuilder("Parse",
                        SmithyGoDependency.NET_URL).build());
                w.putContext("host", hostValue);
                w.write("""
                        func () $url:P {
                            host := $host:S
                            if len(host) == 0 {
                                return nil
                            }
                            u, err := $parse:T(host)
                            if err != nil {
                                panic(err)
                            }
                            return u
                        }(),""");
                w.popState();
            });
        }

        String bodyMediaType = "";
        if (testCase.getBodyMediaType().isPresent()) {
            bodyMediaType = testCase.getBodyMediaType().get();
            writeStructField(writer, "BodyMediaType", "$S", bodyMediaType);
        }
        if (testCase.getBody().isPresent()) {
            String body = testCase.getBody().get();

            writer.addUseImports(SmithyGoDependency.SMITHY_TESTING);
            writer.addUseImports(SmithyGoDependency.IO);
            if (body.length() == 0) {
                writeStructField(writer, "BodyAssert", "func(actual io.Reader) error {\n"
                                                       + "   return smithytesting.CompareReaderEmpty(actual)\n"
                                                       + "}");
            } else {
                String compareFunc = "";
                switch (bodyMediaType.toLowerCase()) {
                    case "application/json":
                        compareFunc = String.format(
                                "return smithytesting.CompareJSONReaderBytes(actual, []byte(`%s`))",
                                body);
                        break;
                    case "application/xml":
                        compareFunc = String.format(
                                "return smithytesting.CompareXMLReaderBytes(actual, []byte(`%s`))",
                                body);
                        break;
                    case "application/x-www-form-urlencoded":
                        compareFunc = String.format(
                                "return smithytesting.CompareURLFormReaderBytes(actual, []byte(`%s`))",
                                body);
                        break;
                    case "application/cbor":
                        compareFunc = String.format(
                                "return smithytesting.CompareCBOR(actual, `%s`)",
                                body);
                        break;
                    default:
                        compareFunc = String.format(
                                "return smithytesting.CompareReaderBytes(actual, []byte(`%s`))",
                                body);
                        break;

                }
                writeStructField(writer, "BodyAssert", "func(actual io.Reader) error {\n $L \n}", compareFunc);
            }
        }
    }