extwee
Version:
A story compiler tool using Twine-compatible formats
181 lines (127 loc) • 5.77 kB
JavaScript
import { compile as compileTwine1HTML } from '../../src/Twine1HTML/compile.js';
import { Story } from '../../src/Story.js';
import { readFileSync } from 'fs';
import Passage from '../../src/Passage.js';
describe('Twine1HTMLCompiler', () => {
describe('compile()', () => {
it('story should be instanceof Story', () => {
expect(() => { compileTwine1HTML({}); }).toThrow();
});
it('Should create an empty file without valid header.html', function () {
// Create story.
const s = new Story();
// Compile Twine 1.
const t1 = compileTwine1HTML(s);
// Test.
expect(t1.length).toBe(0);
});
it('Should replace "VERSION" and "TIME" in mock header.html file', function () {
// Create story.
const s = new Story();
// Set creator.
s.creator = 'Test1';
// Read mock header.html
const header = readFileSync('test/Twine1HTML/Twine1HTMLCompiler/test1.html', 'utf-8');
// Read engine code.
const engine = readFileSync('test/Twine1HTML/Twine1HTMLCompiler/Twine1/engine.js', 'utf-8');
// Compile file.
const result = compileTwine1HTML(s, engine, header);
// Test for creator.
expect(result.includes('Test1')).toBe(true);
// Test for time.
expect(result.includes(new Date().getFullYear().toString())).toBe(true);
});
it('Should include Twine engine code', function () {
// Create story.
const s = new Story();
// Read mock header.html
const header = readFileSync('test/Twine1HTML/Twine1HTMLCompiler/engineTest.html', 'utf-8');
// Read engine code.
const engine = readFileSync('test/Twine1HTML/Twine1HTMLCompiler/Twine1/engine.js', 'utf-8');
// Compile file.
compileTwine1HTML(s, engine, header);
// Read file.
const result = readFileSync('test/Twine1HTML/Twine1HTMLCompiler/test3.html', 'utf-8');
// Test for engine.
expect(result.includes('function clone(a)')).toBe(true);
});
it('Should include story format based on name', function () {
// Create story.
const s = new Story();
// Add passage.
s.addPassage(new Passage('Start', 'Work'));
// Set story start.
s.start = 'Start';
// Read header.html.
const header = readFileSync('test/Twine1HTML/Twine1HTMLCompiler/jonah-1.4.2/header.html', 'utf-8');
// Read code.js.
const codeJS = readFileSync('test/Twine1HTML/Twine1HTMLCompiler/jonah-1.4.2/code.js', 'utf-8');
// Read engine code.
const engine = readFileSync('test/Twine1HTML/Twine1HTMLCompiler/Twine1/engine.js', 'utf-8');
// Compile file.
const result = compileTwine1HTML(s, engine, header, 'jonah', codeJS);
// Test for code.js.
expect(result.includes('Tale.prototype.canBookmark')).toBe(true);
// Test for passage.
expect(result.includes('tiddler="Start"')).toBe(true);
// Test for story size.
expect(result.includes('data-size="1"')).toBe(true);
});
it('Should include story format based on name with jQuery and Modernizr', function () {
// Create story.
const s = new Story();
// Add passage.
s.addPassage(new Passage('Start', 'Work'));
// Set story start.
s.start = 'Start';
// Read header.html.
const header = readFileSync('test/Twine1HTML/Twine1HTMLCompiler/jonah-1.4.2/header.html', 'utf-8');
// Read code.js.
const codeJS = readFileSync('test/Twine1HTML/Twine1HTMLCompiler/jonah-1.4.2/code.js', 'utf-8');
// Read engine code.
const engine = readFileSync('test/Twine1HTML/Twine1HTMLCompiler/Twine1/engine.js', 'utf-8');
// Read Modernizr.
const Modernizr = readFileSync('test/Twine1HTML/Twine1HTMLCompiler/Twine1/modernizr.js');
// Read jQuery.
const jQuery = readFileSync('test/Twine1HTML/Twine1HTMLCompiler/Twine1/jquery.js');
// Compile file.
const result = compileTwine1HTML(s, engine, header, 'jonah', codeJS, { jquery: jQuery, modernizr: Modernizr });
// Test for code.js.
expect(result.includes('Tale.prototype.canBookmark')).toBe(true);
// Test for passage.
expect(result.includes('tiddler="Start"')).toBe(true);
// Test for story size.
expect(result.includes('data-size="1"')).toBe(true);
// Test for jQuery.
expect(result.includes('jQuery v1.11.0')).toBe(true);
// Test for Modernizr.
expect(result.includes('Modernizr 2.6.2')).toBe(true);
});
it('Should include story format based on name without jQuery and Modernizr', function () {
// Create story.
const s = new Story();
// Add passage.
s.addPassage(new Passage('Start', 'Work'));
// Set story start.
s.start = 'Start';
// Read header.html.
const header = readFileSync('test/Twine1HTML/Twine1HTMLCompiler/jonah-1.4.2/header.html', 'utf-8');
// Read code.js.
const codeJS = readFileSync('test/Twine1HTML/Twine1HTMLCompiler/jonah-1.4.2/code.js', 'utf-8');
// Read engine code.
const engine = readFileSync('test/Twine1HTML/Twine1HTMLCompiler/Twine1/engine.js', 'utf-8');
// Compile file.
const result = compileTwine1HTML(s, engine, header, 'jonah', codeJS, {});
// Test for code.js.
expect(result.includes('Tale.prototype.canBookmark')).toBe(true);
// Test for passage.
expect(result.includes('tiddler="Start"')).toBe(true);
// Test for story size.
expect(result.includes('data-size="1"')).toBe(true);
// Test for jQuery
expect(result.includes('jQuery v1.11.0')).not.toBe(true);
// Test for Modernizr
expect(result.includes('Modernizr 2.6.2')).not.toBe(true);
});
});
});