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") +		} +	} +}  | 
