/*jslint node: true*/ /*jslint expr: true*/ /*global describe, it*/ "use strict"; var should = require('should'); var emoji = require('../index'); describe("emoji.js", function () { describe("get(emoji)", function () { it("should return an emoji code when passed a string", function () { var coffee = emoji.get('coffee'); should.exist(coffee); coffee.should.be.exactly('☕'); }); it("should return emoji code back when passed an emoji code", function () { var dancers = emoji.get('👯‍♀️'); should.exist(dancers); dancers.should.be.exactly('👯‍♀️'); }) it("should support github flavored markdown emoji", function () { var coffee = emoji.get(':coffee:'); should.exist(coffee); coffee.should.be.exactly('☕'); }); }); describe("random()", function () { it("should return a random emoji and the corresponding key", function () { var result = emoji.random(); should.exist(result); should.exist(result.key); should.exist(result.emoji); result.emoji.should.be.exactly(emoji.get(result.key)); }); }); describe("which(emoji_code)", function () { it("should return name of the emoji", function () { var coffee = emoji.which('☕'); should.exist(coffee); coffee.should.be.exactly('coffee'); }); it("should work for differently formed characters", function () { var umbrella = emoji.which('☔'); should.exist(umbrella); umbrella.should.be.exactly('umbrella_with_rain_drops'); }); it("should return the same name for differently formed characters", function () { var umbrella1 = emoji.which('☔'); should.exist(umbrella1); var umbrella2 = emoji.which('☔️'); should.exist(umbrella2); umbrella1.should.equal(umbrella2); }); it("should work for flags", function() { var mexico = emoji.which('🇲🇽'); should.exists(mexico); mexico.should.be.exactly('flag-mx'); var marocco = emoji.which('🇲🇦'); should.exists(marocco); marocco.should.be.exactly('flag-ma'); // see issue #21 mexico.should.not.equal(marocco); }); }); describe("emojify(str)", function () { it("should parse :emoji: in a string and replace them with the right emoji", function () { var coffee = emoji.emojify('I :heart: :coffee:! - :hushed::star::heart_eyes: ::: test : : :+1:+'); should.exist(coffee); coffee.should.be.exactly('I ❤️ ☕! - 😯⭐😍 ::: test : : 👍+'); }); it("should handle flags correctly", function() { var flags = emoji.emojify('Mexico :flag-mx: and Marocco :flag-ma: are not the same'); should.exists(flags); flags.should.be.exactly('Mexico 🇲🇽 and Marocco 🇲🇦 are not the same'); }); it("should leave unknown emoji", function () { var coffee = emoji.emojify('I :unknown_emoji: :star: :another_one:'); should.exist(coffee); coffee.should.be.exactly('I :unknown_emoji: ⭐ :another_one:'); }); it("should replace unknown emoji using provided cb function", function () { var coffee = emoji.emojify('I :unknown_emoji: :star: :another_one:', function(name) { return name; }); should.exist(coffee); coffee.should.be.exactly('I unknown_emoji ⭐ another_one'); }); it("should wrap emoji using provided format function", function () { var coffee = emoji.emojify('I :heart: :coffee:', null, function(code, name) { return '' + code + ''; }); should.exist(coffee); coffee.should.be.exactly('I ❤️ ☕'); }); it("should not wrap unknown using provided format function", function () { var coffee = emoji.emojify('I :unknown_emoji: :coffee:', null, function(code, name) { return '' + code + ''; }); should.exist(coffee); coffee.should.be.exactly('I :unknown_emoji: ☕'); }); it("should replace unknown emojis and wrap known emojis using cb functions", function () { var coffee = emoji.emojify('I :unknown_emoji: :coffee:', function(name) { return name; }, function(code, name) { return '' + code + ''; } ); should.exist(coffee); coffee.should.be.exactly('I unknown_emoji ☕'); }); }); it("should return an emoji code", function () { var coffee = emoji.emoji.coffee; should.exist(coffee); coffee.should.be.exactly('☕'); }); describe("search(str)", function () { it("should return partially matched emojis", function () { var matchingEmojis = emoji.search("cof"); matchingEmojis.length.should.not.eql(0); matchingEmojis.forEach(function(emoji) { emoji.key.should.match(/^cof/); }); }); it("should only include emojies that begin with the search", function () { var matchingEmojis = emoji.search("ca"); matchingEmojis.length.should.not.eql(0); matchingEmojis.forEach(function(emoji) { var index = emoji.key.indexOf("ca"); index.should.be.exactly(0); }); }); it("should match when you include the colon", function () { var matchingEmojis = emoji.search(":c"); matchingEmojis.length.should.not.eql(0); matchingEmojis.forEach(function(emoji) { var index = emoji.key.indexOf("c"); index.should.be.exactly(0); }); }); it("should return an empty array when no matching emojis are found", function () { var matchingEmojis = emoji.search("notAnEmoji"); matchingEmojis.length.should.be.exactly(0); }); }); describe("unemojify(str)", function () { it("should parse emoji and replace them with :emoji:", function() { var coffee = emoji.unemojify('I ❤️ ☕️! - 😯⭐️😍 ::: test : : 👍+'); should.exist(coffee); coffee.should.be.exactly('I :heart: :coffee:! - :hushed::star::heart_eyes: ::: test : : :thumbsup:+'); }) it("should leave unknown emoji", function () { // Emoji :melting_face: (U+1FAE0) Unicode 14.0 draft: https://emojipedia.org/unicode-14.0 var coffee = emoji.unemojify('I ⭐️ :another_one: 🫠'); should.exist(coffee); coffee.should.be.exactly('I :star: :another_one: 🫠'); }); it("should parse a complex emoji like woman-kiss-woman and replace it with :woman-kiss-woman:", function() { var coffee = emoji.unemojify('I love 👩‍❤️‍💋‍👩'); should.exist(coffee); coffee.should.be.exactly('I love :woman-kiss-woman:'); }); it("should parse flags correctly", function () { var flags = emoji.unemojify('The flags of 🇲🇽 and 🇲🇦 are not the same'); should.exists(flags); flags.should.be.exactly('The flags of :flag-mx: and :flag-ma: are not the same'); }); }); describe('find emoji', function() { it('Should be able to find a emoji by :name:', function() { var result = emoji.find(':heart:') should.exists(result); result.should.eql({ emoji: '❤️', key: 'heart' }); }); it('Should be able to find an emoji by name', function() { var result = emoji.find('heart'); should.exists(result); result.should.eql({ emoji: '❤️', key: 'heart' }); }); it('Should be able to find an emoji by code', function() { var result = emoji.find('❤'); should.exists(result); result.should.eql({ emoji: '❤️', key: 'heart' }); }); it('Should return `undefined` for unknown emojis', function() { var result = emoji.find('unknown_emoji'); should.not.exists(result); }) }); describe('hasEmoji', function() { it('Should be able to check a emoji by :name:', function() { var result = emoji.hasEmoji(':heart:'); result.should.equal(true) }); it('Should be able to check a emoji by name', function() { var result = emoji.hasEmoji('heart'); result.should.equal(true); }); it('Should be able to check a emoji by code text form)', function() { var result = emoji.hasEmoji('❤'); result.should.equal(true); }); it('Should be able to check a emoji by code in variant form', function() { var result = emoji.hasEmoji('❤️'); result.should.equal(true); }); it('Should return false for unknown emoji names', function() { var result = emoji.hasEmoji(':pizza-kiss-coffee:'); result.should.equal(false); }); it('Should return false for unknown emoji codes', function() { var result = emoji.hasEmoji('🍕❤️‍💋‍☕'); result.should.equal(false); }); }); describe('replace', function() { it('Should be able to strip emojis', function() { var result = emoji.replace('Host: eseaps001 Addr: 10.XX.XX.XX: - ⚠️ 〰️ 〰️ low disk space', '', true); result.should.equal('Host: eseaps001 Addr: 10.XX.XX.XX: - low disk space'); }); it('Should keep the trailing spaces when not explicitly told to clean', function() { var result = emoji.replace('Host: eseaps001 Addr: 10.XX.XX.XX: - ⚠️ 〰️ 〰️ low disk space', ''); result.should.equal('Host: eseaps001 Addr: 10.XX.XX.XX: - low disk space'); }); it('Should be able to strip a emoji by code text form', function() { var result = emoji.replace('I ❤ coffee', '', true); result.should.equal('I coffee'); }); it('Should be able to strip a emoji by code in variant form', function() { var result = emoji.replace('I ❤️ cleaning', '', true); result.should.equal('I cleaning'); }); it('Should be able to strip complex emojis', function() { var result = emoji.replace('Where did this 👩‍❤️‍💋‍👩 happen?', '', true); result.should.equal('Where did this happen?'); }); it('Should be able to strip flag emojis', function() { var result = emoji.replace('There is no flag 🇲🇽', '', true); result.should.equal('There is no flag'); }); it('Should be able to replace by callback function', function() { var result = emoji.replace('There is no ⚠ on my hard drive', function (emoji) { return emoji.key; }); result.should.equal('There is no warning on my hard drive'); }); it('Non existing complex emojis are known to be ignored', function() { var result = emoji.replace('Some 🍕❤️‍💋‍☕ emoji', ''); result.should.not.equal('Some emoji'); }); }); describe('strip', function() { it('Should be able to strip emojis', function() { var result = emoji.strip('Host: eseaps001 Addr: 10.XX.XX.XX: - ⚠️ 〰️ 〰️ low disk space'); result.should.equal('Host: eseaps001 Addr: 10.XX.XX.XX: - low disk space'); }); }); });