blob: 2b0bb0c62c408c2a846059c1b2c311a3acaa87fa [file] [log] [blame]
var fs = require("fs"),
jade = require("jade"),
path = require("path");
module.exports = function (grunt) {
var TELEMETRY_DIR = 'dev/test/perf/telemetry/perf/page_sets/',
MASTER_JADE = 'topcoat_telemetry.jade';
grunt.registerTask('perf', 'Generates performance test', function (platform, theme) {
var perfJades = findAllPerfJadeFileInSrc();
var targetPlatform = platform || 'mobile',
targetTheme = theme || 'light';
var targetCSS = prepareCSS(targetPlatform, targetTheme);
var jadeCompileData = {};
grunt.util._.forEach(perfJades, function (jadePath) {
var jadeFileName = path.basename(jadePath).split('.')[0];
prepareJadeCompileData(jadeCompileData, jadePath,
jadeFileName, targetPlatform, targetTheme, targetCSS);
createTelemetryJSON(jadeFileName);
});
batchCompileJade(jadeCompileData);
});
var findAllPerfJadeFileInSrc = function () {
var jades = grunt.file.expand('node_modules/topcoat-*/test/perf/topcoat_*.jade')
.concat('node_modules/topcoat-checkbox/test/perf/checkbox-test.jade');
if (jades.length === 0){
throw new Error("ERROR: No jade file is found in src/../test/perf/");
}
return jades;
};
var prepareCSS = function(platform, theme) {
return "release/css/topcoat-" + platform + "-" + theme + ".min.css";
};
var prepareJadeCompileData = function (jadeCompileData, jadePath,
caseName, platform, theme, css) {
var jadeContent = fs.readFileSync(jadePath, "utf8"),
getHtml = jade.compile(jadeContent);
jadeCompileData[caseName] = {
options: {
data: {
platform: platform,
theme: theme,
css: css,
name: caseName,
componentHTML: getHtml()
}
},
src: TELEMETRY_DIR + "topcoat/" + MASTER_JADE,
dest: TELEMETRY_DIR + "topcoat/" + caseName + ".test.html"
};
};
var createTelemetryJSON = function (caseName) {
var jsonContent = {
"description": "Test",
"archive_data_file": "../data/topcoat_buttons.json",
"pages": [
{
"url": "file:///topcoat/" + caseName + ".test.html",
"smoothness": {
"action": "scrolling_action"
}
}
]
};
var jsonFilePATH = TELEMETRY_DIR + caseName + '.test.json';
fs.writeFileSync(
jsonFilePATH,
JSON.stringify(jsonContent, null, 4),
'utf8');
};
var batchCompileJade = function(data){
grunt.config('jade', data);
grunt.task.run('jade');
};
};