/// /// import optimizer = require('../src/optimizer'); export function testSimplify1(test:nodeunit.Test):void{ var unoptimized:string = "true && (false && (true && false) && (true && false) && true)"; var optimized = optimizer.simplify(unoptimized); console.log(optimized); //it be nice if this expanded to just && but because of lazy evaluation is not actually equivalent in general test.notEqual(unoptimized, optimized); test.ok(optimized.length < unoptimized.length, "no improvement"); test.done(); } export function testSimplify2(test:nodeunit.Test):void{ var unoptimized:string = "5 / (7 * 6)"; var optimized = optimizer.simplify(unoptimized); test.equal(optimized, "5/(7*6)"); test.done(); } export function testSimplify3(test:nodeunit.Test):void{ var unoptimized:string = "(5 / 6) * 7"; var optimized = optimizer.simplify(unoptimized); test.equal(optimized, "5/6*7"); test.done(); } export function testSanitizeQuotes0(test:nodeunit.Test): void{ //single quote string are fine as is var unoptimized: string = "a == ''"; var optimized = optimizer.sanitizeQuotes(unoptimized); test.equal(optimized, "a == ''"); test.done(); } export function testSanitizeQuotes1(test:nodeunit.Test): void{ //double quote needs to be moved into a single quote string var unoptimized: string = "a == \"\""; var optimized = optimizer.sanitizeQuotes(unoptimized); test.equal(optimized, "a == ''"); test.done(); } export function testSanitizeQuotes2(test:nodeunit.Test): void{ //unescaped single quote needs to be escaped when moved into a single quote string var unoptimized: string = "a == \"'\""; var optimized = optimizer.sanitizeQuotes(unoptimized); test.equal(optimized, "a == '\\''"); test.done(); } export function testSanitizeQuotes3(test:nodeunit.Test): void{ //escaped double quote can stay as is var unoptimized: string = 'a == "\\""'; var optimized = optimizer.sanitizeQuotes(unoptimized); //test.equal(optimized, "a == '\\\"'"); <- what I expected by falafel must be processing test.equal(optimized, "a == '\"'"); //<-- still valid construction though test.done(); } export function testSanitizeQuotes4(test:nodeunit.Test): void{ //escaped double quote can stay as is var unoptimized: string = 'a == "" || b == \'\''; var optimized = optimizer.sanitizeQuotes(unoptimized); test.equal(optimized, "a == '' || b == ''"); test.done(); } export function testSanitizeQuotes5(test:nodeunit.Test): void{ //escaped double quote can stay as is var unoptimized: string = 'a == "\'\'"'; var optimized = optimizer.sanitizeQuotes(unoptimized); test.equal(optimized, "a == '\\'\\''"); test.done(); } export function testEscapeQuotes1(test:nodeunit.Test): void{ //single quotes must be escaped test.equal(optimizer.escapeSingleQuotes("'"), "\\'"); test.done(); } export function testEscapeQuotes2(test:nodeunit.Test): void{ //single quotes must be escaped test.equal(optimizer.escapeSingleQuotes("''"), "\\'\\'"); test.done(); } export function testEscapeEscapes1(test:nodeunit.Test): void{ //regex is escaped var unoptimized: string = '/\\d/'; var optimized = optimizer.escapeEscapes(unoptimized); test.equal(optimized, "/\\\\d/"); test.done(); } export function testPrune(test:nodeunit.Test): void{ test.equal(optimizer.pruneBooleanLiterals("!true"), "false"); test.equal(optimizer.pruneBooleanLiterals("!false"), "true"); test.equal(optimizer.pruneBooleanLiterals("true && true"), "true"); test.equal(optimizer.pruneBooleanLiterals("true && false"), "false"); test.equal(optimizer.pruneBooleanLiterals("false && true"), "false"); test.equal(optimizer.pruneBooleanLiterals("false && false"), "false"); test.equal(optimizer.pruneBooleanLiterals("true && f"), "(f)"); test.equal(optimizer.pruneBooleanLiterals("f && true"), "(f)"); test.equal(optimizer.pruneBooleanLiterals("false && f"), "false"); test.equal(optimizer.pruneBooleanLiterals("f && false"), "false"); test.equal(optimizer.pruneBooleanLiterals("true || f"), "true"); test.equal(optimizer.pruneBooleanLiterals("f || true"), "true"); test.equal(optimizer.pruneBooleanLiterals("false || f"), "(f)"); test.equal(optimizer.pruneBooleanLiterals("f || false"), "(f)"); test.done(); } export function testChildParentAnnihilation(test:nodeunit.Test): void{ test.equal(optimizer.childParentAnnihilation("data.child('x').parent().val()"), "data.val()"); test.done(); } export function testClauseRepetitionElimination(test:nodeunit.Test): void{ test.equal(optimizer.clauseRepetitionElimination("a && a"), "((a))"); //bit weird with parenthesis test.equal(optimizer.clauseRepetitionElimination("a || a"), "((a))"); test.equal(optimizer.clauseRepetitionElimination("a && b && a"), "(a&&b)"); test.equal(optimizer.clauseRepetitionElimination("a && b && b && a && c && a"), "(a&&b&&c)"); test.equal(optimizer.clauseRepetitionElimination("d && b && b && a && c && a"), "(d&&b&&a&&c)"); test.equal(optimizer.clauseRepetitionElimination("d || b || b || a || c || a"), "(d||b||a||c)"); test.done(); }