forked from jshiffer/go-xmpp
Initial HTML message support
This commit is contained in:
parent
8f7b4ba8a4
commit
3521c488ea
20
msg_html.go
Normal file
20
msg_html.go
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
package xmpp
|
||||||
|
|
||||||
|
import "encoding/xml"
|
||||||
|
|
||||||
|
type HTML struct {
|
||||||
|
MsgExtension
|
||||||
|
XMLName xml.Name `xml:"http://jabber.org/protocol/xhtml-im html"`
|
||||||
|
Body HTMLBody
|
||||||
|
Lang string `xml:"xml:lang,attr,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type HTMLBody struct {
|
||||||
|
XMLName xml.Name `xml:"http://www.w3.org/1999/xhtml body"`
|
||||||
|
// InnerXML MUST be valid xhtml. We do not check if it is valid when generating the XMPP stanza.
|
||||||
|
InnerXML string `xml:",innerxml"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
TypeRegistry.MapExtension(PKTMessage, xml.Name{"http://jabber.org/protocol/xhtml-im", "html"}, HTML{})
|
||||||
|
}
|
44
msg_html_test.go
Normal file
44
msg_html_test.go
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
package xmpp_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/xml"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"gosrc.io/xmpp"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestHTMLGen(t *testing.T) {
|
||||||
|
htmlBody := "<p>Hello <b>World</b></p>"
|
||||||
|
msg := xmpp.NewMessage(xmpp.Attrs{To: "test@localhost"})
|
||||||
|
msg.Body = "Hello World"
|
||||||
|
body := xmpp.HTMLBody{
|
||||||
|
InnerXML: htmlBody,
|
||||||
|
}
|
||||||
|
html := xmpp.HTML{Body: body}
|
||||||
|
msg.Extensions = append(msg.Extensions, html)
|
||||||
|
|
||||||
|
result := msg.XMPPFormat()
|
||||||
|
str := `<message to="test@localhost"><body>Hello World</body><html xmlns="http://jabber.org/protocol/xhtml-im"><body xmlns="http://www.w3.org/1999/xhtml"><p>Hello <b>World</b></p></body></html></message>`
|
||||||
|
if result != str {
|
||||||
|
t.Errorf("incorrect serialize message:\n%s", result)
|
||||||
|
}
|
||||||
|
|
||||||
|
parsedMessage := xmpp.Message{}
|
||||||
|
if err := xml.Unmarshal([]byte(str), &parsedMessage); err != nil {
|
||||||
|
t.Errorf("message HTML unmarshall error: %v", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if parsedMessage.Body != msg.Body {
|
||||||
|
t.Errorf("incorrect parsed body: '%s'", parsedMessage.Body)
|
||||||
|
}
|
||||||
|
|
||||||
|
var h xmpp.HTML
|
||||||
|
if ok := parsedMessage.Get(&h); !ok {
|
||||||
|
t.Error("could not extract HTML body")
|
||||||
|
}
|
||||||
|
|
||||||
|
if h.Body.InnerXML != htmlBody {
|
||||||
|
t.Errorf("could not extract html body: '%s'", h.Body.InnerXML)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user