diff options
author | xengineering <me@xengineering.eu> | 2023-06-30 11:57:34 +0200 |
---|---|---|
committer | xengineering <me@xengineering.eu> | 2023-06-30 11:57:34 +0200 |
commit | 91766058d76044fa7e07f75c586bc7f89b868328 (patch) | |
tree | d13dcd9d9190b008385912d86918fb70f08f83ad | |
parent | c224e6ebc23d96929d9c3fee9b7987762f68f1dd (diff) | |
download | limox-91766058d76044fa7e07f75c586bc7f89b868328.tar limox-91766058d76044fa7e07f75c586bc7f89b868328.tar.zst limox-91766058d76044fa7e07f75c586bc7f89b868328.zip |
Add unit test for routing function
-rw-r--r-- | xmpp/router_test.go | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/xmpp/router_test.go b/xmpp/router_test.go new file mode 100644 index 0000000..ea13712 --- /dev/null +++ b/xmpp/router_test.go @@ -0,0 +1,69 @@ +package xmpp + +import ( + "encoding/xml" + "testing" + "strings" +) + +// routerTest contains a single test case for the xmpp.router. The XML element +// is given as a string and the value int describes the expected value of a +// test variable inside the corresponding unit test. See TestRouter for +// details. +type routerTest struct { + xml string + value int +} + +// TestRouter tests the xmpp/router.go file. The central functionality is the +// route() function. To test this a fake routing table is created inside this +// test with XML element handler function produced by the factory function +// defined below. each handler simply sets the value of the testpoint variable +// to the value mentioned by the test point. That way the routing can be +// validated. +func TestRouter(t *testing.T) { + var testpoint int + + factory := func(tp *int, i int) func([]xml.Token) { + return func([]xml.Token) { + *tp = i + } + } + + tests := []routerTest{ + routerTest{`<a></a>`, 1}, + routerTest{`<b></b>`, 2}, + routerTest{`<c></c>`, 3}, + routerTest{`<b xmlns='https://xengineering.eu'></b>`, 4}, + routerTest{`<a xmlns='https://xengineering.eu'></a>`, 5}, + } + + testRouting := routingTable{ + {xml.Name{``, `a`}, factory(&testpoint, 1)}, + {xml.Name{``, `b`}, factory(&testpoint, 2)}, + {xml.Name{``, `c`}, factory(&testpoint, 3)}, + {xml.Name{`https://xengineering.eu`, `b`}, factory(&testpoint, 4)}, + {xml.Name{`https://xengineering.eu`, `a`}, factory(&testpoint, 5)}, + } + + for _, v := range tests { + testpoint = 0 + + r := strings.NewReader(v.xml) + d := xml.NewDecoder(r) + tokens := make([]xml.Token, 0) + for { + token, err := d.Token() + if err != nil { + break + } + tokens = append(tokens, xml.CopyToken(token)) + } + + route(tokens, testRouting) + + if testpoint != v.value { + t.Fatalf("XML element was not routed correctly!\n") + } + } +} |