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