UNPKG

substance

Version:

Substance is a JavaScript library for web-based content editing. It provides building blocks for realizing custom text editors and web-based publishing systems.

122 lines (109 loc) 3.64 kB
import { module } from 'substance-test' import { DefaultDOMElement, MemoryDOMElement, platform } from 'substance' import createTestArticle from './fixture/createTestArticle' import simple from './fixture/simple' import getTestConfig from './fixture/getTestConfig' const CONTENT = '0123456789' XMLExporterTests() if (platform.inBrowser) { XMLExporterTests('memory') } function XMLExporterTests(memory) { const test = module('XMLExporter' + ( memory ? ' [memory]' : ''), { before: function(t) { t.elementFactory = memory ? MemoryDOMElement.createDocument('xml') : DefaultDOMElement.createDocument('xml') } }) test("Exporting paragraph", function(t) { let { doc, exporter } = setup(t) let p1 = doc.create({ type: 'paragraph', id: 'p1', content: CONTENT }) let el = exporter.convertNode(p1) let actual = el.serialize() let expected = '<p id="p1">' + CONTENT + '</p>' t.equal(actual, expected) t.end() }) test("Exporting paragraph with strong", function(t) { let { doc, exporter } = setup(t) let p1 = doc.create({ type: 'paragraph', id: 'p1', content: CONTENT }) doc.create({ type: 'strong', id: 's1', start: { path: ['p1', 'content'], offset: 4 }, end: { offset: 7 } }) let el = exporter.convertNode(p1) let actual = el.serialize() let expected = '<p id="p1">0123<strong id="s1">456</strong>789</p>' t.equal(actual, expected) t.end() }) test("Exporting h1", function(t) { let { doc, exporter } = setup(t) let h1 = doc.create({ type: 'heading', id: 'h1', level: 1, content: CONTENT }) let el = exporter.convertNode(h1) let actual = el.serialize() let expected = '<h1 id="h1">' + CONTENT + '</h1>' t.equal(actual, expected) t.end() }) test("Exporting h2", function(t) { let { doc, exporter } = setup(t) let h2 = doc.create({ type: 'heading', id: 'h2', level: 2, content: CONTENT }) let el = exporter.convertNode(h2) let actual = el.serialize() let expected = '<h2 id="h2">' + CONTENT + '</h2>' t.equal(actual, expected) t.end() }) test("Exporting simple document", function(t) { let { doc, exporter } = setup(t, simple) let rootEl = exporter.exportDocument(doc) let actual = rootEl.serialize() let expected = [ '<article>', '<p id="p1">' + CONTENT + '</p>', '<p id="p2">' + CONTENT + '</p>', '<p id="p3">' + CONTENT + '</p>', '<p id="p4">' + CONTENT + '</p>', '</article>' ].join('') t.equal(expected, actual) t.end() }) test("Exporting meta", function(t) { let { doc, exporter } = setup(t) let meta = doc.create({ type: "meta", id: "meta", title: 'Untitled' }) let el = exporter.convertNode(meta) let actual = el.serialize() let expected = '<meta id="meta"><title>Untitled</title></meta>' t.equal(actual, expected) t.ok(true) t.end() }) // FIXME: broken since introduction of file nodes // test("Exporting image", function(t) { // let data = { type: 'image', id: 'img1', 'src': 'img1.png', 'previewSrc': 'img1preview.png' } // let img = doc.create(data) // let el = exporter.convertNode(img) // t.equal(el.tagName.toLowerCase(), 'image') // t.equal(el.id, 'img1') // t.equal(el.getAttribute('src'), 'img1.png') // t.end() // }) function setup(t, fixture) { let config = getTestConfig() let exporter = config.createExporter('xml', {}, { elementFactory: t.elementFactory }) let doc = createTestArticle(fixture) return { exporter, doc } } }