Kaynağa Gözat

Added early version of expect( fn ).to.throwCKEditorError().

Maksymilian Barnaś 9 yıl önce
ebeveyn
işleme
e4da05a25c
1 değiştirilmiş dosya ile 110 ekleme ve 0 silme
  1. 110 0
      dev/bender/plugins/ckeditor5/static/extensions.js

+ 110 - 0
dev/bender/plugins/ckeditor5/static/extensions.js

@@ -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