2019-11-06 12:15:12 -06:00
|
|
|
const marked = require('../../src/marked.js');
|
2018-03-03 21:33:02 -06:00
|
|
|
|
2019-03-11 11:12:46 -05:00
|
|
|
describe('Test heading ID functionality', () => {
|
|
|
|
it('should add id attribute by default', () => {
|
2019-04-25 13:07:58 -05:00
|
|
|
const renderer = new marked.Renderer();
|
|
|
|
const slugger = new marked.Slugger();
|
|
|
|
const header = renderer.heading('test', 1, 'test', slugger);
|
2018-12-21 15:23:33 -08:00
|
|
|
expect(header).toBe('<h1 id="test">test</h1>\n');
|
2018-12-20 16:07:10 -05:00
|
|
|
});
|
|
|
|
|
2019-03-11 11:12:46 -05:00
|
|
|
it('should NOT add id attribute when options set false', () => {
|
2019-04-25 13:07:58 -05:00
|
|
|
const renderer = new marked.Renderer({ headerIds: false });
|
|
|
|
const header = renderer.heading('test', 1, 'test');
|
2018-12-21 15:23:33 -08:00
|
|
|
expect(header).toBe('<h1>test</h1>\n');
|
2018-12-20 16:07:10 -05:00
|
|
|
});
|
2018-12-21 15:23:33 -08:00
|
|
|
});
|
2018-12-20 16:07:10 -05:00
|
|
|
|
2019-03-11 11:12:46 -05:00
|
|
|
describe('Test slugger functionality', () => {
|
|
|
|
it('should use lowercase slug', () => {
|
2019-04-25 13:07:58 -05:00
|
|
|
const slugger = new marked.Slugger();
|
2018-12-21 15:23:33 -08:00
|
|
|
expect(slugger.slug('Test')).toBe('test');
|
2018-12-20 16:07:10 -05:00
|
|
|
});
|
|
|
|
|
2019-03-11 11:12:46 -05:00
|
|
|
it('should be unique to avoid collisions 1280', () => {
|
2019-04-25 13:07:58 -05:00
|
|
|
const slugger = new marked.Slugger();
|
2018-12-21 15:23:33 -08:00
|
|
|
expect(slugger.slug('test')).toBe('test');
|
|
|
|
expect(slugger.slug('test')).toBe('test-1');
|
|
|
|
expect(slugger.slug('test')).toBe('test-2');
|
2018-04-05 00:00:08 -05:00
|
|
|
});
|
2018-04-03 15:10:26 -04:00
|
|
|
|
2019-03-11 11:12:46 -05:00
|
|
|
it('should be unique when slug ends with number', () => {
|
2019-04-25 13:07:58 -05:00
|
|
|
const slugger = new marked.Slugger();
|
2018-12-21 15:51:05 -08:00
|
|
|
expect(slugger.slug('test 1')).toBe('test-1');
|
|
|
|
expect(slugger.slug('test')).toBe('test');
|
|
|
|
expect(slugger.slug('test')).toBe('test-2');
|
|
|
|
});
|
|
|
|
|
2019-03-11 11:12:46 -05:00
|
|
|
it('should be unique when slug ends with hyphen number', () => {
|
2019-04-25 13:07:58 -05:00
|
|
|
const slugger = new marked.Slugger();
|
2018-12-21 15:23:33 -08:00
|
|
|
expect(slugger.slug('foo')).toBe('foo');
|
|
|
|
expect(slugger.slug('foo')).toBe('foo-1');
|
|
|
|
expect(slugger.slug('foo 1')).toBe('foo-1-1');
|
|
|
|
expect(slugger.slug('foo-1')).toBe('foo-1-2');
|
|
|
|
expect(slugger.slug('foo')).toBe('foo-2');
|
|
|
|
});
|
|
|
|
|
2019-03-11 11:12:46 -05:00
|
|
|
it('should allow non-latin chars', () => {
|
2019-04-25 13:07:58 -05:00
|
|
|
const slugger = new marked.Slugger();
|
2018-12-21 15:23:33 -08:00
|
|
|
expect(slugger.slug('привет')).toBe('привет');
|
|
|
|
});
|
|
|
|
|
2019-03-11 11:12:46 -05:00
|
|
|
it('should remove ampersands 857', () => {
|
2019-04-25 13:07:58 -05:00
|
|
|
const slugger = new marked.Slugger();
|
2018-12-21 15:23:33 -08:00
|
|
|
expect(slugger.slug('This & That Section')).toBe('this--that-section');
|
|
|
|
});
|
|
|
|
|
2019-03-11 11:12:46 -05:00
|
|
|
it('should remove periods', () => {
|
2019-04-25 13:07:58 -05:00
|
|
|
const slugger = new marked.Slugger();
|
2018-12-21 15:23:33 -08:00
|
|
|
expect(slugger.slug('file.txt')).toBe('filetxt');
|
2018-04-05 00:00:08 -05:00
|
|
|
});
|
2018-04-03 15:10:26 -04:00
|
|
|
});
|
2018-05-02 09:13:58 -05:00
|
|
|
|
2019-03-11 11:12:46 -05:00
|
|
|
describe('Test paragraph token type', () => {
|
|
|
|
it('should use the "paragraph" type on top level', () => {
|
2018-05-02 09:13:58 -05:00
|
|
|
const md = 'A Paragraph.\n\n> A blockquote\n\n- list item\n';
|
|
|
|
|
|
|
|
const tokens = marked.lexer(md);
|
|
|
|
|
|
|
|
expect(tokens[0].type).toBe('paragraph');
|
|
|
|
expect(tokens[3].type).toBe('paragraph');
|
|
|
|
expect(tokens[7].type).toBe('text');
|
|
|
|
});
|
|
|
|
});
|
2019-12-05 11:45:07 -06:00
|
|
|
|
|
|
|
describe('changeDefaults', () => {
|
|
|
|
it('should change global defaults', () => {
|
|
|
|
const { defaults, changeDefaults } = require('../../src/defaults');
|
|
|
|
expect(defaults.test).toBeUndefined();
|
|
|
|
changeDefaults({ test: true });
|
|
|
|
expect(require('../../src/defaults').defaults.test).toBe(true);
|
|
|
|
});
|
|
|
|
});
|
2020-02-12 00:24:43 -06:00
|
|
|
|
|
|
|
describe('inlineLexer', () => {
|
|
|
|
it('should send html to renderer.html', () => {
|
|
|
|
const renderer = new marked.Renderer();
|
|
|
|
spyOn(renderer, 'html').and.callThrough();
|
|
|
|
const md = 'HTML Image: <img alt="MY IMAGE" src="example.png" />';
|
|
|
|
marked(md, { renderer });
|
|
|
|
|
|
|
|
expect(renderer.html).toHaveBeenCalledWith('<img alt="MY IMAGE" src="example.png" />');
|
|
|
|
});
|
|
|
|
});
|