187 lines
5.1 KiB
JavaScript
187 lines
5.1 KiB
JavaScript
|
|
// --test-case ./vtest/vtest.js --test-case-context ./vtest/vtest_context.json
|
|
|
|
const THIS_SCRIPT = api.context.globalVal("script_path")
|
|
const CONTEXT_PATH = api.context.globalVal("context_path")
|
|
const SCORE_DIR = api.context.globalVal("score_dir")
|
|
const CURRENT_DATA_DIR = api.context.globalVal("current_data_dir")
|
|
const REFERENCE_DATA_DIR = api.context.globalVal("reference_data_dir")
|
|
const COMPARISON_DIR = api.context.globalVal("comparison_dir")
|
|
|
|
// options
|
|
const DEFAULT = "default"
|
|
const SMALL = "small"
|
|
const OPTIONS = [DEFAULT, SMALL]
|
|
|
|
// { fileName: { opt_name: true }}
|
|
var DIFF_NAME_LIST = {}
|
|
|
|
var testCase = {
|
|
name: "Compare draw data",
|
|
steps: [
|
|
{name: "Clear", func: function() {
|
|
api.filesystem.clear(CURRENT_DATA_DIR)
|
|
api.filesystem.clear(COMPARISON_DIR)
|
|
}},
|
|
{name: "Generate draw data (default)", func: function() {
|
|
generateDrawData(DEFAULT)
|
|
}},
|
|
{name: "Create pngs (default) (debug step)", skip: false, func: function() {
|
|
createDataPngs(DEFAULT)
|
|
}},
|
|
{name: "Compare draw data (default)", func: function() {
|
|
compareDrawData(DEFAULT)
|
|
}},
|
|
{name: "Generate draw data (small)", func: function() {
|
|
generateDrawData(SMALL)
|
|
}},
|
|
{name: "Create pngs (small) (debug step)", skip: false, func: function() {
|
|
createDataPngs(SMALL)
|
|
}},
|
|
{name: "Compare draw data (small)", func: function() {
|
|
compareDrawData(SMALL)
|
|
}},
|
|
{name: "Create report", func: function() {
|
|
createReport()
|
|
}},
|
|
{name: "Finish", func: function() {
|
|
if (isHasDiff()) {
|
|
return {code: 3101}
|
|
}
|
|
return {code: 0}
|
|
}},
|
|
]
|
|
};
|
|
|
|
function main()
|
|
{
|
|
api.log.info("Hello from VTest.js")
|
|
|
|
api.autobot.setInterval(100)
|
|
api.autobot.runTestCase(testCase)
|
|
}
|
|
|
|
function fatalIfFailed(r)
|
|
{
|
|
if (!r.success) {
|
|
api.autobot.fatal(r.text)
|
|
}
|
|
}
|
|
|
|
function generateRefDrawData()
|
|
{
|
|
for (let i = 0; i < OPTIONS.length; ++i) {
|
|
let optName = OPTIONS[i]
|
|
let opt = api.context.globalVal("opt_"+optName)
|
|
api.diagnostics.generateDrawData(SCORE_DIR, REFERENCE_DATA_DIR+"/"+optName, opt)
|
|
}
|
|
}
|
|
|
|
function generateDrawData(optName)
|
|
{
|
|
let opt = api.context.globalVal("opt_"+optName)
|
|
api.diagnostics.generateDrawData(SCORE_DIR, CURRENT_DATA_DIR+"/"+optName, opt)
|
|
}
|
|
|
|
function compareDrawData(optName)
|
|
{
|
|
const COMP_DIR = COMPARISON_DIR + "/" + optName
|
|
const CURR_DIR = CURRENT_DATA_DIR + "/" + optName
|
|
const REF_DIR = REFERENCE_DATA_DIR + "/" + optName
|
|
|
|
let opt = {
|
|
isCopySrc: true,
|
|
isMakePng: true
|
|
}
|
|
|
|
let files = api.filesystem.scanFiles(CURR_DIR, [], "FilesInCurrentDir").value
|
|
for (let i = 0; i < files.length; ++i) {
|
|
let fileName = api.filesystem.baseName(files[i])
|
|
let refFile = REF_DIR + "/" + fileName + ".json"
|
|
let currFile = CURR_DIR + "/" + fileName + ".json"
|
|
let diffFile = COMP_DIR + "/" + fileName + ".diff.json"
|
|
|
|
let ret = api.diagnostics.compareDrawData(refFile, currFile, diffFile, opt)
|
|
if (!ret.success) {
|
|
api.log.info("DIFF DETECTED: " + fileName)
|
|
let fileInfo = DIFF_NAME_LIST[fileName]
|
|
if (fileInfo === undefined) {
|
|
fileInfo = {}
|
|
}
|
|
fileInfo[optName] = true
|
|
DIFF_NAME_LIST[fileName] = fileInfo
|
|
}
|
|
}
|
|
}
|
|
|
|
function createDataPngs(optName)
|
|
{
|
|
let files = api.filesystem.scanFiles(CURRENT_DATA_DIR+"/"+optName, [], "FilesInCurrentDir").value
|
|
for (let i = 0; i < files.length; ++i) {
|
|
let file = files[i]
|
|
api.diagnostics.drawDataToPng(file, file + ".png");
|
|
}
|
|
}
|
|
|
|
function isHasDiff()
|
|
{
|
|
return Object.keys(DIFF_NAME_LIST).length !== 0
|
|
}
|
|
|
|
function createReport()
|
|
{
|
|
if (!isHasDiff()) {
|
|
return
|
|
}
|
|
|
|
if (!String.prototype.format) {
|
|
String.prototype.format = function() {
|
|
var args = arguments;
|
|
return this.replace(/{(\d+)}/g, function(match, number) {
|
|
return typeof args[number] != 'undefined'
|
|
? args[number]
|
|
: match
|
|
;
|
|
});
|
|
};
|
|
}
|
|
|
|
let html = '\
|
|
<html>
|
|
<head>
|
|
</head>
|
|
<body style="background-color:#eee;">
|
|
';
|
|
let makeBlock = function(opt, fn) {
|
|
let block = '\
|
|
<h2 id=\"{0}_{1}\">{0}: {1}<a href=\"#{0}_{1}\">#</a></h2>
|
|
<div>
|
|
<div>ref:</div><br/>
|
|
<img src=\"{0}/{1}.ref.png\"><br/>
|
|
<div>current:</div><br/>
|
|
<img src=\"{0}/{1}.png\"><br/>
|
|
<div>diff:</div>
|
|
<img src=\"{0}/{1}.diff.png\"><br/>
|
|
</div>
|
|
'.format(opt, fn)
|
|
|
|
return block
|
|
}
|
|
|
|
for (let fileName in DIFF_NAME_LIST) {
|
|
let fileInfo = DIFF_NAME_LIST[fileName]
|
|
for (let opt in fileInfo) {
|
|
if (fileInfo[opt]) {
|
|
html += "\n"
|
|
html += makeBlock(opt, fileName)
|
|
}
|
|
}
|
|
}
|
|
|
|
html += '\
|
|
</body>
|
|
</html>
|
|
';
|
|
|
|
api.filesystem.writeTextFile(COMPARISON_DIR+"/vtest_compare.html", html)
|
|
}
|