-
-
Notifications
You must be signed in to change notification settings - Fork 3.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
t/1: Introduce tests and Bender.js #11
Changes from 27 commits
118a4eb
ffe17c5
e7e9834
09fa91e
c9ad4d0
5aa7d5a
dd79ce5
2946304
47cde86
87f8200
19e29d0
6488116
0c63b0a
ebcbd4e
758b958
26f6c7c
41ec3ce
70373f7
1137ff7
a7f512d
907ef34
af63433
a8afa0a
338f468
c15dbcd
938c8d9
6bf8aa1
61c5f9c
0de6f6b
a60cb57
a530d20
0968169
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
/* jshint browser: false, node: true */ | ||
|
||
'use strict'; | ||
|
||
var config = { | ||
plugins: [ | ||
// Uncomment to enable code coverage. | ||
// 'benderjs-coverage', | ||
|
||
'benderjs-mocha', | ||
'benderjs-chai', | ||
'dev/bender/plugins/ckeditor5' | ||
], | ||
|
||
framework: 'mocha', | ||
|
||
applications: { | ||
ckeditor: { | ||
path: '.', | ||
files: [ | ||
'node_modules/requirejs/require.js', | ||
'ckeditor.js' | ||
] | ||
} | ||
}, | ||
|
||
tests: { | ||
all: { | ||
applications: [ 'ckeditor' ], | ||
paths: [ | ||
'tests/**', | ||
'node_modules/ckeditor5-*/tests/**' | ||
] | ||
} | ||
}, | ||
|
||
coverage: { | ||
paths: [ | ||
'ckeditor.js', | ||
'src/**/*.js', | ||
'node_modules/ckeditor5-*/src/**/*.js', | ||
'!node_modules/ckeditor5-*/src/lib/**' | ||
] | ||
} | ||
}; | ||
|
||
module.exports = config; |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
/** | ||
* @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. | ||
* For licensing, see LICENSE.md. | ||
*/ | ||
|
||
/* jshint node: true */ | ||
|
||
'use strict'; | ||
|
||
var path = require( 'path' ); | ||
var files = [ | ||
path.join( __dirname, '../static/extensions.js' ) | ||
]; | ||
|
||
module.exports = { | ||
name: 'bender-framework-ckeditor5', | ||
|
||
files: files, | ||
include: files | ||
}; |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
{ | ||
"name": "benderjs-ckeditor5", | ||
"description": "CKEditor 5 plugin for Bender.js", | ||
"main": "lib/index.js" | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
/** | ||
* @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. | ||
* For licensing, see LICENSE.md. | ||
*/ | ||
|
||
/* globals bender, CKEDITOR */ | ||
|
||
'use strict'; | ||
|
||
( function() { | ||
// Make Bender wait to start running tests. | ||
var done = bender.defer(); | ||
|
||
// Wait for the "ckeditor" module to be ready to start testing. | ||
CKEDITOR.require( [ 'ckeditor' ], done ); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Do we really need this one now? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It may be needed if |
||
|
||
/** | ||
* AMD tools related to CKEditor. | ||
*/ | ||
bender.amd = { | ||
/** | ||
* Gets and object which holds the CKEditor modules guaranteed to be loaded before tests start. | ||
* | ||
* @params {...String} module The name of the module to load. | ||
* @returns {Object} The object that will hold the loaded modules. | ||
*/ | ||
require: function() { | ||
var modules = {}; | ||
|
||
var done = bender.defer(); | ||
|
||
var names = [].slice.call( arguments ); | ||
|
||
CKEDITOR.require( names, function() { | ||
for ( var i = 0; i < names.length; i++ ) { | ||
modules[ names[ i ] ] = arguments[ i ] ; | ||
} | ||
|
||
// Finally give green light for tests to start. | ||
done(); | ||
} ); | ||
|
||
return modules; | ||
} | ||
}; | ||
} )(); |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
/** | ||
* @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. | ||
* For licensing, see LICENSE.md. | ||
*/ | ||
|
||
/* globals describe, it, expect, CKEDITOR */ | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We're gonna have describe, it and expect in every test, maybe we can "globalize" them in a single place, like There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. i tried this already but it doesn't work in the way we're using jshint right now (by pointing to a specific configuration file). If we would like to do it it looks like we would have to bloat (further) the root by adding . jshintrc there (and at this point .jscs) as well. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Heh... I've been already thinking about this too. I think that the easiest (thus, doable) solutions are:
In CKEditor 4 we use now the second approach and it's ok. For instance, you never use There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Gonna have an issue for this once this PR gets merged. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I reported #13. |
||
|
||
'use strict'; | ||
|
||
CKEDITOR.define( 'testModule', [ 'ckeditor' ], function( ckeditor ) { | ||
return { | ||
test: ( ckeditor && ( typeof ckeditor == 'object' ) ) | ||
}; | ||
} ); | ||
|
||
describe( 'CKEDITOR.require()', function() { | ||
it( 'should work with a defined module', function( done ) { | ||
CKEDITOR.require( [ 'testModule' ], function( testModule ) { | ||
expect( testModule ).to.have.property( 'test' ).to.be.true(); | ||
done(); | ||
} ); | ||
} ); | ||
|
||
it( 'should work with a core module', function( done ) { | ||
CKEDITOR.require( [ 'utils' ], function( utils ) { | ||
expect( utils ).to.be.an( 'object' ); | ||
done(); | ||
} ); | ||
} ); | ||
} ); |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
/** | ||
* @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. | ||
* For licensing, see LICENSE.md. | ||
*/ | ||
|
||
/* globals beforeEach, describe, it, expect, window, document */ | ||
|
||
'use strict'; | ||
|
||
var modules = bender.amd.require( 'ckeditor' ); | ||
|
||
beforeEach( function() { | ||
// Ensure that no CKEDITOR_BASEPATH global is available. | ||
delete window.CKEDITOR_BASEPATH; | ||
|
||
// Remove all script elements from the document. | ||
removeScripts(); | ||
} ); | ||
|
||
describe( 'basePath', function() { | ||
it( 'should work with script tags', function() { | ||
var CKEDITOR = modules.ckeditor; | ||
|
||
addScript( 'http://bar.com/ckeditor/ckeditor.js' ); | ||
expect( CKEDITOR._getBasePath() ).to.equal( 'http://bar.com/ckeditor/' ); | ||
} ); | ||
|
||
it( 'should work with the CKEDITOR_BASEPATH global', function() { | ||
var CKEDITOR = modules.ckeditor; | ||
|
||
window.CKEDITOR_BASEPATH = 'http://foo.com/ckeditor/'; | ||
expect( CKEDITOR._getBasePath() ).to.equal( 'http://foo.com/ckeditor/' ); | ||
} ); | ||
} ); | ||
|
||
describe( 'This browser', function() { | ||
it( 'should not keep script URLs absolute or relative', function() { | ||
// Browsers should convert absolute and relative URLs to full URLs. | ||
// If this test fails in any browser, _getBasePath() must be reviewed to deal with such case (v4 does it). | ||
|
||
test( '/absolute/url/ckeditor.js' ); | ||
test( '../relative/url/ckeditor.js' ); | ||
|
||
function test( url ) { | ||
removeScripts(); | ||
|
||
var script = addScript( url ); | ||
|
||
// Test if the src now contains '://'. | ||
expect( /:\/\//.test( script.src ) ).to.be.true(); | ||
} | ||
} ); | ||
} ); | ||
|
||
function addScript( url ) { | ||
var script = document.createElement( 'script' ); | ||
script.src = url; | ||
document.head.appendChild( script ); | ||
|
||
return script; | ||
} | ||
|
||
function removeScripts() { | ||
var scripts = [].slice.call( document.getElementsByTagName( 'script' ) ); | ||
var script; | ||
|
||
while ( ( script = scripts.shift() ) ) { | ||
script.parentNode.removeChild( script ); | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
/** | ||
* @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. | ||
* For licensing, see LICENSE.md. | ||
*/ | ||
|
||
/* globals describe, it, expect */ | ||
|
||
'use strict'; | ||
|
||
var modules = bender.amd.require( 'ckeditor', 'ckeditor-core' ); | ||
|
||
describe( 'getPluginPath()', function() { | ||
it( 'should return a proper path', function() { | ||
var CKEDITOR = modules.ckeditor; | ||
|
||
var basePath = CKEDITOR.basePath; | ||
var path = CKEDITOR.getPluginPath( 'test' ); | ||
|
||
if ( CKEDITOR.isDev ) { | ||
expect( path ).to.equal( basePath + 'node_modules/ckeditor-plugin-test/src/' ); | ||
} else { | ||
expect( path ).to.equal( basePath + 'plugins/test/' ); | ||
} | ||
} ); | ||
|
||
it( '(the production version) should work even when in dev', function() { | ||
var CKEDITOR = modules.ckeditor; | ||
var core = modules[ 'ckeditor-core' ]; | ||
|
||
// To be able to run this test on both dev and production code, we need to override getPluginPath with the | ||
// core version of it and restore it after testing. | ||
var originalGetPluginPath = CKEDITOR.getPluginPath; | ||
CKEDITOR.getPluginPath = core.getPluginPath; | ||
|
||
// This test is good for both the development and production codes. | ||
var basePath = CKEDITOR.basePath; | ||
var path = CKEDITOR.getPluginPath( 'test' ); | ||
|
||
// Revert the override before assertions or it will not do it in case of errors. | ||
CKEDITOR.getPluginPath = originalGetPluginPath; | ||
|
||
expect( path ).to.equal( basePath + 'plugins/test/' ); | ||
} ); | ||
} ); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
framework
is no longer neededThere was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fixed with 0de6f6b.