import * as mount from '../../lib/mount';
import * as patch from '../../lib/patch';
describe("HTML DOMMount", function () {
it("Should be able to create a DOMMount", function () {
// Set up our document body
document.body.innerHTML = "
";
const app = document.querySelector('div#app');
const mounted = new mount.DOMMount(document, '#app', (event: Event, target: Element) => {});
expect(mounted).toBeDefined();
expect(mounted.doc).toBeDefined();
expect(mounted.doc).toBe(document);
expect(mounted.mountNode).toBeDefined();
expect(mounted.mountNode).toBe(app);
const newContent = `
Wrecker
Wrecker
Wrecker
Wrecker
`.trim();
mounted.patch(newContent);
expect(mounted.innerHTML()).toBe(newContent);
});
it("Should be able to patch an existing DOMMount", function () {
// Set up our document body
document.body.innerHTML = `
Wrecker
Wrecker
Wrecker
Wrecker
`.trim();
const app = document.querySelector('div#app');
const mounted = new mount.DOMMount(document, '#app', (event: Event, target: Element) => {});
expect(mounted).toBeDefined();
expect(mounted.doc).toBeDefined();
expect(mounted.doc).toBe(document);
expect(mounted.mountNode).toBeDefined();
expect(mounted.mountNode).toBe(app);
const newContent2 = `
Wrecker
Wrecker
Wrecker
Wrecker
`.trim();
mounted.patch(newContent2);
expect(mounted.innerHTML()).toBe(newContent2);
});
it("Should be able to receive DOM events with a DOMMount", function () {
// Set up our document body
document.body.innerHTML = "";
const app = document.querySelector('div#app');
let eventReceived = 0;
const mounted = new mount.DOMMount(document, '#app', (event: Event, target: Element) => {
eventReceived++;
});
expect(mounted).toBeDefined();
expect(mounted.doc).toBeDefined();
expect(mounted.doc).toBe(document);
expect(mounted.mountNode).toBeDefined();
expect(mounted.mountNode).toBe(app);
const newContent = `
Wrecker
Wrecker
Wrecker
Wrecker
`.trim();
mounted.patch(newContent);
expect(mounted.innerHTML()).toBe(newContent);
const rackItem2 = mounted.mountNode.querySelector('div#rack-item-2') as Element;
const clickEvent = new Event('rackup', {bubbles: true});
rackItem2.dispatchEvent(clickEvent);
expect(eventReceived).toBe(1);
});
});
describe("JSON DOMMount Fragment", function () {
it("Should be able to patch an existing DOMMount", function () {
// Set up our document body
document.body.innerHTML = `
Wrecker
Wrecker
Wrecker
Wrecker
`;
const app = document.querySelector('div#app');
const mounted = new mount.DOMMount(document, '#app', (event: Event, target: Element) => {});
expect(mounted).toBeDefined();
expect(mounted.doc).toBeDefined();
expect(mounted.doc).toBe(document);
expect(mounted.mountNode).toBeDefined();
expect(mounted.mountNode).toBe(app);
const renderedContent = `
Wrecker Walk away
`;
const patchContent = patch.ToJSONNode(renderedContent, false, null);
mounted.streamList(patchContent);
expect(mounted.innerHTML()).not.toBe('');
expect(mounted.mountNode.querySelector('div#rack-item-2')).toBeDefined();
expect(mounted.mountNode.querySelector('div#rack-item-2')!.getAttribute('events')).toBe('rackup-00');
const spanWrack = mounted.mountNode.querySelector('div#rack-item-2')!.querySelector('span')!;
expect(spanWrack).toBeDefined();
expect(spanWrack.innerHTML).toBe('Wrecker Walk away');
expect(spanWrack.textContent).toBe('Wrecker Walk away');
});
});
describe("JSON DOMMount", function () {
it("Should be able to create a DOMMount", function () {
// Set up our document body
document.body.innerHTML = "";
const app = document.querySelector('div#app');
const mounted = new mount.DOMMount(document, '#app', (event: Event, target: Element) => {});
expect(mounted).toBeDefined();
expect(mounted.doc).toBeDefined();
expect(mounted.doc).toBe(document);
expect(mounted.mountNode).toBeDefined();
expect(mounted.mountNode).toBe(app);
const renderedContent = `
Wrecker
Wrecker
Wrecker
Wrecker
`;
const patchContent = patch.ToJSONNode(renderedContent, false, null);
mounted.patchList(patchContent);
expect(mounted.innerHTML()).not.toBe('');
expect(mounted.mountNode.querySelector('div#rack-item-1')).toBeDefined()
});
it("Should be able to patch an existing DOMMount", function () {
// Set up our document body
document.body.innerHTML = `
Wrecker
Wrecker
Wrecker
Wrecker
`;
const app = document.querySelector('div#app');
const mounted = new mount.DOMMount(document, '#app', (event: Event, target: Element) => {});
expect(mounted).toBeDefined();
expect(mounted.doc).toBeDefined();
expect(mounted.doc).toBe(document);
expect(mounted.mountNode).toBeDefined();
expect(mounted.mountNode).toBe(app);
const renderedContent = `
Wrecker
Wrecker
Wrecker
Wrecker
`;
const patchContent = patch.ToJSONNode(renderedContent, false, null);
mounted.patchList(patchContent);
expect(mounted.innerHTML()).not.toBe('');
expect(mounted.mountNode.querySelector('div#rack-item-1')).toBeDefined();
expect(mounted.mountNode.querySelector('div#rack-item-1')!.getAttribute('events')).toBe('rackup-00');
});
it("Should be able to receive DOM events with a DOMMount", function () {
// Set up our document body
document.body.innerHTML = "";
const app = document.querySelector('div#app');
let eventReceived = 0;
const mounted = new mount.DOMMount(document, '#app', (event: Event, target: Element) => {
eventReceived++;
});
expect(mounted).toBeDefined();
expect(mounted.doc).toBeDefined();
expect(mounted.doc).toBe(document);
expect(mounted.mountNode).toBeDefined();
expect(mounted.mountNode).toBe(app);
const renderedContent = `
Wrecker
Wrecker
Wrecker
Wrecker
`;
const patchContent = patch.ToJSONNode(renderedContent, false, null);
mounted.patchList(patchContent);
expect(mounted.innerHTML()).not.toBe('');
expect(mounted.mountNode.querySelector('div#rack-item-1')).toBeDefined();
expect(mounted.mountNode.querySelector('div#rack-item-1')!.getAttribute('events')).toBe('rackup-00');
const rackItem2 = mounted.mountNode.querySelector('div#rack-item-2') as Element;
const clickEvent = new Event('rackup', {bubbles: true});
rackItem2.dispatchEvent(clickEvent);
expect(eventReceived).toBe(1);
});
});