[2397] | 1 | $(document).ready(function () { |
---|
| 2 | module("JIDs"); |
---|
| 3 | |
---|
| 4 | test("Normal JID", function () { |
---|
| 5 | var jid = "darcy@pemberley.lit/library"; |
---|
| 6 | equals(Strophe.getNodeFromJid(jid), "darcy", |
---|
| 7 | "Node should be 'darcy'"); |
---|
| 8 | equals(Strophe.getDomainFromJid(jid), "pemberley.lit", |
---|
| 9 | "Domain should be 'pemberley.lit'"); |
---|
| 10 | equals(Strophe.getResourceFromJid(jid), "library", |
---|
| 11 | "Node should be 'library'"); |
---|
| 12 | equals(Strophe.getBareJidFromJid(jid), |
---|
| 13 | "darcy@pemberley.lit", |
---|
| 14 | "Bare JID should be 'darcy@pemberley.lit'"); |
---|
| 15 | }); |
---|
| 16 | |
---|
| 17 | test("Weird node (unescaped)", function () { |
---|
| 18 | var jid = "darcy@netherfield.lit@pemberley.lit/library"; |
---|
| 19 | equals(Strophe.getNodeFromJid(jid), "darcy", |
---|
| 20 | "Node should be 'darcy'"); |
---|
| 21 | equals(Strophe.getDomainFromJid(jid), |
---|
| 22 | "netherfield.lit@pemberley.lit", |
---|
| 23 | "Domain should be 'netherfield.lit@pemberley.lit'"); |
---|
| 24 | equals(Strophe.getResourceFromJid(jid), "library", |
---|
| 25 | "Resource should be 'library'"); |
---|
| 26 | equals(Strophe.getBareJidFromJid(jid), |
---|
| 27 | "darcy@netherfield.lit@pemberley.lit", |
---|
| 28 | "Bare JID should be 'darcy@netherfield.lit@pemberley.lit'"); |
---|
| 29 | }); |
---|
| 30 | |
---|
| 31 | test("Weird node (escaped)", function () { |
---|
| 32 | var escapedNode = Strophe.escapeNode("darcy@netherfield.lit"); |
---|
| 33 | var jid = escapedNode + "@pemberley.lit/library"; |
---|
| 34 | equals(Strophe.getNodeFromJid(jid), "darcy\\40netherfield.lit", |
---|
| 35 | "Node should be 'darcy\\40netherfield.lit'"); |
---|
| 36 | equals(Strophe.getDomainFromJid(jid), |
---|
| 37 | "pemberley.lit", |
---|
| 38 | "Domain should be 'pemberley.lit'"); |
---|
| 39 | equals(Strophe.getResourceFromJid(jid), "library", |
---|
| 40 | "Resource should be 'library'"); |
---|
| 41 | equals(Strophe.getBareJidFromJid(jid), |
---|
| 42 | "darcy\\40netherfield.lit@pemberley.lit", |
---|
| 43 | "Bare JID should be 'darcy\\40netherfield.lit@pemberley.lit'"); |
---|
| 44 | }); |
---|
| 45 | |
---|
| 46 | test("Weird resource", function () { |
---|
| 47 | var jid = "books@chat.pemberley.lit/darcy@pemberley.lit/library"; |
---|
| 48 | equals(Strophe.getNodeFromJid(jid), "books", |
---|
| 49 | "Node should be 'books'"); |
---|
| 50 | equals(Strophe.getDomainFromJid(jid), "chat.pemberley.lit", |
---|
| 51 | "Domain should be 'chat.pemberley.lit'"); |
---|
| 52 | equals(Strophe.getResourceFromJid(jid), |
---|
| 53 | "darcy@pemberley.lit/library", |
---|
| 54 | "Resource should be 'darcy@pemberley.lit/library'"); |
---|
| 55 | equals(Strophe.getBareJidFromJid(jid), |
---|
| 56 | "books@chat.pemberley.lit", |
---|
| 57 | "Bare JID should be 'books@chat.pemberley.lit'"); |
---|
| 58 | }); |
---|
| 59 | |
---|
| 60 | module("Builder"); |
---|
| 61 | |
---|
| 62 | test("Correct namespace (#32)", function () { |
---|
| 63 | var stanzas = [new Strophe.Builder("message", {foo: "asdf"}).tree(), |
---|
| 64 | $build("iq", {}).tree(), |
---|
| 65 | $pres().tree()]; |
---|
| 66 | $.each(stanzas, function () { |
---|
| 67 | equals($(this).attr('xmlns'), Strophe.NS.CLIENT, |
---|
| 68 | "Namespace should be '" + Strophe.NS.CLIENT + "'"); |
---|
| 69 | }); |
---|
| 70 | }); |
---|
| 71 | |
---|
| 72 | test("send() accepts Builders (#27)", function () { |
---|
| 73 | var stanza = $pres(); |
---|
| 74 | var conn = new Strophe.Connection(""); |
---|
| 75 | // fake connection callback to avoid errors |
---|
| 76 | conn.connect_callback = function () {}; |
---|
| 77 | |
---|
| 78 | ok(conn._data.length === 0, "Output queue is clean"); |
---|
| 79 | try { |
---|
| 80 | conn.send(stanza); |
---|
| 81 | } catch (e) {} |
---|
| 82 | ok(conn._data.length === 1, "Output queue contains an element"); |
---|
| 83 | }); |
---|
| 84 | |
---|
| 85 | test("send() does not accept strings", function () { |
---|
| 86 | var stanza = "<presence/>"; |
---|
| 87 | var conn = new Strophe.Connection(""); |
---|
| 88 | // fake connection callback to avoid errors |
---|
| 89 | conn.connect_callback = function () {}; |
---|
| 90 | expect(1); |
---|
| 91 | try { |
---|
| 92 | conn.send(stanza); |
---|
| 93 | } catch (e) { |
---|
| 94 | equals(e.name, "StropheError", "send() should throw exception"); |
---|
| 95 | } |
---|
| 96 | }); |
---|
| 97 | |
---|
| 98 | test("Builder with XML attribute escaping test", function () { |
---|
| 99 | var text = "<b>"; |
---|
| 100 | var expected = "<presence to='<b>' xmlns='jabber:client'/>"; |
---|
| 101 | var pres = $pres({to: text}); |
---|
| 102 | equals(pres.toString(), expected, "< should be escaped"); |
---|
| 103 | |
---|
| 104 | text = "foo&bar"; |
---|
| 105 | expected = "<presence to='foo&bar' xmlns='jabber:client'/>"; |
---|
| 106 | pres = $pres({to: text}); |
---|
| 107 | equals(pres.toString(), expected, "& should be escaped"); |
---|
| 108 | }); |
---|
| 109 | |
---|
| 110 | module("XML"); |
---|
| 111 | |
---|
| 112 | test("XML escaping test", function () { |
---|
| 113 | var text = "s & p"; |
---|
| 114 | var textNode = Strophe.xmlTextNode(text); |
---|
| 115 | equals(Strophe.getText(textNode), "s & p", "should be escaped"); |
---|
| 116 | var text0 = "s < & > p"; |
---|
| 117 | var textNode0 = Strophe.xmlTextNode(text0); |
---|
| 118 | equals(Strophe.getText(textNode0), "s < & > p", "should be escaped"); |
---|
| 119 | }); |
---|
| 120 | |
---|
| 121 | test("XML element creation", function () { |
---|
| 122 | var elem = Strophe.xmlElement("message"); |
---|
| 123 | equals(elem.tagName, "message", "Element name should be the same"); |
---|
| 124 | }); |
---|
| 125 | |
---|
| 126 | module("Handler"); |
---|
| 127 | |
---|
| 128 | test("Full JID matching", function () { |
---|
| 129 | var elem = $msg({from: 'darcy@pemberley.lit/library'}).tree(); |
---|
| 130 | |
---|
| 131 | var hand = new Strophe.Handler(null, null, null, null, null, |
---|
| 132 | 'darcy@pemberley.lit/library'); |
---|
| 133 | equals(hand.isMatch(elem), true, "Full JID should match"); |
---|
| 134 | |
---|
| 135 | hand = new Strophe.Handler(null, null, null, null, null, |
---|
| 136 | 'darcy@pemberley.lit') |
---|
| 137 | equals(hand.isMatch(elem), false, "Bare JID shouldn't match"); |
---|
| 138 | }); |
---|
| 139 | |
---|
| 140 | test("Bare JID matching", function () { |
---|
| 141 | var elem = $msg({from: 'darcy@pemberley.lit/library'}).tree(); |
---|
| 142 | |
---|
| 143 | var hand = new Strophe.Handler(null, null, null, null, null, |
---|
| 144 | 'darcy@pemberley.lit/library', |
---|
| 145 | {matchBare: true}); |
---|
| 146 | equals(hand.isMatch(elem), true, "Full JID should match"); |
---|
| 147 | |
---|
| 148 | hand = new Strophe.Handler(null, null, null, null, null, |
---|
| 149 | 'darcy@pemberley.lit', |
---|
| 150 | {matchBare: true}); |
---|
| 151 | equals(hand.isMatch(elem), true, "Bare JID should match"); |
---|
| 152 | }); |
---|
| 153 | |
---|
| 154 | module("Misc"); |
---|
| 155 | |
---|
| 156 | test("Quoting strings", function () { |
---|
| 157 | var input = '"beep \\40"'; |
---|
| 158 | var conn = new Strophe.Connection(); |
---|
| 159 | var output = conn._quote(input); |
---|
| 160 | equals(output, "\"\\\"beep \\\\40\\\"\"", |
---|
| 161 | "string should be quoted and escaped"); |
---|
| 162 | }); |
---|
| 163 | }); |
---|