parent
47cf94ad01
commit
736abcb5bc
@ -0,0 +1,54 @@
|
||||
package xmpp
|
||||
|
||||
import (
|
||||
"encoding/xml"
|
||||
"testing"
|
||||
|
||||
"gosrc.io/xmpp/stanza"
|
||||
)
|
||||
|
||||
func testPresence(t *testing.T, presence stanza.Presence, reference string) {
|
||||
byteXML, err := xml.Marshal(presence)
|
||||
if err != nil {
|
||||
t.Errorf("XML parse error: %v", err)
|
||||
}
|
||||
xmlText := string(byteXML)
|
||||
if xmlText != reference {
|
||||
t.Errorf("%v does not match %v", xmlText, reference)
|
||||
}
|
||||
}
|
||||
|
||||
func TestPresenceFrom(t *testing.T) {
|
||||
presence := newPresence("from@test", "to@test", SPFrom("test"))
|
||||
testPresence(t, presence, "<presence from=\"test@from@test\" to=\"to@test\"></presence>")
|
||||
}
|
||||
|
||||
func TestPresenceNoFrom(t *testing.T) {
|
||||
presence := newPresence("from@test", "to@test")
|
||||
testPresence(t, presence, "<presence from=\"from@test\" to=\"to@test\"></presence>")
|
||||
}
|
||||
|
||||
func TestPresenceType(t *testing.T) {
|
||||
presence := newPresence("from@test", "to@test", SPType("subscribe"))
|
||||
testPresence(t, presence, "<presence type=\"subscribe\" from=\"from@test\" to=\"to@test\"></presence>")
|
||||
}
|
||||
|
||||
func TestPresenceShow(t *testing.T) {
|
||||
presence := newPresence("from@test", "to@test", SPShow("dnd"))
|
||||
testPresence(t, presence, "<presence from=\"from@test\" to=\"to@test\"><show>dnd</show></presence>")
|
||||
}
|
||||
|
||||
func TestPresenceStatus(t *testing.T) {
|
||||
presence := newPresence("from@test", "to@test", SPStatus("cooking"))
|
||||
testPresence(t, presence, "<presence from=\"from@test\" to=\"to@test\"><status>cooking</status></presence>")
|
||||
}
|
||||
|
||||
func TestPresenceNickname(t *testing.T) {
|
||||
presence := newPresence("from@test", "to@test", SPNickname("Ishmael"))
|
||||
testPresence(t, presence, "<presence from=\"from@test\" to=\"to@test\"><nick xmlns=\"http://jabber.org/protocol/nick\">Ishmael</nick></presence>")
|
||||
}
|
||||
|
||||
func TestPresencePhoto(t *testing.T) {
|
||||
presence := newPresence("from@test", "to@test", SPPhoto("01b87fcd030b72895ff8e88db57ec525450f000d"))
|
||||
testPresence(t, presence, "<presence from=\"from@test\" to=\"to@test\"><x xmlns=\"vcard-temp:x:update\"><photo>01b87fcd030b72895ff8e88db57ec525450f000d</photo></x></presence>")
|
||||
}
|
@ -0,0 +1,49 @@
|
||||
package xmpp
|
||||
|
||||
import (
|
||||
"encoding/xml"
|
||||
|
||||
"gosrc.io/xmpp/stanza"
|
||||
)
|
||||
|
||||
// PresenceNickExtension is from XEP-0172
|
||||
type PresenceNickExtension struct {
|
||||
XMLName xml.Name `xml:"http://jabber.org/protocol/nick nick"`
|
||||
Text string `xml:",chardata"`
|
||||
}
|
||||
|
||||
// PresenceXVCardUpdateExtension is from XEP-0153
|
||||
type PresenceXVCardUpdateExtension struct {
|
||||
XMLName xml.Name `xml:"vcard-temp:x:update x"`
|
||||
Photo PresenceXVCardUpdatePhoto
|
||||
}
|
||||
|
||||
// PresenceXVCardUpdatePhoto is from XEP-0153
|
||||
type PresenceXVCardUpdatePhoto struct {
|
||||
XMLName xml.Name `xml:"photo"`
|
||||
Text string `xml:",chardata"`
|
||||
}
|
||||
|
||||
// Namespace is a namespace!
|
||||
func (c PresenceNickExtension) Namespace() string {
|
||||
return c.XMLName.Space
|
||||
}
|
||||
|
||||
// Namespace is a namespace!
|
||||
func (c PresenceXVCardUpdateExtension) Namespace() string {
|
||||
return c.XMLName.Space
|
||||
}
|
||||
|
||||
func init() {
|
||||
// presence nick
|
||||
stanza.TypeRegistry.MapExtension(stanza.PKTPresence, xml.Name{
|
||||
"http://jabber.org/protocol/nick",
|
||||
"nick",
|
||||
}, PresenceNickExtension{})
|
||||
|
||||
// presence vcard update
|
||||
stanza.TypeRegistry.MapExtension(stanza.PKTPresence, xml.Name{
|
||||
"vcard-temp:x:update",
|
||||
"x",
|
||||
}, PresenceXVCardUpdateExtension{})
|
||||
}
|
Loading…
Reference in new issue