Browse Source

Merge branch 'master' into t/ckeditor5/1005

Piotrek Koszuliński 7 năm trước cách đây
mục cha
commit
02aeca46f1

+ 1 - 1
packages/ckeditor5-utils/package.json

@@ -22,7 +22,7 @@
     "lodash-cli": "^4"
   },
   "engines": {
-    "node": ">=6.0.0",
+    "node": ">=6.9.0",
     "npm": ">=3.0.0"
   },
   "author": "CKSource (http://cksource.com/)",

+ 20 - 2
packages/ckeditor5-utils/src/env.js

@@ -18,12 +18,20 @@ const userAgent = navigator.userAgent.toLowerCase();
  */
 const env = {
 	/**
-	 * Indicates that application is running on Macintosh.
+	 * Indicates that the application is running on Macintosh.
 	 *
 	 * @static
 	 * @member {Boolean} module:utils/env~env#isMac
 	 */
-	isMac: isMac( userAgent )
+	isMac: isMac( userAgent ),
+
+	/**
+	 * Indicates that the application is running in Microsoft Edge.
+	 *
+	 * @static
+	 * @member {Boolean} module:utils/env~env#isEdge
+	 */
+	isEdge: isEdge( userAgent )
 };
 
 export default env;
@@ -37,3 +45,13 @@ export default env;
 export function isMac( userAgent ) {
 	return userAgent.indexOf( 'macintosh' ) > -1;
 }
+
+/**
+ * Checks if User Agent represented by the string is Microsoft Edge.
+ *
+ * @param {String} userAgent **Lowercase** `navigator.userAgent` string.
+ * @returns {Boolean} Whether User Agent is Edge or not.
+ */
+export function isEdge( userAgent ) {
+	return !!userAgent.match( /edge\/(\d+.?\d*)/ );
+}

+ 2 - 2
packages/ckeditor5-utils/tests/_utils-tests/utils.js

@@ -8,11 +8,11 @@ import utilsTestUtils from '../../tests/_utils/utils';
 import ObesrvableMixin from '../../src/observablemixin';
 import EmitterMixin from '../../src/emittermixin';
 
-testUtils.createSinonSandbox();
-
 describe( 'utilsTestUtils.createObserver()', () => {
 	let observable, observable2, observer;
 
+	testUtils.createSinonSandbox();
+
 	beforeEach( () => {
 		observer = utilsTestUtils.createObserver();
 

+ 2 - 2
packages/ckeditor5-utils/tests/collection.js

@@ -7,8 +7,6 @@ import testUtils from '@ckeditor/ckeditor5-core/tests/_utils/utils';
 import Collection from '../src/collection';
 import CKEditorError from '../src/ckeditorerror';
 
-testUtils.createSinonSandbox();
-
 function getItem( id, idProperty ) {
 	idProperty = idProperty || 'id';
 
@@ -20,6 +18,8 @@ function getItem( id, idProperty ) {
 describe( 'Collection', () => {
 	let collection;
 
+	testUtils.createSinonSandbox();
+
 	beforeEach( () => {
 		collection = new Collection();
 	} );

+ 2 - 2
packages/ckeditor5-utils/tests/dom/emittermixin.js

@@ -9,11 +9,11 @@ import testUtils from '@ckeditor/ckeditor5-core/tests/_utils/utils';
 import DomEmitterMixin from '../../src/dom/emittermixin';
 import EmitterMixin from '../../src/emittermixin';
 
-testUtils.createSinonSandbox();
-
 describe( 'DomEmitterMixin', () => {
 	let emitter, domEmitter, node;
 
+	testUtils.createSinonSandbox();
+
 	beforeEach( () => {
 		emitter = Object.create( EmitterMixin );
 		domEmitter = Object.create( DomEmitterMixin );

+ 2 - 2
packages/ckeditor5-utils/tests/dom/getborderwidths.js

@@ -6,9 +6,9 @@
 import getBorderWidths from '../../src/dom/getborderwidths';
 import testUtils from '@ckeditor/ckeditor5-core/tests/_utils/utils';
 
-testUtils.createSinonSandbox();
-
 describe( 'getBorderWidths()', () => {
+	testUtils.createSinonSandbox();
+
 	it( 'returns CSS border widths', () => {
 		const elementMock = {
 			ownerDocument: {

+ 2 - 2
packages/ckeditor5-utils/tests/dom/global.js

@@ -8,9 +8,9 @@
 import global from '../../src/dom/global';
 import testUtils from '@ckeditor/ckeditor5-core/tests/_utils/utils';
 
-testUtils.createSinonSandbox();
-
 describe( 'global', () => {
+	testUtils.createSinonSandbox();
+
 	describe( 'global', () => {
 		describe( 'window', () => {
 			it( 'equals native DOM window', () => {

+ 2 - 2
packages/ckeditor5-utils/tests/dom/position.js

@@ -9,8 +9,6 @@ import { getOptimalPosition } from '../../src/dom/position';
 import Rect from '../../src/dom/rect';
 import testUtils from '@ckeditor/ckeditor5-core/tests/_utils/utils';
 
-testUtils.createSinonSandbox();
-
 let element, target, limiter;
 
 //	+--------+-----+
@@ -54,6 +52,8 @@ const attachTop = ( targetRect, elementRect ) => ( {
 } );
 
 describe( 'getOptimalPosition()', () => {
+	testUtils.createSinonSandbox();
+
 	beforeEach( () => {
 		testUtils.sinon.stub( window, 'getComputedStyle' );
 

+ 2 - 2
packages/ckeditor5-utils/tests/dom/rect.js

@@ -9,11 +9,11 @@ import Rect from '../../src/dom/rect';
 import log from '../../src/log';
 import testUtils from '@ckeditor/ckeditor5-core/tests/_utils/utils';
 
-testUtils.createSinonSandbox();
-
 describe( 'Rect', () => {
 	let geometry;
 
+	testUtils.createSinonSandbox();
+
 	beforeEach( () => {
 		geometry = {
 			top: 10,

+ 4 - 2
packages/ckeditor5-utils/tests/dom/scroll.js

@@ -9,11 +9,11 @@ import testUtils from '@ckeditor/ckeditor5-core/tests/_utils/utils';
 import isRange from '../../src/dom/isrange';
 import { scrollViewportToShowTarget, scrollAncestorsToShowTarget } from '../../src/dom/scroll';
 
-testUtils.createSinonSandbox();
-
 describe( 'scrollAncestorsToShowTarget()', () => {
 	let target, element, firstAncestor, secondAncestor;
 
+	testUtils.createSinonSandbox();
+
 	beforeEach( () => {
 		element = document.createElement( 'p' );
 		firstAncestor = document.createElement( 'blockquote' );
@@ -145,6 +145,8 @@ describe( 'scrollViewportToShowTarget()', () => {
 	let target, firstAncestor, element;
 	const viewportOffset = 30;
 
+	testUtils.createSinonSandbox();
+
 	beforeEach( () => {
 		element = document.createElement( 'p' );
 		firstAncestor = document.createElement( 'blockquote' );

+ 45 - 1
packages/ckeditor5-utils/tests/env.js

@@ -3,7 +3,11 @@
  * For licensing, see LICENSE.md.
  */
 
-import env, { isMac } from '../src/env';
+import env, { isEdge, isMac } from '../src/env';
+
+function toLowerCase( str ) {
+	return str.toLowerCase();
+}
 
 describe( 'Env', () => {
 	beforeEach( () => {
@@ -19,10 +23,21 @@ describe( 'Env', () => {
 		} );
 	} );
 
+	describe( 'isEdge', () => {
+		it( 'is a boolean', () => {
+			expect( env.isEdge ).to.be.a( 'boolean' );
+		} );
+	} );
+
 	describe( 'isMac()', () => {
 		it( 'returns true for macintosh UA strings', () => {
 			expect( isMac( 'macintosh' ) ).to.be.true;
 			expect( isMac( 'foo macintosh bar' ) ).to.be.true;
+
+			expect( isMac( toLowerCase(
+				'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) ' +
+				'Chrome/61.0.3163.100 Safari/537.36'
+			) ) ).to.be.true;
 		} );
 
 		it( 'returns false for non–macintosh UA strings', () => {
@@ -31,4 +46,33 @@ describe( 'Env', () => {
 			expect( isMac( 'foo' ) ).to.be.false;
 		} );
 	} );
+
+	describe( 'isEdge()', () => {
+		it( 'returns true for Edge UA strings', () => {
+			expect( isEdge( 'edge/12' ) ).to.be.true;
+			expect( isEdge( 'foo edge/12 bar' ) ).to.be.true;
+
+			expect( isEdge( toLowerCase(
+				'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ' +
+				'Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393'
+			) ) ).to.be.true;
+		} );
+
+		it( 'returns false for non–Edge UA strings', () => {
+			expect( isEdge( '' ) ).to.be.false;
+			expect( isEdge( 'mac' ) ).to.be.false;
+			expect( isEdge( 'foo' ) ).to.be.false;
+			expect( isEdge( 'ledge' ) ).to.be.false;
+			expect( isEdge( 'foo edge bar' ) ).to.be.false;
+
+			// Chrome
+			expect( isEdge( toLowerCase(
+				'Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36'
+			) ) ).to.be.false;
+			// IE11
+			expect( isEdge( toLowerCase(
+				'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko'
+			) ) ).to.be.false;
+		} );
+	} );
 } );

+ 2 - 2
packages/ckeditor5-utils/tests/focustracker.js

@@ -9,11 +9,11 @@ import FocusTracker from '../src/focustracker';
 import CKEditorError from '../src/ckeditorerror';
 import testUtils from '@ckeditor/ckeditor5-core/tests/_utils/utils';
 
-testUtils.createSinonSandbox();
-
 describe( 'FocusTracker', () => {
 	let focusTracker, container, containerFirstInput, containerSecondInput;
 
+	testUtils.createSinonSandbox();
+
 	beforeEach( () => {
 		container = document.createElement( 'div' );
 		containerFirstInput = document.createElement( 'input' );

+ 4 - 2
packages/ckeditor5-utils/tests/observablemixin.js

@@ -13,9 +13,9 @@ import mix from '../src/mix';
 
 const assertBinding = utilsTestUtils.assertBinding;
 
-testUtils.createSinonSandbox();
-
 describe( 'ObservableMixin', () => {
+	testUtils.createSinonSandbox();
+
 	it( 'exists', () => {
 		expect( ObservableMixin ).to.be.an( 'object' );
 	} );
@@ -30,6 +30,8 @@ describe( 'ObservableMixin', () => {
 } );
 
 describe( 'Observable', () => {
+	testUtils.createSinonSandbox();
+
 	class Observable {
 		constructor( properties ) {
 			if ( properties ) {