StackGenVis: Alignment of Data, Algorithms, and Models for Stacking Ensemble Learning Using Performance Metrics
https://doi.org/10.1109/TVCG.2020.3030352
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
89 lines
2.8 KiB
89 lines
2.8 KiB
'use strict';
|
|
/*jshint asi: true*/
|
|
|
|
var test = require('tap').test
|
|
, util = require('util')
|
|
, redeyed = require('..')
|
|
|
|
function inspect (obj) {
|
|
return util.inspect(obj, false, 5, true)
|
|
}
|
|
|
|
|
|
test('given i skip 2 more tokens after each semicolon', function (t) {
|
|
var calls = 0
|
|
, opts = {
|
|
Punctuator: {
|
|
';': function identity (s, info) {
|
|
// tell it to skip past second to last token that is 2 ahead of the current one
|
|
calls++
|
|
var skipToken = info.tokens[info.tokenIndex + 2]
|
|
return skipToken ? { replacement: s, skipPastToken: skipToken } : s;
|
|
}
|
|
}
|
|
}
|
|
;
|
|
|
|
[ { code: ';;;' , expectedCalls: 1 }
|
|
, { code: ';;;;' , expectedCalls: 2 }
|
|
, { code: '; ; ; ;' , expectedCalls: 2 }
|
|
, { code: ';;; ;;; ;;; ;' , expectedCalls: 4 }
|
|
, { code: ';;; ;;; ;;; ;;; ;' , expectedCalls: 5 }
|
|
, { code: ';;; ;;; ;;; ;;; ;;;' , expectedCalls: 5 }
|
|
, { code: ';;; ;;; ;;; ;;; ;;; ;' , expectedCalls: 6 }
|
|
].forEach(function (x) {
|
|
calls = 0
|
|
redeyed(x.code, opts);
|
|
t.equals(calls, x.expectedCalls, 'calls ' + x.expectedCalls + ' times for ' + x.code)
|
|
});
|
|
t.end()
|
|
})
|
|
|
|
test('replace log', function (t) {
|
|
var kinds = [ 'info', 'warn', 'error' ]
|
|
, opts = {
|
|
Identifier: {
|
|
console: function replaceLog(s, info) {
|
|
var code = info.code
|
|
, idx = info.tokenIndex
|
|
, tokens = info.tokens
|
|
, kind = tokens[idx + 2].value
|
|
, openParen = tokens[idx + 3].value
|
|
, firstArgTkn = tokens[idx + 4]
|
|
, argIdx = idx + 3
|
|
, open
|
|
, tkn
|
|
;
|
|
|
|
open = 1;
|
|
while (open) {
|
|
tkn = tokens[++argIdx];
|
|
|
|
if (tkn.value === '(') open++;
|
|
if (tkn.value === ')') open--;
|
|
}
|
|
|
|
var argsIncludingClosingParen = code.slice(firstArgTkn.range[0], tkn.range[1])
|
|
, result = 'log.' + kind + '("main-logger", ' + argsIncludingClosingParen;
|
|
|
|
return { replacement: result, skipPastToken: tkn };
|
|
}
|
|
}
|
|
}
|
|
|
|
, origCode = [
|
|
'console.info("info ", 1);'
|
|
, 'console.warn("warn ", 3);'
|
|
, 'console.error("error ", new Error("oh my!"));'
|
|
].join('\n')
|
|
|
|
, expectedCode = [
|
|
'log.info("main-logger", "info ", 1));'
|
|
, 'log.warn("main-logger", "warn ", 3));'
|
|
, 'log.error("main-logger", "error ", new Error("oh my!")));'
|
|
].join('\n')
|
|
, code = redeyed(origCode, opts).code
|
|
|
|
t.equals(code, expectedCode, 'transforms all log statements')
|
|
t.end()
|
|
});
|
|
|