Skip to content

Commit

Permalink
Make it possible to reuse fixture test helpers
Browse files Browse the repository at this point in the history
Fixes #250
  • Loading branch information
jbalsas authored and ipeychev committed Jun 22, 2015
1 parent 4df76c9 commit 9f8aa5a
Show file tree
Hide file tree
Showing 7 changed files with 68 additions and 133 deletions.
1 change: 1 addition & 0 deletions src/ui/react/karma.js
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ var filesToLoad = [
/* bender requires CKEDITOR, should be after ckeditor.js */
'test/util/bender.js',

'test/util/utils.js',
'src/ui/react/test/util/utils.js',

/* ReactJS */
Expand Down
4 changes: 2 additions & 2 deletions src/ui/react/test/button-table-cell.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
var TestUtils = React.addons.TestUtils;
var Simulate = TestUtils.Simulate;

var FIXTURE_FILE = 'button-table-cell.html';
var getFixtures = Utils.getFixtures('src/ui/react/test/fixtures', 'button-table-cell.html');

describe('ButtonTableCell', function() {
this.timeout(35000);
Expand Down Expand Up @@ -74,7 +74,7 @@
var testCommandButton = function(command, fixtureName) {
var buttonTableCell = React.render(<AlloyEditor.ButtonTableCell editor={this.editor} expanded={true} />, this.container);

var fixtures = Utils.getFixtures.call(this, FIXTURE_FILE, fixtureName);
var fixtures = getFixtures(fixtureName);

bender.tools.selection.setWithHtml(this.nativeEditor, fixtures.initial);

Expand Down
4 changes: 2 additions & 2 deletions src/ui/react/test/button-table-column.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
var TestUtils = React.addons.TestUtils;
var Simulate = TestUtils.Simulate;

var FIXTURE_FILE = 'button-table-column.html';
var getFixtures = Utils.getFixtures('src/ui/react/test/fixtures', 'button-table-column.html');

describe('ButtonTableColumn', function() {
this.timeout(35000);
Expand Down Expand Up @@ -54,7 +54,7 @@
var testCommandButton = function(command, fixtureName) {
var buttonTableCell = React.render(<AlloyEditor.ButtonTableColumn editor={this.editor} expanded={true} />, this.container);

var fixtures = Utils.getFixtures.call(this, FIXTURE_FILE, fixtureName);
var fixtures = getFixtures(fixtureName);

bender.tools.selection.setWithHtml(this.nativeEditor, fixtures.initial);

Expand Down
10 changes: 5 additions & 5 deletions src/ui/react/test/button-table-edit.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
var KEY_ENTER = 13;
var KEY_ESC = 27;

var FIXTURE_FILE = 'button-table-edit.html';
var getFixtures = Utils.getFixtures('src/ui/react/test/fixtures', 'button-table-edit.html');

describe('ButtonTableEdit', function() {
this.timeout(35000);
Expand All @@ -33,7 +33,7 @@
compatHtml: true
});

var expected = Utils.getFixtures.call(this, FIXTURE_FILE, 'create_3_3_table').expected;
var expected = getFixtures('create_3_3_table').expected;

assert.strictEqual(data, expected);
});
Expand All @@ -53,7 +53,7 @@
compatHtml: true
});

var expected = Utils.getFixtures.call(this, FIXTURE_FILE, 'create_6_4_table').expected;
var expected = getFixtures('create_6_4_table').expected;

assert.strictEqual(data, expected);
});
Expand All @@ -71,7 +71,7 @@
compatHtml: true
});

var expected = Utils.getFixtures.call(this, FIXTURE_FILE, 'create_6_4_table').expected;
var expected = getFixtures('create_6_4_table').expected;

assert.strictEqual(data, expected);
});
Expand All @@ -89,7 +89,7 @@
compatHtml: true
});

var expected = Utils.getFixtures.call(this, FIXTURE_FILE, 'create_6_4_table').expected;
var expected = getFixtures('create_6_4_table').expected;

assert.strictEqual(data, expected);
});
Expand Down
4 changes: 2 additions & 2 deletions src/ui/react/test/button-table-row.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
var TestUtils = React.addons.TestUtils;
var Simulate = TestUtils.Simulate;

var FIXTURE_FILE = 'button-table-row.html';
var getFixtures = Utils.getFixtures('src/ui/react/test/fixtures', 'button-table-row.html');

describe('ButtonTableRow', function() {
this.timeout(35000);
Expand Down Expand Up @@ -54,7 +54,7 @@
var testCommandButton = function(command, fixtureName) {
var buttonTableCell = React.render(<AlloyEditor.ButtonTableRow editor={this.editor} expanded={true} />, this.container);

var fixtures = Utils.getFixtures.call(this, FIXTURE_FILE, fixtureName);
var fixtures = getFixtures(fixtureName);

bender.tools.selection.setWithHtml(this.nativeEditor, fixtures.initial);

Expand Down
149 changes: 27 additions & 122 deletions src/ui/react/test/util/utils.js
Original file line number Diff line number Diff line change
@@ -1,141 +1,46 @@
(function() {
'use strict';

var Utils = {
afterEach: function(done) {
Utils.removeContainer.call(this);
if (!window.Utils) window.Utils = {};

fixture.cleanup();
window.Utils.createAlloyEditor = function(done, config) {
var editable = document.createElement('div');

if (done) {
done();
}
},
editable.setAttribute('id', 'editable');
editable.setAttribute('contenteditable', true);

beforeEach: function(done) {
Utils.createContainer.call(this);
document.getElementsByTagName('body')[0].appendChild(editable);

// CKEDITOR in Firefox needs to have cursor and at least an empty string
// before doing anything ;)
bender.tools.selection.setWithHtml(this.nativeEditor, ' {}');
this._editable = editable;

if (done) {
done();
}
},
assert.ok(bender);
assert.ok(CKEDITOR);
assert.ok(AlloyEditor);

createAlloyEditor: function(done, config) {
var editable = document.createElement('div');
config = CKEDITOR.tools.merge({
toolbars: {}
}, config);

editable.setAttribute('id', 'editable');
editable.setAttribute('contenteditable', true);
this.editor = AlloyEditor.editable('editable', config);

document.getElementsByTagName('body')[0].appendChild(editable);
this.nativeEditor = this.editor.get('nativeEditor');

this._editable = editable;
this.nativeEditor.on('instanceReady', function() {
this.nativeEditor.focus();

assert.ok(bender);
assert.ok(CKEDITOR);
assert.ok(AlloyEditor);

config = CKEDITOR.tools.merge({
toolbars: {}
}, config);

this.editor = AlloyEditor.editable('editable', config);

this.nativeEditor = this.editor.get('nativeEditor');

this.nativeEditor.on('instanceReady', function() {
this.nativeEditor.focus();

done();
}.bind(this));
},

createCKEditor: function(done, config) {
var editable = document.createElement('div');

editable.setAttribute('id', 'editable');
editable.setAttribute('contenteditable', true);

document.getElementsByTagName('body')[0].appendChild(editable);

this._editable = editable;

assert.ok(bender);
assert.ok(CKEDITOR);

this.nativeEditor = CKEDITOR.inline('editable', config);

this.nativeEditor.on('instanceReady', function() {
this.nativeEditor.focus();

done();
}.bind(this));
},

createContainer: function() {
this.container = document.createElement('div');

document.body.appendChild(this.container);
},

destroyAlloyEditor: function(done) {
if (this.editor) {
this.editor.destroy();
}

this._editable.parentNode.removeChild(this._editable);

if (done) {
done();
}
},

destroyCKEditor: function(done) {
if (this.nativeEditor) {
this.nativeEditor.destroy();
}

this._editable.parentNode.removeChild(this._editable);

if (done) {
done();
}
},

getFixtures: function(fixtureFile, fixtureName) {
var fixtureData = {};

fixture.setBase('src/ui/react/test/fixtures');

fixture.load(fixtureFile);

var htmlFixture = fixture.el.querySelector('#' + fixtureName);

fixtureData.initial = Utils._prepareFixtureForAssertion(htmlFixture.querySelector('[data-fixture="initial"]'));
fixtureData.expected = Utils._prepareFixtureForAssertion(htmlFixture.querySelector('[data-fixture="expected"]'));

return fixtureData;
},

removeContainer: function() {
this.container.parentNode.removeChild(this.container);
},
done();
}.bind(this));
};

_prepareFixtureForAssertion: function(htmlFixture) {
var fixtureString;
window.Utils.destroyAlloyEditor = function(done) {
if (this.editor) {
this.editor.destroy();
}

if (htmlFixture) {
fixtureString = bender.tools.fixHtml(
bender.tools.compatHtml(htmlFixture.innerHTML.replace(/\u00a0/g, '&nbsp;'))
);
}
this._editable.parentNode.removeChild(this._editable);

return fixtureString;
if (done) {
done();
}
};

window.Utils = Utils;
}());
29 changes: 29 additions & 0 deletions test/util/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,37 @@
}
},

getFixtures: function(fixtureBase, fixtureFile) {
return function(fixtureName) {
var fixtureData = {};

fixture.setBase(fixtureBase);

fixture.load(fixtureFile);

var htmlFixture = fixture.el.querySelector('#' + fixtureName);

fixtureData.initial = Utils._prepareFixtureForAssertion(htmlFixture.querySelector('[data-fixture="initial"]'));
fixtureData.expected = Utils._prepareFixtureForAssertion(htmlFixture.querySelector('[data-fixture="expected"]'));

return fixtureData;
};
},

removeContainer: function() {
this.container.parentNode.removeChild(this.container);
},

_prepareFixtureForAssertion: function(htmlFixture) {
var fixtureString;

if (htmlFixture) {
fixtureString = bender.tools.fixHtml(
bender.tools.compatHtml(htmlFixture.innerHTML.replace(/\u00a0/g, '&nbsp;'))
);
}

return fixtureString;
}
};

Expand Down

0 comments on commit 9f8aa5a

Please sign in to comment.