From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- .../matrix/test/test_matrixMessageContent.js | 652 +++++++++++++++++++++ 1 file changed, 652 insertions(+) create mode 100644 comm/chat/protocols/matrix/test/test_matrixMessageContent.js (limited to 'comm/chat/protocols/matrix/test/test_matrixMessageContent.js') diff --git a/comm/chat/protocols/matrix/test/test_matrixMessageContent.js b/comm/chat/protocols/matrix/test/test_matrixMessageContent.js new file mode 100644 index 0000000000..b09d3807ca --- /dev/null +++ b/comm/chat/protocols/matrix/test/test_matrixMessageContent.js @@ -0,0 +1,652 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +var { MatrixMessageContent } = ChromeUtils.importESModule( + "resource:///modules/matrixMessageContent.sys.mjs" +); +const { XPCShellContentUtils } = ChromeUtils.importESModule( + "resource://testing-common/XPCShellContentUtils.sys.mjs" +); +var { getMatrixTextForEvent } = ChromeUtils.importESModule( + "resource:///modules/matrixTextForEvent.sys.mjs" +); +var { l10nHelper } = ChromeUtils.importESModule( + "resource:///modules/imXPCOMUtils.sys.mjs" +); +var _ = l10nHelper("chrome://chat/locale/matrix.properties"); + +// Required to make it so the DOMParser can handle images and such. +XPCShellContentUtils.init(this); + +const PLAIN_FIXTURES = [ + { + description: "Normal text message plain quote", + event: { + type: MatrixSDK.EventType.RoomMessage, + content: { + msgtype: MatrixSDK.MsgType.Text, + body: `> lorem ipsum +> dolor sit amet + +dolor sit amet`, + ["m.relates_to"]: { + "m.in_reply_to": { + event_id: "!event:example.com", + }, + }, + }, + sender: "@bar:example.com", + }, + getEventResult: { + id: "!event:example.com", + type: MatrixSDK.EventType.RoomMessage, + content: { + msgtype: MatrixSDK.MsgType.Text, + body: "lorem ipsum!", + }, + sender: "@foo:example.com", + }, + result: `@foo:example.com: +> lorem ipsum! + +dolor sit amet`, + }, + { + description: "Normal text message plain quote with missing quote message", + event: { + type: MatrixSDK.EventType.RoomMessage, + content: { + msgtype: MatrixSDK.MsgType.Text, + body: `> lorem ipsum + +dolor sit amet`, + ["m.relates_to"]: { + "m.in_reply_to": { + event_id: "!event:example.com", + }, + }, + }, + sender: "@bar:example.com", + }, + result: `> lorem ipsum + +dolor sit amet`, + }, + { + description: "Emote message plain quote", + event: { + type: MatrixSDK.EventType.RoomMessage, + content: { + msgtype: MatrixSDK.MsgType.Text, + body: `> lorem ipsum + +dolor sit amet`, + ["m.relates_to"]: { + "m.in_reply_to": { + event_id: "!event:example.com", + }, + }, + }, + sender: "@bar:example.com", + }, + getEventResult: { + id: "!event:example.com", + type: MatrixSDK.EventType.RoomMessage, + content: { + msgtype: MatrixSDK.MsgType.Emote, + body: "lorem ipsum", + }, + sender: "@foo:example.com", + }, + result: `> * @foo:example.com lorem ipsum * + +dolor sit amet`, + }, + { + description: "Reply is emote", + event: { + type: MatrixSDK.EventType.RoomMessage, + content: { + msgtype: MatrixSDK.MsgType.Emote, + body: `> lorem ipsum + +dolor sit amet`, + ["m.relates_to"]: { + "m.in_reply_to": { + event_id: "!event:example.com", + }, + }, + }, + sender: "@bar:example.com", + }, + getEventResult: { + id: "!event:example.com", + type: MatrixSDK.EventType.RoomMessage, + content: { + msgtype: MatrixSDK.MsgType.Text, + body: "lorem ipsum", + }, + sender: "@foo:example.com", + }, + result: "\ndolor sit amet", + }, + { + description: "Attachment", + event: { + type: MatrixSDK.EventType.RoomMessage, + content: { + msgtype: MatrixSDK.MsgType.File, + body: "example.png", + url: "mxc://example.com/asdf", + }, + sender: "@bar:example.com", + }, + result: "https://example.com/_matrix/media/r0/download/example.com/asdf", + }, + { + description: "Sticker", + event: { + type: MatrixSDK.EventType.Sticker, + content: { + body: "example.png", + url: "mxc://example.com/asdf", + }, + sender: "@bar:example.com", + }, + result: "https://example.com/_matrix/media/r0/download/example.com/asdf", + }, + { + description: "Normal body with HTML-y contents", + event: { + type: MatrixSDK.EventType.Text, + content: { + body: "", + }, + sender: "@bar:example.com", + }, + result: "<foo>", + }, + { + description: "Non-mxc attachment", + event: { + type: MatrixSDK.EventType.RoomMessage, + content: { + body: "hello.jpg", + msgtype: MatrixSDK.MsgType.Image, + url: "https://example.com/hello.jpg", + }, + sender: "@bar:example.com", + }, + result: "hello.jpg", + }, + { + description: "Key verification request", + event: { + type: MatrixSDK.EventType.RoomMessage, + content: { + msgtype: MatrixSDK.MsgType.KeyVerificationRequest, + }, + sender: "@bar:example.com", + }, + isGetTextForEvent: true, + }, + { + description: "Decryption failure", + event: { + type: MatrixSDK.EventType.RoomMessageEncrypted, + content: { + msgtype: "m.bad.encrypted", + }, + }, + isGetTextForEvent: true, + }, + { + description: "Being decrypted", + event: { + type: MatrixSDK.EventType.RoomMessageEncrypted, + decrypting: true, + }, + result: _("message.decrypting"), + }, + { + description: "Unsent event", + event: { + type: MatrixSDK.EventType.RoomMessage, + content: { + body: "foo", + msgtype: MatrixSDK.MsgType.Text, + }, + sender: "@bar:example.com", + status: MatrixSDK.EventStatus.NOT_SENT, + }, + result: "", + }, + { + description: "Redacted event", + event: { + type: MatrixSDK.EventType.RoomMessage, + content: {}, + sender: "@bar:example.com", + redacted: true, + }, + result: _("message.redacted"), + }, + { + description: "Tombstone", + event: { + type: MatrixSDK.EventType.RoomTombstone, + content: { + body: "tombstone", + }, + sender: "@bar:example.com", + }, + result: "tombstone", + }, + { + description: "Encryption start", + event: { + type: MatrixSDK.EventType.RoomEncryption, + content: {}, + sender: "@bar:example.com", + }, + isGetTextForEvent: true, + }, + { + description: "Reaction", + event: { + type: MatrixSDK.EventType.Reaction, + content: { + ["m.relates_to"]: { + rel_type: MatrixSDK.RelationType.Annotation, + event_id: "!event:example.com", + key: "🐦", + }, + }, + sender: "@bar:example.com", + }, + getEventResult: { + id: "!event:example.com", + type: MatrixSDK.EventType.RoomMessage, + content: { + msgtype: MatrixSDK.MsgType.Text, + body: "lorem ipsum!", + }, + sender: "@foo:example.com", + }, + result: _("message.reaction", "@bar:example.com", "@foo:example.com", "🐦"), + }, +]; + +const HTML_FIXTURES = [ + { + description: "Normal text message plain quote", + event: { + type: MatrixSDK.EventType.RoomMessage, + content: { + msgtype: MatrixSDK.MsgType.Text, + body: `> lorem ipsum +> dolor sit amet + +dolor sit amet`, + format: "org.matrix.custom.html", + formatted_body: ` + Foo wrote:
+
lorem ipsum
+
+

dolor sit amet

`, + ["m.relates_to"]: { + "m.in_reply_to": { + event_id: "!event:example.com", + }, + }, + }, + sender: "@bar:example.com", + }, + getEventResult: { + id: "!event:example.com", + type: MatrixSDK.EventType.RoomMessage, + content: { + msgtype: MatrixSDK.MsgType.Text, + body: "lorem ipsum!", + }, + sender: "@foo:example.com", + }, + result: `@foo:example.com:
lorem ipsum!
\n

dolor sit amet

`, + }, + { + description: "Normal text message with missing quote message", + event: { + type: MatrixSDK.EventType.RoomMessage, + content: { + msgtype: MatrixSDK.MsgType.Text, + body: `> lorem ipsum +> dolor sit amet + +dolor sit amet`, + format: "org.matrix.custom.html", + formatted_body: ` + Foo wrote:
+
lorem ipsum
+
+

dolor sit amet

`, + ["m.relates_to"]: { + "m.in_reply_to": { + event_id: "!event:example.com", + }, + }, + }, + sender: "@bar:example.com", + }, + result: ` + @foo:example.com wrote:
+
lorem ipsum
+ +

dolor sit amet

`, + }, + { + description: "Quoted emote message", + event: { + type: MatrixSDK.EventType.RoomMessage, + content: { + msgtype: MatrixSDK.MsgType.Text, + body: `> lorem ipsum + +dolor sit amet`, + format: "org.matrix.custom.html", + formatted_body: ` + Foo wrote:
+
lorem ipsum
+
+

dolor sit amet

`, + ["m.relates_to"]: { + "m.in_reply_to": { + event_id: "!event:example.com", + }, + }, + }, + sender: "@bar:example.com", + }, + getEventResult: { + id: "!event:example.com", + type: MatrixSDK.EventType.RoomMessage, + content: { + msgtype: MatrixSDK.MsgType.Emote, + body: "lorem ipsum", + format: "org.matrix.custom.html", + formatted_body: "

lorem ipsum

", + }, + sender: "@foo:example.com", + }, + result: `
* @foo:example.com

lorem ipsum

*
+

dolor sit amet

`, + }, + { + description: "Reply is emote", + event: { + type: MatrixSDK.EventType.RoomMessage, + content: { + msgtype: MatrixSDK.MsgType.Emote, + body: `> lorem ipsum + +dolor sit amet`, + format: "org.matrix.custom.html", + formatted_body: ` + Foo wrote:
+
lorem ipsum
+
+

dolor sit amet

`, + ["m.relates_to"]: { + "m.in_reply_to": { + event_id: "!event:example.com", + }, + }, + }, + sender: "@bar:example.com", + }, + getEventResult: { + id: "!event:example.com", + type: MatrixSDK.EventType.RoomMessage, + content: { + msgtype: MatrixSDK.MsgType.Text, + body: "lorem ipsum", + }, + sender: "@foo:example.com", + }, + result: "\n

dolor sit amet

", + }, + { + description: "Attachment", + event: { + type: MatrixSDK.EventType.RoomMessage, + content: { + msgtype: MatrixSDK.MsgType.File, + body: "example.png", + url: "mxc://example.com/asdf", + }, + sender: "@bar:example.com", + }, + result: + 'example.png', + }, + { + description: "Sticker", + event: { + type: MatrixSDK.EventType.Sticker, + content: { + body: "example.png", + url: "mxc://example.com/asdf", + }, + sender: "@bar:example.com", + }, + result: + 'example.png', + }, + { + description: "Normal formatted body", + event: { + type: MatrixSDK.EventType.RoomMessage, + content: { + body: "foo bar", + msgtype: MatrixSDK.MsgType.Text, + format: "org.matrix.custom.html", + formatted_body: "

foo bar

", + }, + sender: "@bar:example.com", + }, + result: "

foo bar

", + }, + { + description: "Inline image", + event: { + type: MatrixSDK.EventType.RoomMessage, + content: { + body: ":emote:", + msgtype: MatrixSDK.MsgType.Text, + format: "org.matrix.custom.html", + formatted_body: ':emote:', + }, + sender: "@bar:example.com", + }, + result: + ':emote:', + }, + { + description: "Non-mxc attachment", + event: { + type: MatrixSDK.EventType.RoomMessage, + content: { + body: "foo.png", + msgtype: MatrixSDK.MsgType.Image, + url: "https://example.com/image.png", + }, + sender: "@bar:example.com", + }, + result: "foo.png", + }, + { + description: "Fallback to normal body", + event: { + type: MatrixSDK.EventType.RoomMessage, + content: { + body: "hello world ", + msgtype: MatrixSDK.MsgType.Notice, + }, + sender: "@bar:example.com", + }, + result: "hello world <!>", + }, + { + description: "Colored text", + event: { + type: MatrixSDK.EventType.RoomMessage, + content: { + body: "rainbow", + msgtype: MatrixSDK.MsgType.Text, + format: "org.matrix.custom.html", + formatted_body: + 'rainbow', + }, + sender: "@bar:example.com", + }, + result: + 'rainbow', + }, + { + description: "Unsent event", + event: { + type: MatrixSDK.EventType.RoomMessage, + content: { + body: "foo", + msgtype: MatrixSDK.MsgType.Text, + }, + sender: "@bar:example.com", + status: MatrixSDK.EventStatus.NOT_SENT, + }, + result: "", + }, + { + description: "Redacted event", + event: { + type: MatrixSDK.EventType.RoomMessage, + content: {}, + sender: "@bar:example.com", + redacted: true, + }, + result: _("message.redacted"), + }, + { + description: "Tombstone", + event: { + type: MatrixSDK.EventType.RoomTombstone, + content: { + body: "tombstone", + }, + sender: "@bar:example.com", + }, + result: "tombstone", + }, + { + description: "Encryption start", + event: { + type: MatrixSDK.EventType.RoomEncryption, + content: {}, + sender: "@bar:example.com", + }, + isGetTextForEvent: true, + }, + { + description: "Reaction", + event: { + type: MatrixSDK.EventType.Reaction, + content: { + ["m.relates_to"]: { + rel_type: MatrixSDK.RelationType.Annotation, + event_id: "!event:example.com", + key: "🐦", + }, + }, + sender: "@bar:example.com", + }, + getEventResult: { + id: "!event:example.com", + type: MatrixSDK.EventType.RoomMessage, + content: { + msgtype: MatrixSDK.MsgType.Text, + body: "lorem ipsum!", + }, + sender: "@foo:example.com", + }, + result: _( + "message.reaction", + '@bar:example.com', + '@foo:example.com', + "🐦" + ), + }, + { + description: "URL encoded mention", + event: { + type: MatrixSDK.EventType.RoomMessage, + content: { + msgtype: MatrixSDK.MsgType.Text, + body: `@foo:example.com dolor sit amet`, + format: "org.matrix.custom.html", + formatted_body: `Foo dolor sit amet`, + }, + sender: "@bar:example.com", + }, + result: '@foo:example.com dolor sit amet', + }, +]; + +add_task(function test_plainBody() { + for (const fixture of PLAIN_FIXTURES) { + const event = makeEvent(fixture.event); + const result = MatrixMessageContent.getIncomingPlain( + event, + "https://example.com", + eventId => { + if (fixture.getEventResult) { + equal( + eventId, + fixture.getEventResult.id, + `${fixture.description}: getEvent event ID` + ); + return makeEvent(fixture.getEventResult); + } + return undefined; + } + ); + if (fixture.isGetTextForEvent) { + equal(result, getMatrixTextForEvent(event)); + } else { + equal(result, fixture.result, fixture.description); + } + } +}); + +add_task(function test_htmlBody() { + for (const fixture of HTML_FIXTURES) { + const event = makeEvent(fixture.event); + const result = MatrixMessageContent.getIncomingHTML( + event, + "https://example.com", + eventId => { + if (fixture.getEventResult) { + equal( + eventId, + fixture.getEventResult.id, + `${fixture.description}: getEvent event ID` + ); + return makeEvent(fixture.getEventResult); + } + return undefined; + } + ); + if (fixture.isGetTextForEvent) { + equal(result, getMatrixTextForEvent(event)); + } else { + equal(result, fixture.result, fixture.description); + } + } +}); -- cgit v1.2.3