diff --git a/.chronus/changes/complex-array-tests-2026-2-12-18-44-14.md b/.chronus/changes/complex-array-tests-2026-2-12-18-44-14.md
new file mode 100644
index 00000000000..35d65b72758
--- /dev/null
+++ b/.chronus/changes/complex-array-tests-2026-2-12-18-44-14.md
@@ -0,0 +1,7 @@
+---
+changeKind: feature
+packages:
+ - "@typespec/http-specs"
+---
+
+Add tests for complex xml array definitions
diff --git a/packages/http-specs/spec-summary.md b/packages/http-specs/spec-summary.md
index c68a503c558..a583dcaab9b 100644
--- a/packages/http-specs/spec-summary.md
+++ b/packages/http-specs/spec-summary.md
@@ -2995,6 +2995,60 @@ Expected response body:
```
+### Payload_Xml_ComplexArrayNoItemsValue_get
+
+- Endpoint: `get /payload/xml/complexArrayModelNoItems`
+
+Expected response body:
+
+```xml
+
+```
+
+### Payload_Xml_ComplexArrayNoItemsValue_put
+
+- Endpoint: `put /payload/xml/complexArrayModelNoItems`
+
+Expected request body:
+
+```xml
+
+```
+
+### Payload_Xml_ComplexArrayValue_get
+
+- Endpoint: `get /payload/xml/complexArrayModel`
+
+Expected response body:
+
+```xml
+
+
+ 123abc
+
+
+ 123abc
+
+
+```
+
+### Payload_Xml_ComplexArrayValue_put
+
+- Endpoint: `put /payload/xml/complexArrayModel`
+
+Expected request body:
+
+```xml
+
+
+ 123abc
+
+
+ 123abc
+
+
+```
+
### Payload_Xml_ModelWithArrayOfModelValue_get
- Endpoint: `get /payload/xml/modelWithArrayOfModel`
diff --git a/packages/http-specs/specs/payload/xml/main.tsp b/packages/http-specs/specs/payload/xml/main.tsp
index d768dfb2d2d..2ba28990763 100644
--- a/packages/http-specs/specs/payload/xml/main.tsp
+++ b/packages/http-specs/specs/payload/xml/main.tsp
@@ -126,6 +126,21 @@ model XmlErrorBody {
code: int32;
}
+@doc("The complex model.")
+@name("ComplexModel")
+model ComplexModel {
+ @doc("The unique ID for the complex model.")
+ @name("Id")
+ id: string;
+}
+
+@doc("Contains an array of complex models with XML unwrapped representation.")
+model ComplexArrayModel {
+ @doc("The array of complex models.")
+ @unwrapped
+ items: Array;
+}
+
@doc("Template for XML operations")
interface XmlOperations {
@scenario
@@ -389,3 +404,30 @@ interface XmlErrorValue {
@body body: SimpleModel;
} | XmlError;
}
+
+@doc("Operations for the ComplexArrayModel type with a single item.")
+@route("/complexArrayModel")
+interface ComplexArrayValue
+ extends XmlOperations<
+ ComplexArrayModel,
+ """
+
+
+ 123abc
+
+
+ 123abc
+
+
+ """
+ > {}
+
+@doc("Operations for the ComplexArrayModel type with no items (empty array).")
+@route("/complexArrayModelNoItems")
+interface ComplexArrayNoItemsValue
+ extends XmlOperations<
+ ComplexArrayModel,
+ """
+
+ """
+ > {}
diff --git a/packages/http-specs/specs/payload/xml/mockapi.ts b/packages/http-specs/specs/payload/xml/mockapi.ts
index de2d3f85834..b31e665b041 100644
--- a/packages/http-specs/specs/payload/xml/mockapi.ts
+++ b/packages/http-specs/specs/payload/xml/mockapi.ts
@@ -136,6 +136,19 @@ export const modelWithDatetime = `
`;
+export const complexArrayModel = `
+
+
+ 123abc
+
+
+ 123abc
+
+
+`;
+
+export const complexArrayModelNoItems = ``;
+
// Some clients serialize UTC datetimes without trailing zero milliseconds. Both
// "2022-08-26T18:38:00.000Z" and "2022-08-26T18:38:00Z" are valid RFC3339 representations
// of the same instant; accept either form.
@@ -317,3 +330,17 @@ Scenarios.Payload_Xml_XmlErrorValue_get = passOnCode(400, {
},
kind: "MockApiDefinition",
});
+
+const Payload_Xml_ComplexArrayModel = createServerTests(
+ "/payload/xml/complexArrayModel",
+ complexArrayModel,
+);
+Scenarios.Payload_Xml_ComplexArrayValue_get = Payload_Xml_ComplexArrayModel.get;
+Scenarios.Payload_Xml_ComplexArrayValue_put = Payload_Xml_ComplexArrayModel.put;
+
+const Payload_Xml_ComplexArrayModelNoItems = createServerTests(
+ "/payload/xml/complexArrayModelNoItems",
+ complexArrayModelNoItems,
+);
+Scenarios.Payload_Xml_ComplexArrayNoItemsValue_get = Payload_Xml_ComplexArrayModelNoItems.get;
+Scenarios.Payload_Xml_ComplexArrayNoItemsValue_put = Payload_Xml_ComplexArrayModelNoItems.put;