Skip to content

Commit eb18d10

Browse files
committed
Add AWS REST XML protocol tests
1 parent bcaf8b6 commit eb18d10

16 files changed

+3150
-0
lines changed

settings.gradle.kts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
rootProject.name = "smithy"
22
include(":smithy-aws-traits")
33
include(":smithy-aws-apigateway-openapi")
4+
include(":smithy-aws-protocol-tests")
45
include(":smithy-cli")
56
include(":smithy-codegen-core")
67
include(":smithy-codegen-freemarker")
@@ -13,3 +14,10 @@ include(":smithy-jsonschema")
1314
include(":smithy-openapi")
1415
include(":smithy-utils")
1516
include(":smithy-protocol-test-traits")
17+
18+
pluginManagement {
19+
repositories {
20+
mavenLocal()
21+
gradlePluginPortal()
22+
}
23+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/*
2+
* Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License").
5+
* You may not use this file except in compliance with the License.
6+
* A copy of the License is located at
7+
*
8+
* http://aws.amazon.com/apache2.0
9+
*
10+
* or in the "license" file accompanying this file. This file is distributed
11+
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
12+
* express or implied. See the License for the specific language governing
13+
* permissions and limitations under the License.
14+
*/
15+
16+
description = "Defines protocol tests for AWS HTTP protocols."
17+
extra["displayName"] = "Smithy :: AWS :: Protocol Tests"
18+
extra["moduleName"] = "software.amazon.smithy.aws.protocoltests"
19+
20+
plugins {
21+
id("software.amazon.smithy").version("0.4.2")
22+
}
23+
24+
dependencies {
25+
api(project(":smithy-protocol-test-traits"))
26+
api(project(":smithy-aws-traits"))
27+
}
Lines changed: 255 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,255 @@
1+
// This file defines test cases that serialize lists in XML documents.
2+
3+
$version: "0.5.0"
4+
5+
namespace aws.protocols.tests.restxml
6+
7+
use smithy.test#httpRequestTests
8+
use smithy.test#httpResponseTests
9+
10+
/// This test case serializes XML lists for the following cases for both
11+
/// input and output:
12+
///
13+
/// 1. Normal XML lists.
14+
/// 2. Normal XML sets.
15+
/// 3. XML lists of lists.
16+
/// 4. XML lists with @xmlName on its members
17+
/// 5. Flattened XML lists.
18+
/// 6. Flattened XML lists with @xmlName.
19+
/// 7. Lists of structures.
20+
@idempotent
21+
@http(uri: "/XmlLists", method: "PUT")
22+
operation XmlLists(XmlListsInputOutput) -> XmlListsInputOutput
23+
24+
apply XmlLists @httpRequestTests([
25+
{
26+
id: "XmlLists",
27+
description: "Serializes XML lists",
28+
protocol: "aws.rest-xml",
29+
method: "PUT",
30+
uri: "/XmlLists",
31+
body: """
32+
<XmlListsInputOutput>
33+
<stringList>
34+
<member>foo</member>
35+
<member>bar</member>
36+
</stringList>
37+
<stringSet>
38+
<member>foo</member>
39+
<member>bar</member>
40+
</stringSet>
41+
<integerList>
42+
<member>1</member>
43+
<member>2</member>
44+
</integerList>
45+
<booleanList>
46+
<member>true</member>
47+
<member>false</member>
48+
</booleanList>
49+
<timestampList>
50+
<member>2014-04-29T18:30:38Z</member>
51+
<member>2014-04-29T18:30:38Z</member>
52+
</timestampList>
53+
<enumList>
54+
<member>Foo</member>
55+
<member>0</member>
56+
</enumList>
57+
<nestedStringList>
58+
<member>
59+
<member>foo</member>
60+
<member>bar</member>
61+
</member>
62+
<member>
63+
<member>baz</member>
64+
<member>qux</member>
65+
</member>
66+
<nestedStringList>
67+
<renamed>
68+
<item>foo</item>
69+
<item>bar</item>
70+
</renamed>
71+
<flattenedList>hi</flattenedList>
72+
<flattenedList>bye</flattenedList>
73+
<customName>yep</customName>
74+
<customName>nope</customName>
75+
<myStructureList>
76+
<item>
77+
<value>1</value>
78+
<other>2</other>
79+
</item>
80+
<item>
81+
<value>3</value>
82+
<other>4</other>
83+
</item>
84+
</myStructureList>
85+
</XmlListsInputOutput>
86+
""",
87+
bodyMediaType: "application/xml",
88+
headers: {
89+
"Content-Type": "application/xml"
90+
},
91+
params: {
92+
stringList: ["foo", "bar"],
93+
stringSet: ["foo", "bar"],
94+
integerList: [1, 2],
95+
booleanList: [true, false],
96+
timestampList: [1398796238, 1398796238],
97+
enumList: ["Foo", "0"],
98+
nestedStringList: [["foo", "bar"], ["baz", "qux"]],
99+
renamedListMembers: ["foo", "bar"],
100+
flattenedList: ["hi", "bye"],
101+
flattenedList2: ["yep", "nope"],
102+
structureList: [
103+
{
104+
a: "1",
105+
b: "2",
106+
},
107+
{
108+
a: "3",
109+
b: "4",
110+
}
111+
]
112+
}
113+
}
114+
])
115+
116+
apply XmlLists @httpResponseTests([
117+
{
118+
id: "XmlLists",
119+
description: "Serializes XML lists",
120+
protocol: "aws.rest-xml",
121+
code: 200,
122+
body: """
123+
<XmlListsInputOutput>
124+
<stringList>
125+
<member>foo</member>
126+
<member>bar</member>
127+
</stringList>
128+
<stringSet>
129+
<member>foo</member>
130+
<member>bar</member>
131+
</stringSet>
132+
<integerList>
133+
<member>1</member>
134+
<member>2</member>
135+
</integerList>
136+
<booleanList>
137+
<member>true</member>
138+
<member>false</member>
139+
</booleanList>
140+
<timestampList>
141+
<member>2014-04-29T18:30:38Z</member>
142+
<member>2014-04-29T18:30:38Z</member>
143+
</timestampList>
144+
<enumList>
145+
<member>Foo</member>
146+
<member>0</member>
147+
</enumList>
148+
<nestedStringList>
149+
<member>
150+
<member>foo</member>
151+
<member>bar</member>
152+
</member>
153+
<member>
154+
<member>baz</member>
155+
<member>qux</member>
156+
</member>
157+
<nestedStringList>
158+
<renamed>
159+
<item>foo</item>
160+
<item>bar</item>
161+
</renamed>
162+
<flattenedList>hi</flattenedList>
163+
<flattenedList>bye</flattenedList>
164+
<customName>yep</customName>
165+
<customName>nope</customName>
166+
<myStructureList>
167+
<item>
168+
<value>1</value>
169+
<other>2</other>
170+
</item>
171+
<item>
172+
<value>3</value>
173+
<other>4</other>
174+
</item>
175+
</myStructureList>
176+
</XmlListsInputOutput>
177+
""",
178+
bodyMediaType: "application/xml",
179+
headers: {
180+
"Content-Type": "application/xml"
181+
},
182+
params: {
183+
stringList: ["foo", "bar"],
184+
stringSet: ["foo", "bar"],
185+
integerList: [1, 2],
186+
booleanList: [true, false],
187+
timestampList: [1398796238, 1398796238],
188+
enumList: ["Foo", "0"],
189+
nestedStringList: [["foo", "bar"], ["baz", "qux"]],
190+
renamedListMembers: ["foo", "bar"],
191+
flattenedList: ["hi", "bye"],
192+
flattenedList2: ["yep", "nope"],
193+
structureList: [
194+
{
195+
a: "1",
196+
b: "2",
197+
},
198+
{
199+
a: "3",
200+
b: "4",
201+
}
202+
]
203+
}
204+
}
205+
])
206+
207+
structure XmlListsInputOutput {
208+
stringList: StringList,
209+
210+
stringSet: StringSet,
211+
212+
integerList: IntegerList,
213+
214+
booleanList: BooleanList,
215+
216+
timestampList: TimestampList,
217+
218+
enumList: FooEnumList,
219+
220+
nestedStringList: NestedStringList,
221+
222+
@xmlName("renamed")
223+
renamedListMembers: RenamedListMembers,
224+
225+
@xmlFlattened
226+
// The xmlname on the targeted list is ignored, and the member name is used.
227+
flattenedList: RenamedListMembers,
228+
229+
@xmlName("customName")
230+
@xmlFlattened
231+
// the xmlName trait on the targeted list's member is ignored when
232+
// serializing flattened lists in structures.
233+
flattenedList2: RenamedListMembers,
234+
235+
@xmlName("myStructureList")
236+
structureList: StructureList
237+
}
238+
239+
list RenamedListMembers {
240+
@xmlName("item")
241+
member: String,
242+
}
243+
244+
list StructureList {
245+
@xmlName("item")
246+
member: StructureListMember,
247+
}
248+
249+
structure StructureListMember {
250+
@xmlName("value")
251+
a: String,
252+
253+
@xmlName("other")
254+
b: String,
255+
}

0 commit comments

Comments
 (0)