|
|
@@ -21,6 +21,116 @@
|
|
|
return load( context, moduleId, url );
|
|
|
};
|
|
|
|
|
|
+ require( [ '/ckeditor5/utils/ckeditorerror.js', 'chai' ], function( CKEditorError, chai ) {
|
|
|
+ CKEditorError = CKEditorError.default;
|
|
|
+
|
|
|
+ chai.use( function( _chai, utils ) {
|
|
|
+ var Assertion = chai.Assertion;
|
|
|
+
|
|
|
+ Assertion.addMethod( 'throwCKEditorError', assertThrows );
|
|
|
+
|
|
|
+ function assertThrows( errMsg ) {
|
|
|
+ var obj = utils.flag( this, 'object' ),
|
|
|
+ actuallyGot = '' ,
|
|
|
+ expectedThrown,
|
|
|
+ thrown = false ,
|
|
|
+ name = null ,
|
|
|
+ thrownError = null,
|
|
|
+ message;
|
|
|
+
|
|
|
+ if ( arguments.length === 0 ) {
|
|
|
+ errMsg = null;
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ obj();
|
|
|
+ } catch ( err ) {
|
|
|
+ // next, check constructor
|
|
|
+ if (constructor) {
|
|
|
+ this.assert(
|
|
|
+ CKEditorError.isCKEditorError( err ),
|
|
|
+ 'expected #{this} to throw #{exp} but #{act} was thrown',
|
|
|
+ 'expected #{this} to not throw #{exp} but #{act} was thrown',
|
|
|
+ 'CKEditorError',
|
|
|
+ (err instanceof Error ? err.toString() : err)
|
|
|
+ );
|
|
|
+
|
|
|
+ if ( !errMsg ) {
|
|
|
+ utils.flag( this, 'object', err );
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // next, check message
|
|
|
+ message = utils.type( err ) === 'object' && 'message' in err ?
|
|
|
+ err.message
|
|
|
+ : '' + err;
|
|
|
+
|
|
|
+ if ( ( message != null ) && errMsg && errMsg instanceof RegExp ) {
|
|
|
+ this.assert(
|
|
|
+ errMsg.exec( message ),
|
|
|
+ 'expected #{this} to throw error matching #{exp} but got #{act}',
|
|
|
+ 'expected #{this} to throw error not matching #{exp}',
|
|
|
+ errMsg,
|
|
|
+ message
|
|
|
+ );
|
|
|
+
|
|
|
+ utils.flag( this, 'object', err );
|
|
|
+
|
|
|
+ return this;
|
|
|
+ } else if ( ( message != null ) && errMsg && typeof errMsg == 'string' ) {
|
|
|
+ this.assert(
|
|
|
+ ~message.indexOf( errMsg ),
|
|
|
+ 'expected #{this} to throw error including #{exp} but got #{act}',
|
|
|
+ 'expected #{this} to throw error not including #{act}',
|
|
|
+ errMsg,
|
|
|
+ message
|
|
|
+ );
|
|
|
+
|
|
|
+ utils.flag( this, 'object', err );
|
|
|
+
|
|
|
+ return this;
|
|
|
+ } else {
|
|
|
+ thrown = true;
|
|
|
+ thrownError = err;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ expectedThrown = 'an error';
|
|
|
+
|
|
|
+ if ( thrown ) {
|
|
|
+ actuallyGot = ' but #{act} was thrown'
|
|
|
+ }
|
|
|
+
|
|
|
+ this.assert(
|
|
|
+ thrown === true ,
|
|
|
+ 'expected #{this} to throw ' + expectedThrown + actuallyGot ,
|
|
|
+ 'expected #{this} to not throw ' + expectedThrown + actuallyGot ,
|
|
|
+ 'CKEditorError',
|
|
|
+ ( thrownError instanceof Error ? thrownError.toString() : thrownError )
|
|
|
+ );
|
|
|
+
|
|
|
+ utils.flag( this, 'object', thrownError );
|
|
|
+ };
|
|
|
+ } );
|
|
|
+
|
|
|
+ chai.expect( function() {
|
|
|
+ throw new CKEditorError();
|
|
|
+ } ).to.throwCKEditorError();
|
|
|
+
|
|
|
+ chai.expect( function() {
|
|
|
+ throw new Error();
|
|
|
+ } ).to.not.throwCKEditorError();
|
|
|
+
|
|
|
+ chai.expect( function() {
|
|
|
+ throw new CKEditorError( 'custom message' );
|
|
|
+ } ).to.throwCKEditorError( 'message' );
|
|
|
+
|
|
|
+ chai.expect( function() {
|
|
|
+ throw new CKEditorError( 'another msg' );
|
|
|
+ } ).to.throwCKEditorError( /msg/ );
|
|
|
+ } );
|
|
|
+
|
|
|
// Reported: https://github.com/benderjs/benderjs/issues/248
|
|
|
// Ugh... make some paths cleanup, because we need to combine these fragments and we don't want to
|
|
|
// duplicate '/'. BTW. if you want to touch this make sure you haven't broken Bender jobs which
|