diff --git a/tool/microkit/tests/sdf/ch_end_invalid_notify.xml b/tool/microkit/tests/sdf/ch_end_invalid_notify.xml
new file mode 100644
index 000000000..8a0374f81
--- /dev/null
+++ b/tool/microkit/tests/sdf/ch_end_invalid_notify.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tool/microkit/tests/sdf/ch_end_invalid_pp.xml b/tool/microkit/tests/sdf/ch_end_invalid_pp.xml
new file mode 100644
index 000000000..b4f27f0e3
--- /dev/null
+++ b/tool/microkit/tests/sdf/ch_end_invalid_pp.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tool/microkit/tests/sdf/ch_invalid_element.xml b/tool/microkit/tests/sdf/ch_invalid_element.xml
new file mode 100644
index 000000000..1b4047fd5
--- /dev/null
+++ b/tool/microkit/tests/sdf/ch_invalid_element.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tool/microkit/tests/sdf/ch_not_enough_ends.xml b/tool/microkit/tests/sdf/ch_not_enough_ends.xml
new file mode 100644
index 000000000..d4874d8ef
--- /dev/null
+++ b/tool/microkit/tests/sdf/ch_not_enough_ends.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tool/microkit/tests/sdf/ch_too_many_ends.xml b/tool/microkit/tests/sdf/ch_too_many_ends.xml
new file mode 100644
index 000000000..8f9bd4e00
--- /dev/null
+++ b/tool/microkit/tests/sdf/ch_too_many_ends.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tool/microkit/tests/test.rs b/tool/microkit/tests/test.rs
index 8f3c0fcc5..58e0e44d9 100644
--- a/tool/microkit/tests/test.rs
+++ b/tool/microkit/tests/test.rs
@@ -320,6 +320,46 @@ mod channel {
"Error: invalid PD name 'invalidpd' on element 'end': ",
)
}
+
+ #[test]
+ fn test_invalid_element() {
+ check_error(
+ "ch_invalid_element.xml",
+ "Error: invalid XML element 'ending': ",
+ )
+ }
+
+ #[test]
+ fn test_not_enough_ends() {
+ check_error(
+ "ch_not_enough_ends.xml",
+ "Error: exactly two end elements must be specified on element 'channel': ",
+ )
+ }
+
+ #[test]
+ fn test_too_many_ends() {
+ check_error(
+ "ch_too_many_ends.xml",
+ "Error: exactly two end elements must be specified on element 'channel': ",
+ )
+ }
+
+ #[test]
+ fn test_end_invalid_pp() {
+ check_error(
+ "ch_end_invalid_pp.xml",
+ "Error: pp must be 'true'/'false' on element 'end': ",
+ )
+ }
+
+ #[test]
+ fn test_end_invalid_notify() {
+ check_error(
+ "ch_end_invalid_notify.xml",
+ "Error: notify must be 'true'/'false' on element 'end': ",
+ )
+ }
}
#[cfg(test)]