UNPKG

ember-cli-ajh

Version:

Command line tool for developing ambitious ember.js apps

120 lines (106 loc) 6.66 kB
'use strict'; var MarkdownColor = require('../../../lib/utilities/markdown-color'); var expect = require('chai').expect; var path = require('path'); var chalk = require('chalk'); function isAnsiSupported() { // when ansi is supported this should be '\u001b[0m\u001b[31ma\u001b[39m\u001b[0m\n\n' return chalk.red('a') !== 'a'; } (isAnsiSupported() ? describe : describe.skip)('MarkdownColor', function() { var mc; beforeEach(function() { /* // check to make sure ansi is supported // can use this.skip() after Mocha 2.1.1 // see https://github.com/mochajs/mocha/pull/946 if (isAnsiSupported()) { this.skip(); } */ mc = new MarkdownColor(); }); it('parses default markdown', function() { // console.log(mc.render('# foo\n__bold__ **words**\n* un\n* ordered\n* list')) expect(mc.render('# foo\n__bold__ words\n* un\n* ordered\n* list')).to.equal( '\u001b[35m\u001b[4m\u001b[1m\nfoo\u001b[22m\u001b[24m\u001b[39m\n\u001b[0m'+ '\u001b[1mbold\u001b[22m words\u001b[0m\n\n \u001b[0m* un\u001b[0m\n '+ '\u001b[0m* ordered\u001b[0m\n \u001b[0m* list\u001b[0m\n\n'); }); it('parses color tokens', function() { expect(mc.render('<red>red</red>')).to.equal('\u001b[0m\u001b[31mred\u001b[39m\u001b[0m\n\n'); expect(mc.render('<green>green</green>')).to.equal('\u001b[0m\u001b[32mgreen\u001b[39m\u001b[0m\n\n'); expect(mc.render('<blue>blue</blue>')).to.equal('\u001b[0m\u001b[34mblue\u001b[39m\u001b[0m\n\n'); expect(mc.render('<cyan>cyan</cyan>')).to.equal('\u001b[0m\u001b[36mcyan\u001b[39m\u001b[0m\n\n'); expect(mc.render('<magenta>magenta</magenta>')).to.equal('\u001b[0m\u001b[35mmagenta\u001b[39m\u001b[0m\n\n'); expect(mc.render('<yellow>yellow</yellow>')).to.equal('\u001b[0m\u001b[33myellow\u001b[39m\u001b[0m\n\n'); expect(mc.render('<black>black</black>')).to.equal('\u001b[0m\u001b[30mblack\u001b[39m\u001b[0m\n\n'); expect(mc.render('<gray>gray</gray>')).to.equal('\u001b[0m\u001b[90mgray\u001b[39m\u001b[0m\n\n'); expect(mc.render('<grey>grey</grey>')).to.equal('\u001b[0m\u001b[90mgrey\u001b[39m\u001b[0m\n\n'); expect(mc.render('<bgRed>bgRed</bgRed>')).to.equal('\u001b[0m\u001b[41mbgRed\u001b[49m\u001b[0m\n\n'); expect(mc.render('<bgGreen>bgGreen</bgGreen>')).to.equal('\u001b[0m\u001b[42mbgGreen\u001b[49m\u001b[0m\n\n'); expect(mc.render('<bgBlue>bgBlue</bgBlue>')).to.equal('\u001b[0m\u001b[44mbgBlue\u001b[49m\u001b[0m\n\n'); expect(mc.render('<bgCyan>bgCyan</bgCyan>')).to.equal('\u001b[0m\u001b[46mbgCyan\u001b[49m\u001b[0m\n\n'); expect(mc.render('<bgMagenta>bgMagenta</bgMagenta>')).to.equal('\u001b[0m\u001b[45mbgMagenta\u001b[49m\u001b[0m\n\n'); expect(mc.render('<bgYellow>bgYellow</bgYellow>')).to.equal('\u001b[0m\u001b[43mbgYellow\u001b[49m\u001b[0m\n\n'); expect(mc.render('<bgBlack>bgBlack</bgBlack>')).to.equal('\u001b[0m\u001b[40mbgBlack\u001b[49m\u001b[0m\n\n'); }); it('parses custom tokens', function() { expect(mc.render('--option')).to.equal('\u001b[0m\u001b[36m--option\u001b[39m\u001b[0m\n\n'); expect(mc.render('(Default: value)')).to.equal('\u001b[0m\u001b[36m(Default: value)\u001b[39m\u001b[0m\n\n'); expect(mc.render('(Required)')).to.equal('\u001b[0m\u001b[36m(Required)\u001b[39m\u001b[0m\n\n'); }); it('accepts tokens on instantiation', function() { var mctemp = new MarkdownColor({ tokens: { foo: { token: '^foo^', pattern: /(?:\^foo\^)(.*?)(?:\^foo\^)/g, render: MarkdownColor.prototype.renderStylesFactory(chalk, ['blue','bgWhite']) } } }); expect(mctemp.render('^foo^foo^foo^')).to.equal('\u001b[0m\u001b[34m\u001b[47mfoo\u001b[49m\u001b[39m\u001b[0m\n\n'); }); it('parses markdown files', function() { // console.log(mc.renderFile(path.join(__dirname,'../../../tests/fixtures/markdown/foo.md'))) expect(mc.renderFile(path.join(__dirname,'../../../tests/fixtures/markdown/foo.md'))).to .equal('\u001b[0m\u001b[36mtacos are \u001b[33mdelicious\u001b[36m \u001b[34mand I\u001b[39m enjoy eating them\u001b[39m\u001b[0m\n\n'); }); it('allows tokens inside other token bounds', function() { // console.log(mc.render('<cyan>tacos are <yellow>delicious</yellow> and I enjoy eating them</cyan>')) expect(mc.render('<cyan>tacos are <yellow>delicious</yellow> and I enjoy eating them</cyan>')) .to.equal('\u001b[0m\u001b[36mtacos are \u001b[33mdelicious\u001b[36m and I enjoy eating'+ ' them\u001b[39m\u001b[0m\n\n'); }); }); /* Chalk supported styles - styles: { reset: { open: '\u001b[0m', close: '\u001b[0m', closeRe: /[0m/g }, bold: { open: '\u001b[1m', close: '\u001b[22m', closeRe: /[22m/g }, dim: { open: '\u001b[2m', close: '\u001b[22m', closeRe: /[22m/g }, italic: { open: '\u001b[3m', close: '\u001b[23m', closeRe: /[23m/g }, underline: { open: '\u001b[4m', close: '\u001b[24m', closeRe: /[24m/g }, inverse: { open: '\u001b[7m', close: '\u001b[27m', closeRe: /[27m/g }, hidden: { open: '\u001b[8m', close: '\u001b[28m', closeRe: /[28m/g }, strikethrough: { open: '\u001b[9m', close: '\u001b[29m', closeRe: /[29m/g }, black: { open: '\u001b[30m', close: '\u001b[39m', closeRe: /[39m/g }, red: { open: '\u001b[31m', close: '\u001b[39m', closeRe: /[39m/g }, green: { open: '\u001b[32m', close: '\u001b[39m', closeRe: /[39m/g }, yellow: { open: '\u001b[33m', close: '\u001b[39m', closeRe: /[39m/g }, blue: { open: '\u001b[34m', close: '\u001b[39m', closeRe: /[39m/g }, magenta: { open: '\u001b[35m', close: '\u001b[39m', closeRe: /[39m/g }, cyan: { open: '\u001b[36m', close: '\u001b[39m', closeRe: /[39m/g }, white: { open: '\u001b[37m', close: '\u001b[39m', closeRe: /[39m/g }, gray: { open: '\u001b[90m', close: '\u001b[39m', closeRe: /[39m/g }, bgBlack: { open: '\u001b[40m', close: '\u001b[49m', closeRe: /[49m/g }, bgRed: { open: '\u001b[41m', close: '\u001b[49m', closeRe: /[49m/g }, bgGreen: { open: '\u001b[42m', close: '\u001b[49m', closeRe: /[49m/g }, bgYellow: { open: '\u001b[43m', close: '\u001b[49m', closeRe: /[49m/g }, bgBlue: { open: '\u001b[44m', close: '\u001b[49m', closeRe: /[49m/g }, bgMagenta: { open: '\u001b[45m', close: '\u001b[49m', closeRe: /[49m/g }, bgCyan: { open: '\u001b[46m', close: '\u001b[49m', closeRe: /[49m/g }, bgWhite: { open: '\u001b[47m', close: '\u001b[49m', closeRe: /[49m/g }, grey: { open: '\u001b[90m', close: '\u001b[39m', closeRe: /[39m/g } }, Use strip-ansi to check content in environments that don't support it? */