diff -r f464f14e39a7 -r 367e76b3028e xmpp/xmpp_test.go --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xmpp/xmpp_test.go Sat Sep 07 10:04:44 2013 -0700 @@ -0,0 +1,102 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package xmpp + +import ( + "bytes" + "encoding/xml" + "reflect" + "strings" + "sync" + "testing" +) + +func TestReadError(t *testing.T) { + r := strings.NewReader(`` + + ``) + ch := make(chan interface{}) + go readXml(r, ch, make(map[string]func(*xml.Name) interface{})) + x := <-ch + se, ok := x.(*streamError) + if !ok { + t.Fatalf("not StreamError: %T", x) + } + assertEquals(t, "bad-foo", se.Any.XMLName.Local) + assertEquals(t, "blah", se.Any.XMLName.Space) + if se.Text != nil { + t.Errorf("text not nil: %v", se.Text) + } + + r = strings.NewReader(`` + + `Error text`) + ch = make(chan interface{}) + go readXml(r, ch, make(map[string]func(*xml.Name) interface{})) + x = <-ch + se, ok = x.(*streamError) + if !ok { + t.Fatalf("not StreamError: %v", reflect.TypeOf(x)) + } + assertEquals(t, "bad-foo", se.Any.XMLName.Local) + assertEquals(t, "blah", se.Any.XMLName.Space) + assertEquals(t, "Error text", se.Text.Text) + assertEquals(t, "en", se.Text.Lang) +} + +func TestReadStream(t *testing.T) { + r := strings.NewReader(``) + ch := make(chan interface{}) + go readXml(r, ch, make(map[string]func(*xml.Name) interface{})) + x := <-ch + ss, ok := x.(*stream) + if !ok { + t.Fatalf("not stream: %v", reflect.TypeOf(x)) + } + assertEquals(t, "foo.com", ss.To) + assertEquals(t, "bar.org", ss.From) + assertEquals(t, "42", ss.Id) + assertEquals(t, "1.0", ss.Version) +} + +func testWrite(obj interface{}) string { + w := bytes.NewBuffer(nil) + ch := make(chan interface{}) + var wg sync.WaitGroup + wg.Add(1) + go func() { + defer wg.Done() + writeXml(w, ch) + }() + ch <- obj + close(ch) + wg.Wait() + return w.String() +} + +func TestWriteError(t *testing.T) { + se := &streamError{Any: Generic{XMLName: xml.Name{Local: "blah"}}} + str := testWrite(se) + exp := `` + assertEquals(t, exp, str) + + se = &streamError{Any: Generic{XMLName: xml.Name{Space: NsStreams, Local: "foo"}}, Text: &errText{Lang: "ru", Text: "Пошёл ты"}} + str = testWrite(se) + exp = `Пошёл ты` + assertEquals(t, exp, str) +} + +func TestWriteStream(t *testing.T) { + ss := &stream{To: "foo.org", From: "bar.com", Id: "42", Lang: "en", Version: "1.0"} + str := testWrite(ss) + exp := `` + assertEquals(t, exp, str) +}