Merge "VisualDiff automated screenshots"

This commit is contained in:
jenkins-bot 2017-03-29 16:14:43 +00:00 committed by Gerrit Code Review
commit 256241c23d
3 changed files with 154 additions and 22 deletions

View file

@ -8,7 +8,27 @@ require( 'babel-polyfill' );
/* eslint-env node, es6 */
module.exports = function ( grunt ) {
var modules = grunt.file.readJSON( 'lib/ve/build/modules.json' );
var modules = grunt.file.readJSON( 'lib/ve/build/modules.json' ),
screenshotOptions = {
reporter: 'spec',
timeout: 40000,
require: [
function () {
// eslint-disable-next-line no-undef
langs = [ 'en' ];
}
]
},
screenshotOptionsAll = {
reporter: 'spec',
timeout: 40000,
require: [
function () {
// eslint-disable-next-line no-undef
langs = require( './build/tasks/screenshotLangs.json' ).langs;
}
]
};
grunt.loadNpmTasks( 'grunt-banana-checker' );
grunt.loadNpmTasks( 'grunt-contrib-copy' );
@ -57,30 +77,20 @@ module.exports = function ( grunt ) {
},
mochaTest: {
'screenshots-en': {
options: {
reporter: 'spec',
timeout: 40000,
require: [
function () {
// eslint-disable-next-line no-undef
langs = [ 'en' ];
}
]
},
options: screenshotOptions,
src: [ 'build/screenshots.userGuide.js' ]
},
'screenshots-all': {
options: {
reporter: 'spec',
timeout: 40000,
require: [
function () {
// eslint-disable-next-line no-undef
langs = require( './build/tasks/screenshotLangs.json' ).langs;
}
]
},
options: screenshotOptionsAll,
src: [ 'build/screenshots.userGuide.js' ]
},
'diff-screenshots-en': {
options: screenshotOptions,
src: [ 'build/screenshots.diffs.js' ]
},
'diff-screenshots-all': {
options: screenshotOptionsAll,
src: [ 'build/screenshots.diffs.js' ]
}
},
image: {

119
build/screenshots.diffs.js Normal file
View file

@ -0,0 +1,119 @@
/* eslint-env node, es6 */
/* global seleniumUtils, langs */
( function () {
'use strict';
var createScreenshotEnvironment = require( './screenshots.js' ).createScreenshotEnvironment,
test = require( 'selenium-webdriver/testing' );
function runTests( lang ) {
var runScreenshotTest = createScreenshotEnvironment( test, lang, function () {
var done = arguments[ arguments.length - 1 ];
window.seleniumUtils.runDiffTest = function ( oldHtml, newHtml, done ) {
var target = ve.init.target,
surface = target.surface;
if ( target.saveDialog ) {
target.saveDialog.clearDiff();
target.saveDialog.close();
while ( surface.getModel().canUndo() ) {
surface.getModel().undo();
}
}
target.originalDmDoc = target.createModelFromDom( target.parseDocument( oldHtml ), 'visual' );
surface.getModel().getDocument().getStore().merge( target.originalDmDoc.getStore() );
surface.getModel().getLinearFragment( new ve.Range( 0 ) ).insertDocument(
target.createModelFromDom( target.parseDocument( newHtml ), 'visual' )
).collapseToEnd().adjustLinearSelection( 0, 3 ).removeContent();
target.once( 'saveReview', function () {
setTimeout( function () {
var dialog = surface.dialogs.currentWindow;
dialog.reviewModeButtonSelect.selectItemByData( 'visual' );
// Fake parsed edit summary
dialog.$reviewEditSummary.text( '(Lorem ipsum)' );
done(
seleniumUtils.getBoundingRect( [
dialog.$frame[ 0 ]
] )
);
}, 500 );
} );
surface.execute( 'mwSaveDialog', 'review' );
};
done();
} );
test.describe( 'Screenshots: ' + lang, function () {
test.it( 'Simple diff', function () {
runScreenshotTest( 'VisualEditor_diff_simple',
// This function is converted to a string and executed in the browser
function () {
var done = arguments[ arguments.length - 1 ];
seleniumUtils.runDiffTest(
'<h2>Lorem ipsum</h2>' +
'<p>Lorem ipsum dolor sit <b>amet</b>, consectetur adipiscing elit.</p>',
'<h2>Lorem ipsum</h2>' +
'<p>Lorem ipsum dolor sit <i>amet</i>, consectetur adipiscing elit.</p>',
done
);
}
);
runScreenshotTest( 'VisualEditor_diff_move_and_change',
// This function is converted to a string and executed in the browser
function () {
var done = arguments[ arguments.length - 1 ];
seleniumUtils.runDiffTest(
'<h2>Lorem ipsum</h2>' +
'<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>' +
'<p>Maecenas fringilla turpis et nunc bibendum mattis.</p>',
'<h2>Lorem ipsum</h2>' +
'<p>Maecenas fringilla turpis et nunc bibendum mattis.</p>' +
'<p>Lorem ipsum dolor sit amat, consectetur adipiscing elit.</p>',
done
);
}
);
runScreenshotTest( 'VisualEditor_diff_link_change',
// This function is converted to a string and executed in the browser
function () {
var done = arguments[ arguments.length - 1 ];
seleniumUtils.runDiffTest(
'<h2>Lorem ipsum</h2>' +
'<p><a rel="mw:WikiLink" href="./Lipsum">Lorem ipsum</a> dolor sit amet, consectetur adipiscing elit.</p>',
'<h2>Lorem ipsum</h2>' +
'<p><a rel="mw:WikiLink" href="./Lorem ipsum">Lorem ipsum</a> dolor sit amet, consectetur adipiscing elit.</p>',
done
);
}
);
runScreenshotTest( 'VisualEditor_diff_list_change',
// This function is converted to a string and executed in the browser
function () {
var done = arguments[ arguments.length - 1 ];
seleniumUtils.runDiffTest(
'<ul><li>Lorem</li><li>ipsum</li><li>dolor</li><li>sit</li><li>amet</li></ul>',
'<ul><li>Lorem</li><li>ipsum</li><li>sit</li><li>amat</li></ul>',
done
);
}
);
} );
} );
}
for ( let i = 0, l = langs.length; i < l; i++ ) {
runTests( langs[ i ] );
}
}() );

View file

@ -10,7 +10,7 @@
username = process.env.SAUCE_ONDEMAND_USERNAME,
webdriver = require( 'selenium-webdriver' );
function createScreenshotEnvironment( test, lang ) {
function createScreenshotEnvironment( test, lang, beforeEach ) {
var clientSize, driver;
test.beforeEach( function () {
@ -133,6 +133,9 @@
clientSize = cs;
} )
);
if ( beforeEach ) {
driver.wait( driver.executeAsyncScript( beforeEach ) );
}
} );
test.afterEach( function () {