diff --git a/test/ui-testing/CustomInsert.test.js b/test/ui-testing/CustomInsert.test.js index af976407..df5c7bf1 100644 --- a/test/ui-testing/CustomInsert.test.js +++ b/test/ui-testing/CustomInsert.test.js @@ -1,72 +1,95 @@ -const timeout = process.env.SLOWMO ? 60000 : 10000; -const fs = require('fs'); +let timeout = process.env.SLOWMO ? 60000 : 10000; +let fs = require("fs"); beforeAll(async () => { - path = fs.realpathSync('file://../examples/index.html'); - await page.goto('file://' + path, {waitUntil: 'domcontentloaded'}); + path = fs.realpathSync("file://../examples/index.html"); + await page.goto("file://" + path, { waitUntil: "domcontentloaded" }); }); -describe('Custom Insert text', () => { - test('Add Custom Insert text in rich text mode', async () => { - try { - if (await page.evaluate(() => $(".woofmark-mode-markdown").is(":disabled"))) { - await page.click('.woofmark-mode-wysiwyg'); - } - await page.waitForSelector('.ple-module-body'); - // Click on insert text button - await page.click('.woofmark-command-insert'); - // Select the option 'Nodes' from Menu: What Do you want to insert? - await page.waitForSelector('.dropdownMenu1'); - await page.click('.dropdownMenu1'); - await page.waitForSelector('.Nodes'); - await page.click('.Nodes'); - // Select the option 'List' from Menu: Insert as a? - await page.waitForSelector('.dropdownMenu2'); - await page.click('.dropdownMenu2'); - await page.waitForSelector('.List'); - await page.click('.List'); - // Add input tag - await page.$eval('.inputText', (el) => el.value = 'tag'); - // Press the Go! button - await page.click('.go1'); - await page.click('.woofmark-command-insert'); - // Evaluate the expression - await page.waitForSelector('.powertags'); - const stringIsIncluded = await page.evaluate(() => document.querySelector('.wk-wysiwyg').textContent.includes("Power tag: nodes:tag")); - expect(stringIsIncluded).toBe(true); +describe("Custom Insert text", () => { + test( + "Add Custom Insert text in rich text mode", + async () => { + try { + if ( + await page.evaluate(() => + $(".woofmark-mode-markdown").is(":disabled") + ) + ) { + await page.click(".woofmark-mode-wysiwyg"); + } + await page.waitForSelector(".ple-module-body"); + // Click on insert text button + await page.click(".woofmark-command-insert"); + // Select the option 'Nodes' from Menu: What Do you want to insert? + await page.waitForSelector(".dropdownMenu1"); + await page.click(".dropdownMenu1"); + await page.waitForSelector(".Nodes"); + await page.click(".Nodes"); + // Select the option 'List' from Menu: Insert as a? + await page.waitForSelector(".dropdownMenu2"); + await page.click(".dropdownMenu2"); + await page.waitForSelector(".List"); + await page.click(".List"); + // Add input tag + await page.$eval(".inputText", (el) => (el.value = "tag")); + // Press the Go! button + await page.click(".go1"); + await page.click(".woofmark-command-insert"); + // Evaluate the expression + await page.waitForSelector(".powertags"); + const stringIsIncluded = await page.evaluate(() => + document + .querySelector(".wk-wysiwyg") + .textContent.includes("Power tag: nodes:tag") + ); + expect(stringIsIncluded).toBe(true); - await page.waitForSelector('.woofmark-mode-markdown'); - await page.click('.woofmark-mode-markdown'); - await page.screenshot({path: 'buddy-screenshot1.png', fullPage: true}); - await page.waitForSelector('.ple-module-body'); - // await page.evaluate(() => document.querySelector('.ple-textarea').value += ' '); - // Click on insert text button - await page.click('.woofmark-command-insert'); - // Select the option 'Notes' from Menu: What Do you want to insert? - await page.waitForSelector('.dropdownMenu1'); - await page.click('.dropdownMenu1'); - await page.screenshot({path: 'buddy-screenshot11.png', fullPage: true}); - await page.waitForSelector('.Notes'); - await page.screenshot({path: 'buddy-screenshot2.png', fullPage: true}); - await page.click('.Notes'); - await page.screenshot({path: 'buddy-screenshot3.png'}); - // Select the option 'List' from Menu: Insert as a? - await page.waitForSelector('.dropdownMenu2'); - await page.click('.dropdownMenu2'); - await page.waitForSelector('.List'); - await page.click('.List'); - await page.screenshot({path: 'buddy-screenshot4.png'}); - // Add input tag - await page.$eval('.inputText', (el) => el.value = 'tag'); - // Press the Go! button - await page.click('.go1'); - await page.click('.woofmark-command-insert'); - // Evaluate the expression - const stringIsIncluded2 = await page.evaluate(() => document.querySelector('.ple-textarea').value.includes('[notes:tag]')); - expect(stringIsIncluded2).toBe(true); - await page.click('.woofmark-mode-wysiwyg'); - } catch (err) { - // console.log(err); - } - }, timeout); + await page.waitForSelector(".woofmark-mode-markdown"); + await page.click(".woofmark-mode-markdown"); + await page.screenshot({ + path: "buddy-screenshot1.png", + fullPage: true, + }); + await page.waitForSelector(".ple-module-body"); + // await page.evaluate(() => document.querySelector('.ple-textarea').value += ' '); + // Click on insert text button + await page.click(".woofmark-command-insert"); + // Select the option 'Notes' from Menu: What Do you want to insert? + await page.waitForSelector(".dropdownMenu1"); + await page.click(".dropdownMenu1"); + await page.screenshot({ + path: "buddy-screenshot11.png", + fullPage: true, + }); + await page.waitForSelector(".Notes"); + await page.screenshot({ + path: "buddy-screenshot2.png", + fullPage: true, + }); + await page.click(".Notes"); + await page.screenshot({ path: "buddy-screenshot3.png" }); + // Select the option 'List' from Menu: Insert as a? + await page.waitForSelector(".dropdownMenu2"); + await page.click(".dropdownMenu2"); + await page.waitForSelector(".List"); + await page.click(".List"); + await page.screenshot({ path: "buddy-screenshot4.png" }); + // Add input tag + await page.$eval(".inputText", (el) => (el.value = "tag")); + // Press the Go! button + await page.click(".go1"); + await page.click(".woofmark-command-insert"); + // Evaluate the expression + const stringIsIncluded2 = await page.evaluate(() => + document.querySelector(".ple-textarea").value.includes("[notes:tag]") + ); + expect(stringIsIncluded2).toBe(true); + await page.click(".woofmark-mode-wysiwyg"); + } catch (err) { + // console.log(err); + } + }, + timeout + ); }); diff --git a/test/ui-testing/bold.test.js b/test/ui-testing/bold.test.js index 948cc3db..336618ed 100644 --- a/test/ui-testing/bold.test.js +++ b/test/ui-testing/bold.test.js @@ -1,47 +1,73 @@ -const timeout = process.env.SLOWMO ? 60000 : 15000; -const fs = require('fs'); +let timeout = process.env.SLOWMO ? 60000 : 15000; +let fs = require("fs"); beforeAll(async () => { - path = fs.realpathSync('file://../examples/index.html'); - await page.goto('file://' + path, {waitUntil: 'domcontentloaded'}); + path = fs.realpathSync("file://../examples/index.html"); + await page.goto("file://" + path, { waitUntil: "domcontentloaded" }); }); -describe('Bold Text', () => { - test('Adds strong text in rich text mode', async () => { - // switches to wysiwyg mode if it is in markdown mode - if (await page.evaluate(() => $(".woofmark-mode-markdown").is(":disabled"))) { - await page.click('.woofmark-mode-wysiwyg'); - } +describe("Bold Text", () => { + test( + "Adds strong text in rich text mode", + async () => { + // switches to wysiwyg mode if it is in markdown mode + if ( + await page.evaluate(() => $(".woofmark-mode-markdown").is(":disabled")) + ) { + await page.click(".woofmark-mode-wysiwyg"); + } - // clicks on bold button and checks if 'strong text' is added in the editor - await page.waitForSelector('.ple-module-body'); - await page.waitForSelector('.wk-wysiwyg'); - await page.keyboard.press('Backspace'); - await page.click('.woofmark-command-bold'); + // clicks on bold button and checks if 'strong text' is added in the editor + await page.waitForSelector(".ple-module-body"); + await page.waitForSelector(".wk-wysiwyg"); + await page.keyboard.press("Backspace"); + await page.click(".woofmark-command-bold"); - const stringIsIncluded = await page.evaluate(() => document.querySelector('.wk-wysiwyg').textContent.includes('strong text')); - expect(stringIsIncluded).toBe(true); - // resets the changes by removing the added text - await page.keyboard.press("Backspace"); - }, timeout); + const stringIsIncluded = await page.evaluate(() => + document + .querySelector(".wk-wysiwyg") + .textContent.includes("strong text") + ); + expect(stringIsIncluded).toBe(true); + // resets the changes by removing the added text + await page.keyboard.press("Backspace"); + }, + timeout + ); - test('Adds strong text in markdown mode', async () => { - // clicks on bold button and checks if '**strong text**' is added in the editor - await page.waitForSelector('.woofmark-mode-markdown'); - await page.click('.woofmark-mode-markdown'); - await page.evaluate(() => document.querySelector('.ple-textarea').value += ' '); - await page.click('.woofmark-command-bold'); - let stringIsIncluded = await page.evaluate(() => document.querySelector('.ple-textarea').value.includes('**strong text**')); - expect(stringIsIncluded).toBe(true); + test( + "Adds strong text in markdown mode", + async () => { + // clicks on bold button and checks if '**strong text**' is added in the editor + await page.waitForSelector(".woofmark-mode-markdown"); + await page.click(".woofmark-mode-markdown"); + await page.evaluate( + () => (document.querySelector(".ple-textarea").value += " ") + ); + await page.click(".woofmark-command-bold"); + let stringIsIncluded = await page.evaluate(() => + document + .querySelector(".ple-textarea") + .value.includes("**strong text**") + ); + expect(stringIsIncluded).toBe(true); - // clicks bold button again to un-bolden the text but retains the text value 'strong text' - await page.click('.woofmark-command-bold'); - stringIsIncluded = await page.evaluate(() => document.querySelector('.ple-textarea').value.includes('strong text')); - expect(stringIsIncluded).toBe(true); - stringIsIncluded = await page.evaluate(() => document.querySelector('.ple-textarea').value.includes('**strong text**')); - expect(stringIsIncluded).toBe(false); + // clicks bold button again to un-bolden the text but retains the text value 'strong text' + await page.click(".woofmark-command-bold"); + stringIsIncluded = await page.evaluate(() => + document.querySelector(".ple-textarea").value.includes("strong text") + ); + expect(stringIsIncluded).toBe(true); + stringIsIncluded = await page.evaluate(() => + document + .querySelector(".ple-textarea") + .value.includes("**strong text**") + ); + expect(stringIsIncluded).toBe(false); - // resets changes by removing the added text and changes back to wysiwyg mode - await page.keyboard.press("Backspace"); - await page.click('.woofmark-mode-wysiwyg'); - }, timeout); + // resets changes by removing the added text and changes back to wysiwyg mode + await page.keyboard.press("Backspace"); + await page.click(".woofmark-mode-wysiwyg"); + }, + timeout + ); }); diff --git a/test/ui-testing/center.test.js b/test/ui-testing/center.test.js index b7ab8621..df1f32f3 100644 --- a/test/ui-testing/center.test.js +++ b/test/ui-testing/center.test.js @@ -1,35 +1,50 @@ -const timeout = process.env.SLOWMO ? 60000 : 15000; -const fs = require('fs'); +let timeout = process.env.SLOWMO ? 60000 : 15000; +fs = require("fs"); beforeAll(async () => { - path = fs.realpathSync('file://../examples/index.html'); - await page.goto('file://' + path, {waitUntil: 'domcontentloaded'}); + path = fs.realpathSync("file://../examples/index.html"); + await page.goto("file://" + path, { waitUntil: "domcontentloaded" }); }); -describe('Center Text', () => { - test('Centering and decentering text', async () => { - // selects a string from textarea in md mode - await page.setViewport({width: 1920, height: 1080}); - if (await page.evaluate(() => $(".woofmark-mode-wysiwyg").is(":disabled"))) { - await page.click('.woofmark-mode-markdown'); - } - await page.waitForSelector('.ple-module-body'); - await page.focus('.ple-textarea'); +describe("Center Text", () => { + test( + "Centering and decentering text", + async () => { + // selects a string from textarea in md mode + await page.setViewport({ width: 1920, height: 1080 }); + if ( + await page.evaluate(() => $(".woofmark-mode-wysiwyg").is(":disabled")) + ) { + await page.click(".woofmark-mode-markdown"); + } else { + await page.waitForSelector(".ple-module-body"); + await page.focus(".ple-textarea"); + } - // center aligns the string and checks for presence of '->' and '<-' - await page.click('.woofmark-command-autocenter'); - let opening = await page.evaluate(() => document.querySelector('.ple-textarea').value.includes('->')); - let closing = await page.evaluate(() => document.querySelector('.ple-textarea').value.includes('<-')); - expect(opening).toBe(true); - expect(closing).toBe(true); + // center aligns the string and checks for presence of '->' and '<-' + await page.click(".woofmark-command-autocenter"); + let opening = await page.evaluate(() => + document.querySelector(".ple-textarea").value.includes("->") + ); + let closing = await page.evaluate(() => + document.querySelector(".ple-textarea").value.includes("<-") + ); + expect(opening).toBe(true); + expect(closing).toBe(true); - // the selection changes from '-> some text <-' to ->'some text'<- - await page.click('.woofmark-command-autocenter'); - // clicking again removes the center alignment and tests for absence of '->' and '<-' - await page.click('.woofmark-command-autocenter'); - opening = await page.evaluate(() => document.querySelector('.ple-textarea').value.includes('->')); - closing = await page.evaluate(() => document.querySelector('.ple-textarea').value.includes('<-')); - expect(opening).toBe(false); - expect(closing).toBe(false); - await page.click('.woofmark-mode-wysiwyg'); - }, timeout); + // the selection changes from '-> some text <-' to ->'some text'<- + await page.click(".woofmark-command-autocenter"); + // clicking again removes the center alignment and tests for absence of '->' and '<-' + await page.click(".woofmark-command-autocenter"); + opening = await page.evaluate(() => + document.querySelector(".ple-textarea").value.includes("->") + ); + closing = await page.evaluate(() => + document.querySelector(".ple-textarea").value.includes("<-") + ); + expect(opening).toBe(false); + expect(closing).toBe(false); + await page.click(".woofmark-mode-wysiwyg"); + }, + timeout + ); }); diff --git a/test/ui-testing/editor.test.js b/test/ui-testing/editor.test.js index 94c25850..58af367e 100644 --- a/test/ui-testing/editor.test.js +++ b/test/ui-testing/editor.test.js @@ -1,45 +1,61 @@ -const timeout = process.env.SLOWMO ? 60000 : 15000; -const fs = require('fs'); +let timeout = process.env.SLOWMO ? 60000 : 15000; +let fs = require("fs"); let editor; beforeAll(async () => { - path = fs.realpathSync('file://../examples/index.html'); + path = fs.realpathSync("file://../examples/index.html"); // scriptPath = fs.realpathSync('file://../node_modules/jquery/dist/jquery.min.js'); // await page.addScriptTag({path: scriptPath}); - await page.goto('file://' + path, {waitUntil: 'domcontentloaded'}); + await page.goto("file://" + path, { waitUntil: "domcontentloaded" }); await page.evaluate(() => { editor = new PL.Editor({ - textarea: document.querySelector('.ple-textarea') + textarea: document.querySelector(".ple-textarea"), }); }); }); -describe('Errors', () => { - test('Editor exists and has a textarea', async () => { - expect( await page.evaluate(() => document.querySelector('.ple-textarea')) ).toBeDefined(); - expect( await page.evaluateHandle(() => editor) ).toBeDefined(); - expect( await page.evaluateHandle(() => editor.options.textarea) ).toBeDefined(); - expect( await page.evaluateHandle(() => editor.options.textarea.innerHTML) ).toEqual(await page.evaluateHandle(() => document.querySelector('.ple-textarea').innerHTML)); +describe("Errors", () => { + test("Editor exists and has a textarea", async () => { + expect( + await page.evaluate(() => document.querySelector(".ple-textarea")) + ).toBeDefined(); + expect(await page.evaluateHandle(() => editor)).toBeDefined(); + expect( + await page.evaluateHandle(() => editor.options.textarea) + ).toBeDefined(); + expect( + await page.evaluateHandle(() => editor.options.textarea.innerHTML) + ).toEqual( + await page.evaluateHandle( + () => document.querySelector(".ple-textarea").innerHTML + ) + ); }); - test('counts valid modules and enables publish button', async () => { - expect( await page.evaluate(() => editor.titleModule.el.find('input')[0].value) ).toBe(""); - expect( await page.evaluate(() => editor.titleModule.valid()) ).toBe(false); + test("counts valid modules and enables publish button", async () => { + expect( + await page.evaluate(() => editor.titleModule.el.find("input")[0].value) + ).toBe(""); + expect(await page.evaluate(() => editor.titleModule.valid())).toBe(false); - expect( await page.evaluate(() => editor.validate()) ).toBe(false); + expect(await page.evaluate(() => editor.validate())).toBe(false); - await page.evaluate(() => editor.richTextModule.wysiwyg.setMode('markdown')); // set editor mode to markdown + await page.evaluate(() => + editor.richTextModule.wysiwyg.setMode("markdown") + ); // set editor mode to markdown await page.evaluate(() => editor.richTextModule.value("")); // empty editor content on - expect( await page.evaluate(() => editor.richTextModule.valid()) ).toBe(false); + expect(await page.evaluate(() => editor.richTextModule.valid())).toBe( + false + ); await page.evaluate(() => editor.titleModule.value("My Title")); // set sample title await page.evaluate(() => editor.richTextModule.value("My Content")); // set sample content - expect( await page.evaluate(() => editor.validate()) ).toBe(true); + expect(await page.evaluate(() => editor.validate())).toBe(true); }); - test('Sends AJAX request on editor.publish()', async () => { - await page.evaluate(() => editor.options.destination = '/post'); - const spy = jest.fn().mockImplementation(async (options) => { + test("Sends AJAX request on editor.publish()", async () => { + await page.evaluate(() => (editor.options.destination = "/post")); + let spy = jest.fn().mockImplementation(async (options) => { await page.evaluate(() => { if (options === editor.options.destination) { const d = $.Deferred(); diff --git a/test/ui-testing/history.test.js b/test/ui-testing/history.test.js index 5314d6e3..d143f54b 100644 --- a/test/ui-testing/history.test.js +++ b/test/ui-testing/history.test.js @@ -1,109 +1,148 @@ -const timeout = process.env.SLOWMO ? 60000 : 10000; -const fs = require('fs'); +let timeout = process.env.SLOWMO ? 60000 : 10000; +let fs = require("fs"); let editor; beforeAll(async () => { - path = fs.realpathSync('file://../examples/index.html'); - await page.goto('file://' + path, {waitUntil: 'domcontentloaded'}); + path = fs.realpathSync("file://../examples/index.html"); + await page.goto("file://" + path, { waitUntil: "domcontentloaded" }); await page.evaluate(() => { editor = new PL.Editor({ - textarea: document.querySelector('.ple-textarea') + textarea: document.querySelector(".ple-textarea"), }); }); }); -describe('History', () => { - test('has log, key, interval and id', async () => { - expect( await page.evaluate(() => editor.history.log) ).toBeDefined(); - expect( await page.evaluate(() => editor.history.key) ).toBeDefined(); - expect( await page.evaluate(() => editor.history.options) ).toBeDefined(); - expect( await page.evaluate(() => editor.history.options.interval) ).toBeDefined(); - expect( await page.evaluate(() => editor.history.options.id) ).toBeDefined(); - }); - - test('can be flushed', async () => { - expect( await page.evaluate(() => editor.history.fetch()) ).not.toEqual([]); - expect( await page.evaluate(() => editor.history.last()) ).not.toBe(null); - - await page.evaluate(() => editor.history.flush()); - - expect( await page.evaluate(() => editor.history.fetch()) ).toEqual([]); - expect( await page.evaluate(() => editor.history.last()) ).toBe(null); - }); - - test('adds, fetches and stores', async () => { - await page.evaluate(() => editor.history.flush()); - expect( await page.evaluate(() => editor.history.fetch()) ).toEqual([]); - expect( await page.evaluate(() => editor.history.last()) ).toBe(null); - - expect( await page.evaluate(() => document.querySelector('.ple-history-saving').style.display) ).toBe('none'); - await page.evaluate(() => editor.history.add('some text')); - expect( await page.evaluate(() => editor.history.last().text) ).toBe('some text'); - expect( await page.evaluate(() => editor.history.last().timestamp) ).toBeDefined(); - - expect( await page.evaluate(() => editor.history.fetch().length) ).toEqual(1); - expect( await page.evaluate( () => editor.history.last().text) ).toBe('some text'); +describe( + "History", + () => { + test("has log, key, interval and id", async () => { + expect(await page.evaluate(() => editor.history.log)).toBeDefined(); + expect(await page.evaluate(() => editor.history.key)).toBeDefined(); + expect(await page.evaluate(() => editor.history.options)).toBeDefined(); + expect( + await page.evaluate(() => editor.history.options.interval) + ).toBeDefined(); + expect( + await page.evaluate(() => editor.history.options.id) + ).toBeDefined(); + }); - await page.evaluate(() => editor.history.add('some more text')); - expect( await page.evaluate( () => editor.history.last().text) ).toBe('some more text'); - expect( await page.evaluate(() => editor.history.last().timestamp) ).toBeDefined(); - expect( await page.evaluate(() => editor.history.fetch().length) ).toEqual(2); - }); + test("can be flushed", async () => { + expect(await page.evaluate(() => editor.history.fetch())).not.toEqual([]); + expect(await page.evaluate(() => editor.history.last())).not.toBe(null); - test('creates new log entry when value() set', async () => { - expect( await page.evaluate(() => editor.richTextModule.options.textarea.value.length) ).toBeGreaterThan(0); - expect( await page.evaluate(() => editor.richTextModule.options.textarea) ).toBeDefined(); - await page.evaluate(() => editor.richTextModule.value("changed textarea text")); - await page.evaluate(() => editor.history.check()); - expect(await page.evaluate(() => editor.history.last().text)).toBe("changed textarea text"); - }); + await page.evaluate(() => editor.history.flush()); - test('stores only 20 items until we optimize it', async () => { - await page.evaluate(() => editor.history.flush()); - await page.evaluate(() => { - for (let i = 0; i < 10; i++) { - editor.history.add("some text " + i); - } + expect(await page.evaluate(() => editor.history.fetch())).toEqual([]); + expect(await page.evaluate(() => editor.history.last())).toBe(null); }); - expect( await page.evaluate(() => editor.history.log.length) ).toBe(10); - await page.evaluate(() => { - for (let i = 10; i < 20; i++) { - editor.history.add("some text " + i); - } + test("adds, fetches and stores", async () => { + await page.evaluate(() => editor.history.flush()); + expect(await page.evaluate(() => editor.history.fetch())).toEqual([]); + expect(await page.evaluate(() => editor.history.last())).toBe(null); + + expect( + await page.evaluate( + () => document.querySelector(".ple-history-saving").style.display + ) + ).toBe("none"); + await page.evaluate(() => editor.history.add("some text")); + expect(await page.evaluate(() => editor.history.last().text)).toBe( + "some text" + ); + expect( + await page.evaluate(() => editor.history.last().timestamp) + ).toBeDefined(); + + expect(await page.evaluate(() => editor.history.fetch().length)).toEqual( + 1 + ); + expect(await page.evaluate(() => editor.history.last().text)).toBe( + "some text" + ); + + await page.evaluate(() => editor.history.add("some more text")); + expect(await page.evaluate(() => editor.history.last().text)).toBe( + "some more text" + ); + expect( + await page.evaluate(() => editor.history.last().timestamp) + ).toBeDefined(); + expect(await page.evaluate(() => editor.history.fetch().length)).toEqual( + 2 + ); }); - expect(await page.evaluate(() => editor.history.log.length)).toBe(20); - await page.evaluate(() => { - for (var i = 20; i < 30; i++) { - editor.history.add("some text " + i); - } + test("creates new log entry when value() set", async () => { + expect( + await page.evaluate( + () => editor.richTextModule.options.textarea.value.length + ) + ).toBeGreaterThan(0); + expect( + await page.evaluate(() => editor.richTextModule.options.textarea) + ).toBeDefined(); + await page.evaluate(() => + editor.richTextModule.value("changed textarea text") + ); + await page.evaluate(() => editor.history.check()); + expect(await page.evaluate(() => editor.history.last().text)).toBe( + "changed textarea text" + ); }); - expect(await page.evaluate(() => editor.history.log.length)).toBe(20); - await page.evaluate(() => editor.history.fetch()); - expect(await page.evaluate(() => editor.history.log.length)).toBe(20); - expect(await page.evaluate(() => editor.history.log[0].text)).toBe('some text 10'); - }); + test("stores only 20 items until we optimize it", async () => { + await page.evaluate(() => editor.history.flush()); + await page.evaluate(() => { + for (let i = 0; i < 10; i++) { + editor.history.add("some text " + i); + } + }); + expect(await page.evaluate(() => editor.history.log.length)).toBe(10); - test('writes out history to a DOM element', async () => { - await page.evaluate(() => $('body').append("
")); + await page.evaluate(() => { + for (let i = 10; i < 20; i++) { + editor.history.add("some text " + i); + } + }); + expect(await page.evaluate(() => editor.history.log.length)).toBe(20); + await page.evaluate(() => { + for (var i = 20; i < 30; i++) { + editor.history.add("some text " + i); + } + }); + expect(await page.evaluate(() => editor.history.log.length)).toBe(20); - await page.evaluate(() => editor.history.display($('#history')[0])); + await page.evaluate(() => editor.history.fetch()); + expect(await page.evaluate(() => editor.history.log.length)).toBe(20); + expect(await page.evaluate(() => editor.history.log[0].text)).toBe( + "some text 10" + ); + }); - expect(await page.evaluate(() => editor.history.log.length)).not.toBe(0); - expect(await page.evaluate(() => $('#history').html())).not.toBe(''); - expect(await page.evaluate(() => $('#history p.log').length)).toBe(20); - expect(await page.evaluate(() => $('#history p.day').length)).toBe(1); + test("writes out history to a DOM element", async () => { + await page.evaluate(() => $("body").append("
")); - // start over and build DOM, checking as we go: - await page.evaluate(() => editor.history.log = []); - for (let i = 0; i < 10; i++) { - await page.evaluate(() => { - editor.history.add("some text " + i); - editor.history.display($('#history')[0]); - }); - expect(await page.evaluate(() => $('#history p.log').length)).toBe(1 + i); - } - expect(await page.evaluate(() => $('#history p.day').length)).toBe(1); - }); -}, timeout); + await page.evaluate(() => editor.history.display($("#history")[0])); + + expect(await page.evaluate(() => editor.history.log.length)).not.toBe(0); + expect(await page.evaluate(() => $("#history").html())).not.toBe(""); + expect(await page.evaluate(() => $("#history p.log").length)).toBe(20); + expect(await page.evaluate(() => $("#history p.day").length)).toBe(1); + + // start over and build DOM, checking as we go: + await page.evaluate(() => (editor.history.log = [])); + for (let i = 0; i < 10; i++) { + await page.evaluate(() => { + editor.history.add("some text " + i); + editor.history.display($("#history")[0]); + }); + expect(await page.evaluate(() => $("#history p.log").length)).toBe( + 1 + i + ); + } + expect(await page.evaluate(() => $("#history p.day").length)).toBe(1); + }); + }, + timeout +);