123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308 |
- /*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 '<img alt="' + code + '" src="' + name + '.png" />';
- });
- should.exist(coffee);
- coffee.should.be.exactly('I <img alt="❤️" src="heart.png" /> <img alt="☕" src="coffee.png" />');
- });
- it("should not wrap unknown using provided format function", function () {
- var coffee = emoji.emojify('I :unknown_emoji: :coffee:', null, function(code, name) {
- return '<img alt="' + code + '" src="' + name + '.png" />';
- });
- should.exist(coffee);
- coffee.should.be.exactly('I :unknown_emoji: <img alt="☕" src="coffee.png" />');
- });
- 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 '<img alt="' + code + '" src="' + name + '.png" />';
- }
- );
- should.exist(coffee);
- coffee.should.be.exactly('I unknown_emoji <img alt="☕" src="coffee.png" />');
- });
- });
- 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');
- });
- });
- });
|