Files
zulip/frontend_tests/node_tests/emoji.js
Steve Howell 42435db492 Add run_test helper for individual tests.
This run_test helper sets up a convention that allows
us to give really short tracebacks for errors, and
eventually we can have more control over running
individual tests.  (The latter goal has some
complications, since we often intentionally leak
setup in tests.)
2018-05-15 08:24:44 -07:00

111 lines
4.0 KiB
JavaScript

set_global('$', global.make_zjquery());
set_global('page_params', {
emojiset: 'google',
});
set_global('upload_widget', {});
set_global('blueslip', global.make_zblueslip());
zrequire('emoji_codes', 'generated/emoji/emoji_codes');
zrequire('emoji');
zrequire('markdown');
zrequire('util');
run_test('build_emoji_upload_widget', () => {
var build_widget_stub = false;
upload_widget.build_widget = function (
get_file_input,
file_name_field,
input_error,
clear_button,
upload_button
) {
assert.deepEqual(get_file_input(), $('#emoji_file_input'));
assert.deepEqual(file_name_field, $('#emoji-file-name'));
assert.deepEqual(input_error, $('#emoji_file_input_error'));
assert.deepEqual(clear_button, $('#emoji_image_clear_button'));
assert.deepEqual(upload_button, $('#emoji_upload_button'));
build_widget_stub = true;
};
emoji.build_emoji_upload_widget();
assert(build_widget_stub);
});
run_test('initialize', () => {
var image_stub = false;
class Image {
set src(data) {
assert.equal(data, '/static/generated/emoji/sheet_google_64.png');
image_stub = true;
}
}
set_global('Image', Image);
emoji.initialize();
assert(image_stub);
});
run_test('get_canonical_name', () => {
emoji.active_realm_emojis = {
realm_emoji: 'TBD',
};
var canonical_name = emoji.get_canonical_name('realm_emoji');
assert.equal(canonical_name, 'realm_emoji');
global.emoji_codes = {
name_to_codepoint: {
'+1': '1f44d',
},
codepoint_to_name: {
'1f44d': 'thumbs_up',
},
};
canonical_name = emoji.get_canonical_name('+1');
assert.equal(canonical_name, 'thumbs_up');
emoji.active_realm_emojis = {
'+1': 'TBD',
};
canonical_name = emoji.get_canonical_name('+1');
assert.equal(canonical_name, '+1');
blueslip.set_test_data('error', 'Invalid emoji name: non_existent');
emoji.get_canonical_name('non_existent');
assert.equal(blueslip.get_test_logs('error').length, 1);
blueslip.clear_test_data();
});
run_test('translate_emoticons_to_names', () => {
// Simple test
var test_text = 'Testing :)';
var expected = 'Testing :smiley:';
var result = emoji.translate_emoticons_to_names(test_text);
assert.equal(expected, result);
// Extensive tests.
// The following code loops over the test cases and each emoticon conversion
// to generate multiple test cases.
var testcases = [
{name: 'only emoticon', original: '<original>', expected: '<converted>'},
{name: 'space at start', original: ' <original>', expected: ' <converted>'},
{name: 'space at end', original: '<original> ', expected: '<converted> '},
{name: 'symbol at end', original: '<original>!', expected: '<converted>!'},
{name: 'symbol at start', original: 'Hello,<original>', expected: 'Hello,<converted>'},
{name: 'after a word', original: 'Hello<original>', expected: 'Hello<original>'},
{name: 'between words', original: 'Hello<original>World', expected: 'Hello<original>World'},
{name: 'end of sentence', original: 'End of sentence. <original>', expected: 'End of sentence. <converted>'},
{name: 'between symbols', original: 'Hello.<original>! World.', expected: 'Hello.<original>! World.'},
{name: 'before end of sentence', original: 'Hello <original>!', expected: 'Hello <converted>!'},
];
_.each(emoji.EMOTICON_CONVERSIONS, (full_name, shortcut) => {
_.each(testcases, (t) => {
var converted_value = ':' + full_name + ':';
var original = t.original;
var expected = t.expected;
original = original.replace(/(<original>)/g, shortcut);
expected = expected.replace(/(<original>)/g, shortcut)
.replace(/(<converted>)/g, converted_value);
var result = emoji.translate_emoticons_to_names(original);
assert.equal(result, expected);
});
});
});