%PDF- %PDF-
Direktori : /www/varak.net/wiki.varak.net/extensions/VisualEditor/lib/ve/tests/dm/ |
Current File : /www/varak.net/wiki.varak.net/extensions/VisualEditor/lib/ve/tests/dm/ve.dm.Scalable.test.js |
/*! * VisualEditor DataModel Scalable tests. * * @copyright 2011-2016 VisualEditor Team and others; see http://ve.mit-license.org */ QUnit.module( 've.dm.Scalable' ); QUnit.test( 'construction/clone/getters/setters/toggleDefault/clearers', 28, function ( assert ) { var eventEmitted = false, currentDimensions = { width: 300, height: 200 }, originalDimensions = { width: 600, height: 400 }, defaultDimensions = { width: 150, height: 50 }, minDimensions = { width: 1, height: 1 }, maxDimensions = { width: 1200, height: 800 }, scalable = new ve.dm.Scalable( { currentDimensions: currentDimensions, originalDimensions: originalDimensions, defaultDimensions: defaultDimensions, minDimensions: minDimensions, maxDimensions: maxDimensions } ), clone = scalable.clone(); assert.deepEqual( scalable, clone, 'Clone is deepEqual' ); assert.deepEqual( scalable.getCurrentDimensions(), currentDimensions, 'getCurrentDimensions' ); assert.deepEqual( scalable.getOriginalDimensions(), originalDimensions, 'getOriginalDimensions' ); assert.deepEqual( scalable.getDefaultDimensions(), defaultDimensions, 'getDefaultDimensions' ); assert.deepEqual( scalable.getMinDimensions(), minDimensions, 'getMinDimensions' ); assert.deepEqual( scalable.getMaxDimensions(), maxDimensions, 'getMaxDimensions' ); assert.strictEqual( scalable.getRatio(), 1.5, 'getRatio' ); scalable.toggleDefault(); assert.deepEqual( scalable.getCurrentDimensions(), scalable.getDefaultDimensions(), 'toggleDefault makes an image use default dimensions' ); scalable.toggleDefault(); assert.deepEqual( scalable.getCurrentDimensions(), scalable.getDefaultDimensions(), 'toggleDefault on an already-default image has no effect' ); scalable.toggleDefault( false ); assert.deepEqual( scalable.getCurrentDimensions(), scalable.getDefaultDimensions(), 'toggleDefault( false ) on an already-default image has no effect' ); scalable.clearDefaultDimensions(); assert.strictEqual( scalable.getDefaultDimensions(), null, 'clearDefaultDimensions' ); scalable.on( 'defaultSizeChange', function () { eventEmitted = true; } ); eventEmitted = false; scalable.clearDefaultDimensions(); scalable.off( 'defaultSizeChange' ); assert.strictEqual( eventEmitted, false, 'clearDefaultDimensions doesn\'t re-run' ); scalable.clearOriginalDimensions(); assert.strictEqual( scalable.getOriginalDimensions(), null, 'clearOriginalDimensions' ); scalable.on( 'originalSizeChange', function () { eventEmitted = true; } ); eventEmitted = false; scalable.clearOriginalDimensions(); scalable.off( 'originalSizeChange' ); assert.strictEqual( eventEmitted, false, 'clearOriginalDimensions doesn\'t re-run' ); scalable.clearMinDimensions(); assert.strictEqual( scalable.getMinDimensions(), null, 'clearMinDimensions' ); scalable.on( 'minSizeChange', function () { eventEmitted = true; } ); eventEmitted = false; scalable.clearMinDimensions(); scalable.off( 'minSizeChange' ); assert.strictEqual( eventEmitted, false, 'clearMinDimensions doesn\'t re-run' ); scalable.clearMaxDimensions(); assert.strictEqual( scalable.getMaxDimensions(), null, 'clearMaxDimensions' ); scalable.on( 'maxSizeChange', function () { eventEmitted = true; } ); eventEmitted = false; scalable.clearMaxDimensions(); scalable.off( 'maxSizeChange' ); assert.strictEqual( eventEmitted, false, 'clearMaxDimensions doesn\'t re-run' ); assert.deepEqual( scalable.getBoundedDimensions( { width: 448, height: 317 }, 10 ), { width: 450, height: 300 }, 'getBoundedDimensions without bounds snapped to 10px grid' ); scalable.fixedRatio = false; assert.deepEqual( scalable.getBoundedDimensions( { width: 448, height: 317 }, 10 ), { width: 450, height: 320 }, 'getBoundedDimensions without bounds or fixed ratio snapped to 10px grid' ); scalable.fixedRatio = true; scalable.setRatioFromDimensions( scalable.getCurrentDimensions() ); clone = scalable.clone(); clone.setOriginalDimensions(); clone.setDefaultDimensions(); clone.setMinDimensions(); clone.setMaxDimensions(); assert.strictEqual( clone.getOriginalDimensions(), scalable.getOriginalDimensions(), 'setOriginalDimensions without values is a no-op' ); assert.strictEqual( clone.getDefaultDimensions(), scalable.getDefaultDimensions(), 'setDefaultDimensions without values is a no-op' ); assert.strictEqual( clone.getMinDimensions(), scalable.getMinDimensions(), 'setMinDimensions without values is a no-op' ); assert.strictEqual( clone.getMaxDimensions(), scalable.getMaxDimensions(), 'setMaxDimensions without values is a no-op' ); clone = scalable.clone(); clone.setRatioFromDimensions(); assert.strictEqual( clone.getRatio(), scalable.getRatio(), 'setRatioFromDimensions without values is a no-op' ); scalable.setOriginalDimensions( { width: 300, height: 100 } ); assert.strictEqual( scalable.getRatio(), 3, 'setOriginalDimensions overwrites the ratio if set' ); scalable.fixedRatio = false; scalable.setOriginalDimensions( { width: 300, height: 200 } ); assert.strictEqual( scalable.getRatio(), 3, 'setOriginalDimensions doesn\'t overwrite the ratio if not set' ); scalable.fixedRatio = true; scalable.setOriginalDimensions( { width: 1, height: 1 } ); assert.strictEqual( scalable.getRatio(), 1, 'setOriginalDimensions overwrites the ratio if set again' ); } ); QUnit.test( 'getBoundedDimensions/getCurrentScale/isCurrentDimensionsValid/isTooSmall/isTooLarge', 16, function ( assert ) { var currentDimensions = { width: 300, height: 200 }, originalDimensions = { width: 600, height: 400 }, minDimensions = { width: 150, height: 100 }, maxDimensions = { width: 1200, height: 800 }, scalable = new ve.dm.Scalable( { currentDimensions: currentDimensions, originalDimensions: originalDimensions, minDimensions: minDimensions, maxDimensions: maxDimensions } ); assert.deepEqual( scalable.getBoundedDimensions( { width: 600, height: 600 } ), { width: 600, height: 400 }, 'getBoundedDimensions' ); assert.deepEqual( scalable.getBoundedDimensions( { width: 2000, height: 2000 } ), { width: 1200, height: 800 }, 'getBoundedDimensions beyond maxDimensions' ); assert.deepEqual( scalable.getBoundedDimensions( { width: 30, height: 30 } ), { width: 150, height: 100 }, 'getBoundedDimensions beyond minDimensions' ); assert.deepEqual( scalable.getBoundedDimensions( { width: 448, height: 317 }, 10 ), { width: 450, height: 300 }, 'getBoundedDimensions snapped to 10px grid' ); scalable.fixedRatio = false; assert.strictEqual( scalable.getCurrentScale(), null, 'Scale is null when not fixed ratio' ); assert.deepEqual( scalable.getBoundedDimensions( { width: 600, height: 600 } ), { width: 600, height: 600 }, 'getBoundedDimensions, no fixed ratio' ); assert.deepEqual( scalable.getBoundedDimensions( { width: 448, height: 317 }, 10 ), { width: 450, height: 320 }, 'getBoundedDimensions snapped to 10px grid, no fixed ratio' ); scalable.fixedRatio = true; assert.strictEqual( scalable.isCurrentDimensionsValid(), true, '300x200 are valid dimensions' ); assert.strictEqual( scalable.getCurrentScale(), 0.5, '300x200 is scale of 0.5' ); scalable.setCurrentDimensions( { width: 1200, height: 800 } ); assert.strictEqual( scalable.getCurrentScale(), 2, '1200x800 is scale of 2' ); scalable.setCurrentDimensions( { width: 1300, height: 810 } ); assert.strictEqual( scalable.isCurrentDimensionsValid(), false, 'Too large dimensions are not valid' ); assert.strictEqual( scalable.isTooSmall(), false, 'Too large dimensions are not too small' ); assert.strictEqual( scalable.isTooLarge(), true, 'Too large dimensions are too large' ); scalable.setCurrentDimensions( { width: 30, height: 20 } ); assert.strictEqual( scalable.isCurrentDimensionsValid(), false, 'Too small dimensions are not valid' ); assert.strictEqual( scalable.isTooSmall(), true, 'Too large dimensions are too small' ); assert.strictEqual( scalable.isTooLarge(), false, 'Too large dimensions are not too large' ); } ); QUnit.test( 'isDefault/toggleDefault', 4, function ( assert ) { var scalable = new ve.dm.Scalable( { isDefault: true } ), clone = scalable.clone(); assert.deepEqual( scalable, clone, 'Clone is deepEqual even when config is sparse' ); assert.strictEqual( scalable.isDefault(), true, 'isDefault' ); scalable.toggleDefault(); assert.strictEqual( scalable.isDefault(), false, 'toggleDefault changes true to false' ); scalable.toggleDefault(); assert.strictEqual( scalable.isDefault(), true, 'toggleDefault changes false to true' ); } ); QUnit.test( 'isDimensionsObjectValid', function ( assert ) { var i, cases = [ { dimensions: null, expected: false, msg: 'Null' }, { dimensions: { width: 200 }, expected: true, msg: 'Only width' }, { dimensions: { height: 200 }, expected: true, msg: 'Only height' }, { dimensions: {}, expected: false, msg: 'Empty object' }, { dimensions: { width: undefined, height: undefined }, expected: false, msg: 'Explicity undefined' } ]; QUnit.expect( cases.length ); for ( i = 0; i < cases.length; i++ ) { assert.strictEqual( ve.dm.Scalable.static.isDimensionsObjectValid( cases[ i ].dimensions ), cases[ i ].expected, cases[ i ].msg ); } } ); QUnit.test( 'getDimensionsFromValue', function ( assert ) { var i, cases = [ { dimensions: { width: 200 }, ratio: 1, expected: { width: 200, height: 200 }, msg: 'Only width' }, { dimensions: { height: 200 }, ratio: 2, expected: { width: 400, height: 200 }, msg: 'Only height' }, { dimensions: { width: '', height: 400 }, ratio: 0.5, expected: { width: 200, height: 400 }, msg: 'Empty width' }, { dimensions: { width: 200, height: '' }, ratio: 0.5, expected: { width: 200, height: 400 }, msg: 'Empty height' } ]; QUnit.expect( cases.length ); for ( i = 0; i < cases.length; i++ ) { assert.deepEqual( ve.dm.Scalable.static.getDimensionsFromValue( cases[ i ].dimensions, cases[ i ].ratio ), cases[ i ].expected, cases[ i ].msg ); } } );