/*global Dict */ var path = require('path'); var fs = require('fs'); global.stub_out_jquery(); set_global('page_params', {realm_emoji: { burrito: {display_url: '/static/third/gemoji/images/emoji/burrito.png', source_url: '/static/third/gemoji/images/emoji/burrito.png'} }}); add_dependencies({ marked: 'third/marked/lib/marked.js', emoji: 'js/emoji.js', people: 'js/people.js', fenced_code: 'js/fenced_code.js' }); var doc = ""; set_global('document', doc); set_global('$', function (obj) { if (typeof obj === 'function') { // Run on-load setup obj(); } else if (typeof obj === 'string') { // $(document).on usage // Selector usage return {on: function () {}}; } }); set_global('page_params', { realm_filters: [["#(?P[0-9]{2,8})", "https://trac.zulip.net/ticket/%(id)s"], ["ZBUG_(?P[0-9]{2,8})", "https://trac2.zulip.net/ticket/%(id)s"], ["ZGROUP_(?P[0-9]{2,8}):(?P[0-9]{1,8})", "https://zone_%(zone)s.zulip.net/ticket/%(id)s"]] }); set_global('feature_flags', {local_echo: true}); var people = require("js/people.js"); people.test_set_people_name_dict({'Cordelia Lear': {full_name: 'Cordelia Lear', email: 'cordelia@zulip.com'}}); var echo = require('js/echo.js'); var bugdown_data = JSON.parse(fs.readFileSync(path.join(__dirname, '../../zerver/fixtures/bugdown-data.json'), 'utf8', 'r')); (function test_bugdown_detection() { var no_markup = [ "This is a plaintext message", "This is a plaintext: message", "This is a :plaintext message", "This is a :plaintext message: message", "Contains a not an image.jpeg/ok file", "Contains a not an http://www.google.com/ok/image.png/stop file", "No png to be found here, a png", "No user mention **leo**", "No user mention @what there", "We like to code\n~~~\ndef code():\n we = \"like to do\"\n~~~", "This is a\nmultiline :emoji: here\n message", "This is an :emoji: message", "User Mention @**leo**", "User Mention @**leo f**", "User Mention @**leo with some name**" ]; var markup = [ "Contains a https://zulip.com/image.png file", "Contains a https://zulip.com/image.jpg file", "https://zulip.com/image.jpg", "also https://zulip.com/image.jpg", "https://zulip.com/image.jpg too", "Contains a zulip.com/foo.jpeg file", "Contains a https://zulip.com/image.png file", "twitter url https://twitter.com/jacobian/status/407886996565016579", "https://twitter.com/jacobian/status/407886996565016579", "then https://twitter.com/jacobian/status/407886996565016579", "twitter url http://twitter.com/jacobian/status/407886996565016579", "youtube url https://www.youtube.com/watch?v=HHZ8iqswiCw&feature=youtu.be&a", "This contains !gravatar(leo@zulip.com)", "And an avatar !avatar(leo@zulip.com) is here" ]; no_markup.forEach(function (content) { assert.equal(echo.contains_bugdown(content), false); }); markup.forEach(function (content) { assert.equal(echo.contains_bugdown(content), true); }); }()); (function test_marked_shared() { var tests = bugdown_data.regular_tests; tests.forEach(function (test) { var output = echo.apply_markdown(test.input); if (test.bugdown_matches_marked) { assert.equal(test.expected_output, output); } else { assert.notEqual(test.expected_output, output); } }); }()); (function test_marked() { var test_cases = [ {input: 'hello', expected: '

hello

'}, {input: 'hello there', expected: '

hello there

'}, {input: 'hello **bold** for you', expected: '

hello bold for you

'}, {input: '__hello__', expected: '

__hello__

'}, {input: '\n```\nfenced code\n```\n\nand then after\n', expected: '
fenced code\n
\n\n\n

and then after

'}, {input: '* a\n* list \n* here', expected: '
    \n
  • a
  • \n
  • list
  • \n
  • here
  • \n
'}, {input: 'Some text first\n* a\n* list \n* here\n\nand then after', expected: '

Some text first

\n
    \n
  • a
  • \n
  • list
  • \n
  • here
  • \n
\n

and then after

'}, {input: '1. an\n2. ordered \n3. list', expected: '

1. an

\n

2. ordered

\n

3. list

'}, {input: '\n~~~quote\nquote this for me\n~~~\nthanks\n', expected: '
\n

quote this for me

\n
\n

thanks

'}, {input: 'This is a @**Cordelia Lear** mention', expected: '

This is a @Cordelia Lear mention

'}, {input: 'mmm...:burrito:s', expected: '

mmm...\":burrito:\"s

'}, {input: 'This is an :poop: message', expected: '

This is an :poop: message

'}, {input: "\ud83d\udca9", expected: '

\ud83d\udca9

'}, {input: 'This is a realm filter #1234 with text after it', expected: '

This is a realm filter #1234 with text after it

'}, {input: 'This is a realm filter with ZGROUP_123:45 groups', expected: '

This is a realm filter with ZGROUP_123:45 groups

'} ]; test_cases.forEach(function (test_case) { var input = test_case.input; var expected = test_case.expected; var output = echo.apply_markdown(input); assert.equal(expected, output); }); }()); (function test_subject_links() { var message = {subject: "No links here"}; echo._add_subject_links(message); assert.equal(message.subject_links.length, []); message = {subject: "One #123 link here"}; echo._add_subject_links(message); assert.equal(message.subject_links.length, 1); assert.equal(message.subject_links[0], "https://trac.zulip.net/ticket/123"); message = {subject: "Two #123 #456 link here"}; echo._add_subject_links(message); assert.equal(message.subject_links.length, 2); assert.equal(message.subject_links[0], "https://trac.zulip.net/ticket/123"); assert.equal(message.subject_links[1], "https://trac.zulip.net/ticket/456"); message = {subject: "New ZBUG_123 link here"}; echo._add_subject_links(message); assert.equal(message.subject_links.length, 1); assert.equal(message.subject_links[0], "https://trac2.zulip.net/ticket/123"); message = {subject: "New ZBUG_123 with #456 link here"}; echo._add_subject_links(message); assert.equal(message.subject_links.length, 2); assert(message.subject_links.indexOf("https://trac2.zulip.net/ticket/123") !== -1); assert(message.subject_links.indexOf("https://trac.zulip.net/ticket/456") !== -1); message = {subject: "One ZGROUP_123:45 link here"}; echo._add_subject_links(message); assert.equal(message.subject_links.length, 1); assert.equal(message.subject_links[0], "https://zone_45.zulip.net/ticket/123"); }()); (function test_message_flags() { var input = "/me is testing this"; var message = {subject: "No links here", content: echo.apply_markdown(input), raw_content: input}; echo._add_message_flags(message); assert.equal(message.flags.length, 2); assert(message.flags.indexOf('read') !== -1); assert(message.flags.indexOf('is_me_message') !== -1); input = "testing this @**all**"; message = {subject: "No links here", content: echo.apply_markdown(input), raw_content: input}; echo._add_message_flags(message); assert.equal(message.flags.length, 2); assert(message.flags.indexOf('read') !== -1); assert(message.flags.indexOf('mentioned') !== -1); }());