package xmpp import ( "encoding/xml" "strings" "testing" ) // 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 var s session factory := func(tp *int, i int) func(*session, []xml.Token) { return func(*session, []xml.Token) { *tp = i } } tests := []routerTest{ routerTest{``, 1}, routerTest{``, 2}, routerTest{``, 3}, routerTest{``, 4}, routerTest{``, 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(&s, tokens, testRouting) if testpoint != v.value { t.Fatalf("XML element was not routed correctly!\n") } } }