diff -r faef59c8db05 -r 8e425e340ca1 xmpp_test.go
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/xmpp_test.go Sun Dec 25 18:46:13 2011 -0700
@@ -0,0 +1,105 @@
+// 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"
+ "reflect"
+ "strings"
+ "sync"
+ "testing"
+ "xml"
+)
+
+func TestReadError(t *testing.T) {
+ r := strings.NewReader(``)
+ ch := make(chan interface{})
+ go readXml(r, ch, false)
+ 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, "", 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, false)
+ 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, "", 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, false)
+ 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, true)
+ }()
+ ch <- obj
+ close(ch)
+ wg.Wait()
+ return w.String()
+}
+
+func TestWriteError(t *testing.T) {
+ se := &StreamError{Any: definedCondition{XMLName:
+ xml.Name{Local: "blah"}}}
+ str := testWrite(se)
+ exp := ``
+ assertEquals(t, exp, str)
+
+ se = &StreamError{Any: definedCondition{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)
+}