diff --git a/bsc-plugin/src/lib/rooibos/MockUtil.spec.ts b/bsc-plugin/src/lib/rooibos/MockUtil.spec.ts index f0c44f26..8bb250b4 100644 --- a/bsc-plugin/src/lib/rooibos/MockUtil.spec.ts +++ b/bsc-plugin/src/lib/rooibos/MockUtil.spec.ts @@ -4,6 +4,7 @@ import { expect } from 'chai'; import PluginInterface from 'brighterscript/dist/PluginInterface'; import * as fsExtra from 'fs-extra'; import { RooibosPlugin } from '../../plugin'; +import undent from 'undent'; let tmpPath = s`${process.cwd()}/tmp`; let _rootDir = s`${tmpPath}/rootDir`; @@ -19,9 +20,13 @@ describe('MockUtil', () => { let plugin: RooibosPlugin; let options; - function getContents(filename: string) { + function getContents(filename: string, trim = true) { // eslint-disable-next-line @typescript-eslint/no-unsafe-argument - return trimLeading(fsExtra.readFileSync(s`${_stagingFolderPath}/${filename}`).toString()); + let contents = fsExtra.readFileSync(s`${_stagingFolderPath}/${filename}`).toString(); + if (trim) { + return trimLeading(contents); + } + return contents; } describe('MockUtil', () => { @@ -69,34 +74,35 @@ describe('MockUtil', () => { // in `beforeEach`. This is because the compiler normally skips processing .brs files and copies them as-is. it('adds util code to a brs file', async () => { program.setFile('source/code.brs', ` - function sayHello(a1, a2) - print "hello" - end function - `); + function sayHello(a1, a2) + print "hello" + end function + `); program.validate(); expect(program.getDiagnostics()).to.be.empty; await builder.transpile(); - let a = getContents('source/code.brs'); - let b = trimLeading(`function sayHello(a1, a2) - __stubs_globalAa = getGlobalAa() - if RBS_SM_1_getMocksByFunctionName()["sayhello"] <> invalid - __stubOrMockResult = RBS_SM_1_getMocksByFunctionName()["sayhello"].callback(a1, a2) - return __stubOrMockResult - else if type(__stubs_globalAa?.__globalStubs?.sayhello).endsWith("Function") - __stubFunction = __stubs_globalAa.__globalStubs.sayhello - __stubOrMockResult = __stubFunction(a1, a2) - return __stubOrMockResult - end if - print "hello" - end function + let a = getContents('source/code.brs', false); + let b = undent(` + function sayHello(a1, a2) + __stubs_globalAa = getGlobalAa() + if RBS_SM_1_getMocksByFunctionName()["sayhello"] <> invalid + __stubOrMockResult = RBS_SM_1_getMocksByFunctionName()["sayhello"].callback(a1, a2) + return __stubOrMockResult + else if type(__stubs_globalAa?.__globalStubs?.sayhello).endsWith("Function") + __stubFunction = __stubs_globalAa.__globalStubs.sayhello + __stubOrMockResult = __stubFunction(a1, a2) + return __stubOrMockResult + end if + print "hello" + end function - function RBS_SM_1_getMocksByFunctionName() - if m._rMocksByFunctionName = invalid - m._rMocksByFunctionName = {} - end if - return m._rMocksByFunctionName - end function -`); + function RBS_SM_1_getMocksByFunctionName() + if m._rMocksByFunctionName = invalid + m._rMocksByFunctionName = {} + end if + return m._rMocksByFunctionName + end function + `); expect(a).to.equal(b); }); @@ -105,195 +111,200 @@ describe('MockUtil', () => { it('enables mocking on global functions', async () => { program.setFile('source/code.bs', ` - function sayHello(a1, a2) - print "hello" - end function - `); + function sayHello(a1, a2) + print "hello" + end function + `); program.validate(); expect(program.getDiagnostics()).to.be.empty; await builder.transpile(); - let a = getContents('source/code.brs'); - let b = trimLeading(`function sayHello(a1, a2) - __stubs_globalAa = getGlobalAa() - if RBS_SM_1_getMocksByFunctionName()["sayhello"] <> invalid - __stubOrMockResult = RBS_SM_1_getMocksByFunctionName()["sayhello"].callback(a1, a2) - return __stubOrMockResult - else if type(__stubs_globalAa?.__globalStubs?.sayhello).endsWith("Function") - __stubFunction = __stubs_globalAa.__globalStubs.sayhello - __stubOrMockResult = __stubFunction(a1, a2) - return __stubOrMockResult - end if - print "hello" - end function + let a = getContents('source/code.brs', false); + let b = undent(` + function sayHello(a1, a2) + __stubs_globalAa = getGlobalAa() + if RBS_SM_1_getMocksByFunctionName()["sayhello"] <> invalid + __stubOrMockResult = RBS_SM_1_getMocksByFunctionName()["sayhello"].callback(a1, a2) + return __stubOrMockResult + else if type(__stubs_globalAa?.__globalStubs?.sayhello).endsWith("Function") + __stubFunction = __stubs_globalAa.__globalStubs.sayhello + __stubOrMockResult = __stubFunction(a1, a2) + return __stubOrMockResult + end if + print "hello" + end function - function RBS_SM_1_getMocksByFunctionName() - if m._rMocksByFunctionName = invalid - m._rMocksByFunctionName = {} - end if - return m._rMocksByFunctionName - end function -`); + function RBS_SM_1_getMocksByFunctionName() + if m._rMocksByFunctionName = invalid + m._rMocksByFunctionName = {} + end if + return m._rMocksByFunctionName + end function + `); expect(a).to.equal(b); }); it('weird raletracker task issue I saw', async () => { program.setFile('source/code.bs', ` - Sub RedLines_SetRulerLines(rulerLines) - For Each line In rulerLines.Items() - RedLines_AddLine(line.key, line.value.position, line.value.coords, m.node, m.childMap) - End For - end Sub - Sub RedLines_AddLine(id, position, coords, node, childMap) as Object - line = CreateObject("roSGNode", "Rectangle") - line.setField("id", id) - end sub - `); + Sub RedLines_SetRulerLines(rulerLines) + For Each line In rulerLines.Items() + RedLines_AddLine(line.key, line.value.position, line.value.coords, m.node, m.childMap) + End For + end Sub + Sub RedLines_AddLine(id, position, coords, node, childMap) as Object + line = CreateObject("roSGNode", "Rectangle") + line.setField("id", id) + end sub + `); program.validate(); expect(program.getDiagnostics()).to.be.empty; await builder.transpile(); - let a = getContents('source/code.brs'); - let b = trimLeading(`Sub RedLines_SetRulerLines(rulerLines) - __stubs_globalAa = getGlobalAa() - if RBS_SM_1_getMocksByFunctionName()["redlines_setrulerlines"] <> invalid - __stubOrMockResult = RBS_SM_1_getMocksByFunctionName()["redlines_setrulerlines"].callback(rulerLines) - return - else if type(__stubs_globalAa?.__globalStubs?.redlines_setrulerlines).endsWith("Function") - __stubFunction = __stubs_globalAa.__globalStubs.redlines_setrulerlines - __stubOrMockResult = __stubFunction(rulerLines) - return - end if - For Each line In rulerLines.Items() - RedLines_AddLine(line.key, line.value.position, line.value.coords, m.node, m.childMap) - End For - end Sub - - Sub RedLines_AddLine(id, position, coords, node, childMap) as Object - __stubs_globalAa = getGlobalAa() - if RBS_SM_1_getMocksByFunctionName()["redlines_addline"] <> invalid - __stubOrMockResult = RBS_SM_1_getMocksByFunctionName()["redlines_addline"].callback(id, position, coords, node, childMap) - return __stubOrMockResult - else if type(__stubs_globalAa?.__globalStubs?.redlines_addline).endsWith("Function") - __stubFunction = __stubs_globalAa.__globalStubs.redlines_addline - __stubOrMockResult = __stubFunction(id, position, coords, node, childMap) - return __stubOrMockResult - end if - line = CreateObject("roSGNode", "Rectangle") - line.setField("id", id) - end sub + let a = getContents('source/code.brs', false); + let b = undent(` + Sub RedLines_SetRulerLines(rulerLines) + __stubs_globalAa = getGlobalAa() + if RBS_SM_1_getMocksByFunctionName()["redlines_setrulerlines"] <> invalid + __stubOrMockResult = RBS_SM_1_getMocksByFunctionName()["redlines_setrulerlines"].callback(rulerLines) + return + else if type(__stubs_globalAa?.__globalStubs?.redlines_setrulerlines).endsWith("Function") + __stubFunction = __stubs_globalAa.__globalStubs.redlines_setrulerlines + __stubOrMockResult = __stubFunction(rulerLines) + return + end if + For Each line In rulerLines.Items() + RedLines_AddLine(line.key, line.value.position, line.value.coords, m.node, m.childMap) + End For + end Sub + + Sub RedLines_AddLine(id, position, coords, node, childMap) as Object + __stubs_globalAa = getGlobalAa() + if RBS_SM_1_getMocksByFunctionName()["redlines_addline"] <> invalid + __stubOrMockResult = RBS_SM_1_getMocksByFunctionName()["redlines_addline"].callback(id, position, coords, node, childMap) + return __stubOrMockResult + else if type(__stubs_globalAa?.__globalStubs?.redlines_addline).endsWith("Function") + __stubFunction = __stubs_globalAa.__globalStubs.redlines_addline + __stubOrMockResult = __stubFunction(id, position, coords, node, childMap) + return __stubOrMockResult + end if + line = CreateObject("roSGNode", "Rectangle") + line.setField("id", id) + end sub - function RBS_SM_1_getMocksByFunctionName() - if m._rMocksByFunctionName = invalid - m._rMocksByFunctionName = {} - end if - return m._rMocksByFunctionName - end function -`); + function RBS_SM_1_getMocksByFunctionName() + if m._rMocksByFunctionName = invalid + m._rMocksByFunctionName = {} + end if + return m._rMocksByFunctionName + end function + `); expect(a).to.equal(b); }); it('enables mocking on global sub', async () => { program.setFile('source/code.bs', ` - sub sayHello(a1, a2) - print "hello" - end sub - `); + sub sayHello(a1, a2) + print "hello" + end sub + `); program.validate(); expect(program.getDiagnostics()).to.be.empty; await builder.transpile(); - let a = getContents('source/code.brs'); - let b = trimLeading(`sub sayHello(a1, a2) - __stubs_globalAa = getGlobalAa() - if RBS_SM_1_getMocksByFunctionName()["sayhello"] <> invalid - __stubOrMockResult = RBS_SM_1_getMocksByFunctionName()["sayhello"].callback(a1, a2) - return - else if type(__stubs_globalAa?.__globalStubs?.sayhello).endsWith("Function") - __stubFunction = __stubs_globalAa.__globalStubs.sayhello - __stubOrMockResult = __stubFunction(a1, a2) - return - end if - print "hello" - end sub + let a = getContents('source/code.brs', false); + let b = undent(` + sub sayHello(a1, a2) + __stubs_globalAa = getGlobalAa() + if RBS_SM_1_getMocksByFunctionName()["sayhello"] <> invalid + __stubOrMockResult = RBS_SM_1_getMocksByFunctionName()["sayhello"].callback(a1, a2) + return + else if type(__stubs_globalAa?.__globalStubs?.sayhello).endsWith("Function") + __stubFunction = __stubs_globalAa.__globalStubs.sayhello + __stubOrMockResult = __stubFunction(a1, a2) + return + end if + print "hello" + end sub - function RBS_SM_1_getMocksByFunctionName() - if m._rMocksByFunctionName = invalid - m._rMocksByFunctionName = {} - end if - return m._rMocksByFunctionName - end function -`); + function RBS_SM_1_getMocksByFunctionName() + if m._rMocksByFunctionName = invalid + m._rMocksByFunctionName = {} + end if + return m._rMocksByFunctionName + end function + `); expect(a).to.equal(b); }); it('enables mocking on namespaced function', async () => { program.setFile('source/code.bs', ` - namespace person.utils - function sayHello(a1, a2) - print "hello" - end function - end namespace - `); + namespace person.utils + function sayHello(a1, a2) + print "hello" + end function + end namespace + `); program.validate(); expect(program.getDiagnostics()).to.be.empty; await builder.transpile(); - let a = getContents('source/code.brs'); - let b = trimLeading(`function person_utils_sayHello(a1, a2) - __stubs_globalAa = getGlobalAa() - if RBS_SM_1_getMocksByFunctionName()["person_utils_sayhello"] <> invalid - __stubOrMockResult = RBS_SM_1_getMocksByFunctionName()["person_utils_sayhello"].callback(a1, a2) - return __stubOrMockResult - else if type(__stubs_globalAa?.__globalStubs?.person_utils_sayhello).endsWith("Function") - __stubFunction = __stubs_globalAa.__globalStubs.person_utils_sayhello - __stubOrMockResult = __stubFunction(a1, a2) - return __stubOrMockResult - end if - print "hello" - end function + let a = getContents('source/code.brs', false); + let b = undent(` + function person_utils_sayHello(a1, a2) + __stubs_globalAa = getGlobalAa() + if RBS_SM_1_getMocksByFunctionName()["person_utils_sayhello"] <> invalid + __stubOrMockResult = RBS_SM_1_getMocksByFunctionName()["person_utils_sayhello"].callback(a1, a2) + return __stubOrMockResult + else if type(__stubs_globalAa?.__globalStubs?.person_utils_sayhello).endsWith("Function") + __stubFunction = __stubs_globalAa.__globalStubs.person_utils_sayhello + __stubOrMockResult = __stubFunction(a1, a2) + return __stubOrMockResult + end if + print "hello" + end function - function RBS_SM_1_getMocksByFunctionName() - if m._rMocksByFunctionName = invalid - m._rMocksByFunctionName = {} - end if - return m._rMocksByFunctionName - end function -`); + function RBS_SM_1_getMocksByFunctionName() + if m._rMocksByFunctionName = invalid + m._rMocksByFunctionName = {} + end if + return m._rMocksByFunctionName + end function + `); expect(a).to.equal(b); }); it('enables mocking on namespaced sub', async () => { program.setFile('source/code.bs', ` - namespace person.utils - sub sayHello(a1, a2) - print "hello" - end sub - end namespace - `); + namespace person.utils + sub sayHello(a1, a2) + print "hello" + end sub + end namespace + `); program.validate(); expect(program.getDiagnostics()).to.be.empty; await builder.transpile(); - let a = getContents('source/code.brs'); - let b = trimLeading(`sub person_utils_sayHello(a1, a2) - __stubs_globalAa = getGlobalAa() - if RBS_SM_1_getMocksByFunctionName()["person_utils_sayhello"] <> invalid - __stubOrMockResult = RBS_SM_1_getMocksByFunctionName()["person_utils_sayhello"].callback(a1, a2) - return - else if type(__stubs_globalAa?.__globalStubs?.person_utils_sayhello).endsWith("Function") - __stubFunction = __stubs_globalAa.__globalStubs.person_utils_sayhello - __stubOrMockResult = __stubFunction(a1, a2) - return - end if - print "hello" - end sub + let a = getContents('source/code.brs', false); + let b = undent(` + sub person_utils_sayHello(a1, a2) + __stubs_globalAa = getGlobalAa() + if RBS_SM_1_getMocksByFunctionName()["person_utils_sayhello"] <> invalid + __stubOrMockResult = RBS_SM_1_getMocksByFunctionName()["person_utils_sayhello"].callback(a1, a2) + return + else if type(__stubs_globalAa?.__globalStubs?.person_utils_sayhello).endsWith("Function") + __stubFunction = __stubs_globalAa.__globalStubs.person_utils_sayhello + __stubOrMockResult = __stubFunction(a1, a2) + return + end if + print "hello" + end sub - function RBS_SM_1_getMocksByFunctionName() - if m._rMocksByFunctionName = invalid - m._rMocksByFunctionName = {} - end if - return m._rMocksByFunctionName - end function -`); + function RBS_SM_1_getMocksByFunctionName() + if m._rMocksByFunctionName = invalid + m._rMocksByFunctionName = {} + end if + return m._rMocksByFunctionName + end function + `); expect(a).to.equal(b); }); @@ -346,55 +357,56 @@ describe('MockUtil', () => { program.validate(); expect(program.getDiagnostics()).to.be.empty; await builder.transpile(); - let a = getContents('source/code.brs'); - let b = trimLeading(`function __beings_Person_builder() - instance = {} - instance.new = sub() - end sub - instance.sayHello = sub(a1, a2) - print "hello" - end sub - return instance + let a = getContents('source/code.brs', false); + let b = undent(` + function __beings_Person_builder() + instance = {} + instance.new = sub() + end sub + instance.sayHello = sub(a1, a2) + print "hello" + end sub + return instance end function function beings_Person() - instance = __beings_Person_builder() - instance.new() - return instance + instance = __beings_Person_builder() + instance.new() + return instance end function function beings_sayHello() - __stubs_globalAa = getGlobalAa() - if RBS_SM_1_getMocksByFunctionName()["beings_sayhello"] <> invalid - __stubOrMockResult = RBS_SM_1_getMocksByFunctionName()["beings_sayhello"].callback() - return __stubOrMockResult - else if type(__stubs_globalAa?.__globalStubs?.beings_sayhello).endsWith("Function") - __stubFunction = __stubs_globalAa.__globalStubs.beings_sayhello - __stubOrMockResult = __stubFunction() - return __stubOrMockResult - end if - print "hello2" + __stubs_globalAa = getGlobalAa() + if RBS_SM_1_getMocksByFunctionName()["beings_sayhello"] <> invalid + __stubOrMockResult = RBS_SM_1_getMocksByFunctionName()["beings_sayhello"].callback() + return __stubOrMockResult + else if type(__stubs_globalAa?.__globalStubs?.beings_sayhello).endsWith("Function") + __stubFunction = __stubs_globalAa.__globalStubs.beings_sayhello + __stubOrMockResult = __stubFunction() + return __stubOrMockResult + end if + print "hello2" end function function sayHello() - __stubs_globalAa = getGlobalAa() - if RBS_SM_1_getMocksByFunctionName()["sayhello"] <> invalid - __stubOrMockResult = RBS_SM_1_getMocksByFunctionName()["sayhello"].callback() - return __stubOrMockResult - else if type(__stubs_globalAa?.__globalStubs?.sayhello).endsWith("Function") - __stubFunction = __stubs_globalAa.__globalStubs.sayhello - __stubOrMockResult = __stubFunction() - return __stubOrMockResult - end if - print "hello3" + __stubs_globalAa = getGlobalAa() + if RBS_SM_1_getMocksByFunctionName()["sayhello"] <> invalid + __stubOrMockResult = RBS_SM_1_getMocksByFunctionName()["sayhello"].callback() + return __stubOrMockResult + else if type(__stubs_globalAa?.__globalStubs?.sayhello).endsWith("Function") + __stubFunction = __stubs_globalAa.__globalStubs.sayhello + __stubOrMockResult = __stubFunction() + return __stubOrMockResult + end if + print "hello3" end function function RBS_SM_1_getMocksByFunctionName() - if m._rMocksByFunctionName = invalid - m._rMocksByFunctionName = {} - end if - return m._rMocksByFunctionName + if m._rMocksByFunctionName = invalid + m._rMocksByFunctionName = {} + end if + return m._rMocksByFunctionName end function -`); + `); expect(a).to.equal(b); }); diff --git a/bsc-plugin/src/lib/rooibos/MockUtil.ts b/bsc-plugin/src/lib/rooibos/MockUtil.ts index 805c485f..3bd264e7 100644 --- a/bsc-plugin/src/lib/rooibos/MockUtil.ts +++ b/bsc-plugin/src/lib/rooibos/MockUtil.ts @@ -124,9 +124,8 @@ export class MockUtil { } addBrsAPIText(file: BrsFile) { - //TODO should use ast editor! - const func = new RawCodeStatement(this.brsFileAdditions.replace(/\#ID\#/g, this.fileId.toString().trim()), file, Range.create(Position.create(1, 1), Position.create(1, 1))); - file.ast.statements.push(func); + const func = Parser.parse(this.brsFileAdditions.replace(/\#ID\#/g, this.fileId.toString().trim())).ast.statements; + this.astEditor.arrayPush(file.ast.statements, ...func); } diff --git a/bsc-plugin/src/plugin.spec.ts b/bsc-plugin/src/plugin.spec.ts index f2d9a761..a248e164 100644 --- a/bsc-plugin/src/plugin.spec.ts +++ b/bsc-plugin/src/plugin.spec.ts @@ -657,40 +657,46 @@ describe('RooibosPlugin', () => { expect(program.getDiagnostics()).to.be.empty; expect(plugin.session.sessionInfo.testSuitesToRun).to.not.be.empty; await builder.transpile(); - const testContents = getTestFunctionContents(true); + const testContents = getTestFunctionContents(); expect( testContents ).to.eql(undent` m.currentAssertLineNumber = 6 m._expectCalled(m.thing, "callFunc", m, "m.thing", [ - "getFunction" + "getFunction" ]) - if m.currentResult?.isFail = true then m.done() : return invalid - - + if m.currentResult?.isFail = true then + m.done() + return invalid + end if m.currentAssertLineNumber = 7 m._expectCalled(m.thing, "callFunc", m, "m.thing", [ - "getFunction" + "getFunction" ], "return") - if m.currentResult?.isFail = true then m.done() : return invalid - - + if m.currentResult?.isFail = true then + m.done() + return invalid + end if m.currentAssertLineNumber = 8 m._expectCalled(m.thing, "callFunc", m, "m.thing", [ - "getFunction" - "a" - "b" + "getFunction" + "a" + "b" ]) - if m.currentResult?.isFail = true then m.done() : return invalid - - + if m.currentResult?.isFail = true then + m.done() + return invalid + end if m.currentAssertLineNumber = 9 m._expectCalled(m.thing, "callFunc", m, "m.thing", [ - "getFunction" - "a" - "b" + "getFunction" + "a" + "b" ], "return") - if m.currentResult?.isFail = true then m.done() : return invalid + if m.currentResult?.isFail = true then + m.done() + return invalid + end if `); }); @@ -715,12 +721,16 @@ describe('RooibosPlugin', () => { ).to.eql(undent` m.currentAssertLineNumber = 6 m._expectCalled(m.thing, "getFunctionField", m, "m.thing", invalid) - if m.currentResult?.isFail = true then m.done() : return invalid - - + if m.currentResult?.isFail = true then + m.done() + return invalid + end if m.currentAssertLineNumber = 7 m._expectCalled(m.thing, "getFunctionField", m, "m.thing", invalid, "return") - if m.currentResult?.isFail = true then m.done() : return invalid + if m.currentResult?.isFail = true then + m.done() + return invalid + end if `); }); @@ -742,34 +752,40 @@ describe('RooibosPlugin', () => { await builder.transpile(); expect(program.getDiagnostics().filter((d) => d.code !== 'RBS2213')).to.be.empty; expect(plugin.session.sessionInfo.testSuitesToRun).to.not.be.empty; - const testContents = getTestFunctionContents(true); + const testContents = getTestFunctionContents(); expect( testContents ).to.eql(undent` m.currentAssertLineNumber = 6 m._expectCalled(m.thing, "getFunction", m, "m.thing", []) - if m.currentResult?.isFail = true then m.done() : return invalid - - + if m.currentResult?.isFail = true then + m.done() + return invalid + end if m.currentAssertLineNumber = 7 m._expectCalled(m.thing, "getFunction", m, "m.thing", [], "return") - if m.currentResult?.isFail = true then m.done() : return invalid - - + if m.currentResult?.isFail = true then + m.done() + return invalid + end if m.currentAssertLineNumber = 8 m._expectCalled(m.thing, "getFunction", m, "m.thing", [ - "arg1" - "arg2" + "arg1" + "arg2" ]) - if m.currentResult?.isFail = true then m.done() : return invalid - - + if m.currentResult?.isFail = true then + m.done() + return invalid + end if m.currentAssertLineNumber = 9 m._expectCalled(m.thing, "getFunction", m, "m.thing", [ - "arg1" - "arg2" + "arg1" + "arg2" ], "return") - if m.currentResult?.isFail = true then m.done() : return invalid + if m.currentResult?.isFail = true then + m.done() + return invalid + end if `); }); it('does not produce crashing code for subs', async () => { @@ -790,34 +806,39 @@ describe('RooibosPlugin', () => { await builder.transpile(); expect(program.getDiagnostics().filter((d) => d.code !== 'RBS2213')).to.be.empty; expect(plugin.session.sessionInfo.testSuitesToRun).to.not.be.empty; - let a = getTestSubContents(true); expect( - getTestSubContents(true) + getTestSubContents() ).to.eql(undent` m.currentAssertLineNumber = 6 m._expectCalled(m.thing, "getFunction", m, "m.thing", []) - if m.currentResult?.isFail = true then m.done() : return - - + if m.currentResult?.isFail = true then + m.done() + return + end if m.currentAssertLineNumber = 7 m._expectCalled(m.thing, "getFunction", m, "m.thing", [], "return") - if m.currentResult?.isFail = true then m.done() : return - - + if m.currentResult?.isFail = true then + m.done() + return + end if m.currentAssertLineNumber = 8 m._expectCalled(m.thing, "getFunction", m, "m.thing", [ - "arg1" - "arg2" + "arg1" + "arg2" ]) - if m.currentResult?.isFail = true then m.done() : return - - + if m.currentResult?.isFail = true then + m.done() + return + end if m.currentAssertLineNumber = 9 m._expectCalled(m.thing, "getFunction", m, "m.thing", [ - "arg1" - "arg2" + "arg1" + "arg2" ], "return") - if m.currentResult?.isFail = true then m.done() : return + if m.currentResult?.isFail = true then + m.done() + return + end if `); }); it('does not break when validating again after a transpile', async () => { @@ -839,34 +860,40 @@ describe('RooibosPlugin', () => { program.validate(); expect(program.getDiagnostics().filter((d) => d.code !== 'RBS2213')).to.be.empty; expect(plugin.session.sessionInfo.testSuitesToRun).to.not.be.empty; - const testContents = getTestFunctionContents(true); + const testContents = getTestFunctionContents(); expect( testContents ).to.eql(undent` m.currentAssertLineNumber = 6 m._expectCalled(m.thing, "getFunction", m, "m.thing", []) - if m.currentResult?.isFail = true then m.done() : return invalid - - + if m.currentResult?.isFail = true then + m.done() + return invalid + end if m.currentAssertLineNumber = 7 m._expectCalled(m.thing, "getFunction", m, "m.thing", [], "return") - if m.currentResult?.isFail = true then m.done() : return invalid - - + if m.currentResult?.isFail = true then + m.done() + return invalid + end if m.currentAssertLineNumber = 8 m._expectCalled(m.thing, "getFunction", m, "m.thing", [ - "arg1" - "arg2" + "arg1" + "arg2" ]) - if m.currentResult?.isFail = true then m.done() : return invalid - - + if m.currentResult?.isFail = true then + m.done() + return invalid + end if m.currentAssertLineNumber = 9 m._expectCalled(m.thing, "getFunction", m, "m.thing", [ - "arg1" - "arg2" + "arg1" + "arg2" ], "return") - if m.currentResult?.isFail = true then m.done() : return invalid + if m.currentResult?.isFail = true then + m.done() + return invalid + end if `); }); @@ -891,19 +918,22 @@ describe('RooibosPlugin', () => { expect(program.getDiagnostics()).to.be.empty; // expect(plugin.session.sessionInfo.testSuitesToRun).to.not.be.empty; await builder.transpile(); - const testContents = getTestFunctionContents(true); + const testContents = getTestFunctionContents(); expect( testContents ).to.eql(undent` b = { - someValue: "value" + someValue: "value" } - m.currentAssertLineNumber = 12 m.assertEqual(b, { - someValue: "value" + someValue: "value" }) - if m.currentResult?.isFail = true then m.done() : return invalid`); + if m.currentResult?.isFail = true then + m.done() + return invalid + end if + `); }); it('correctly transpiles function invocations - simple object', async () => { @@ -925,38 +955,43 @@ describe('RooibosPlugin', () => { expect(program.getDiagnostics()).to.be.empty; expect(plugin.session.sessionInfo.testSuitesToRun).to.not.be.empty; await builder.transpile(); - const testContents = getTestFunctionContents(true); + const testContents = getTestFunctionContents(); expect( testContents ).to.eql(undent` item = { - id: "item" + id: "item" } - m.currentAssertLineNumber = 7 m._expectCalled(item, "getFunction", item, "item", []) - if m.currentResult?.isFail = true then m.done() : return invalid - - + if m.currentResult?.isFail = true then + m.done() + return invalid + end if m.currentAssertLineNumber = 8 m._expectCalled(item, "getFunction", item, "item", [], "return") - if m.currentResult?.isFail = true then m.done() : return invalid - - + if m.currentResult?.isFail = true then + m.done() + return invalid + end if m.currentAssertLineNumber = 9 m._expectCalled(item, "getFunction", item, "item", [ - "arg1" - "arg2" + "arg1" + "arg2" ]) - if m.currentResult?.isFail = true then m.done() : return invalid - - + if m.currentResult?.isFail = true then + m.done() + return invalid + end if m.currentAssertLineNumber = 10 m._expectCalled(item, "getFunction", item, "item", [ - "arg1" - "arg2" + "arg1" + "arg2" ], "return") - if m.currentResult?.isFail = true then m.done() : return invalid + if m.currentResult?.isFail = true then + m.done() + return invalid + end if `); }); it('correctly transpiles global function calls', async () => { @@ -984,38 +1019,43 @@ describe('RooibosPlugin', () => { expect(program.getDiagnostics()).to.be.empty; expect(plugin.session.sessionInfo.testSuitesToRun).to.not.be.empty; await builder.transpile(); - const testText = getTestFunctionContents(true); + const testText = getTestFunctionContents(); expect( testText ).to.eql(undent` item = { - id: "item" + id: "item" } - m.currentAssertLineNumber = 7 m._expectCalled(sayHello, "sayHello", invalid, invalid, [ - "arg1" - "arg2" + "arg1" + "arg2" ], "return") - if m.currentResult?.isFail = true then m.done() : return invalid - - + if m.currentResult?.isFail = true then + m.done() + return invalid + end if m.currentAssertLineNumber = 8 m._expectCalled(sayHello, "sayHello", invalid, invalid, []) - if m.currentResult?.isFail = true then m.done() : return invalid - - + if m.currentResult?.isFail = true then + m.done() + return invalid + end if m.currentAssertLineNumber = 9 m._expectCalled(sayHello, "sayHello", invalid, invalid, [], "return") - if m.currentResult?.isFail = true then m.done() : return invalid - - + if m.currentResult?.isFail = true then + m.done() + return invalid + end if m.currentAssertLineNumber = 10 m._expectCalled(sayHello, "sayHello", invalid, invalid, [ - "arg1" - "arg2" + "arg1" + "arg2" ]) - if m.currentResult?.isFail = true then m.done() : return invalid + if m.currentResult?.isFail = true then + m.done() + return invalid + end if `); let codeText = getContents('code.brs'); @@ -1023,11 +1063,11 @@ describe('RooibosPlugin', () => { function sayHello(firstName = "", lastName = "") __stubs_globalAa = getGlobalAa() if RBS_SM_1_getMocksByFunctionName()["sayhello"] <> invalid - __stubOrMockResult = RBS_SM_1_getMocksByFunctionName()["sayhello"].callback(firstName,lastName) + __stubOrMockResult = RBS_SM_1_getMocksByFunctionName()["sayhello"].callback(firstName, lastName) return __stubOrMockResult else if type(__stubs_globalAa?.__globalStubs?.sayhello).endsWith("Function") __stubFunction = __stubs_globalAa.__globalStubs.sayhello - __stubOrMockResult = __stubFunction() + __stubOrMockResult = __stubFunction(firstName, lastName) return __stubOrMockResult end if print firstName + " " + lastName @@ -1035,7 +1075,7 @@ describe('RooibosPlugin', () => { function RBS_SM_1_getMocksByFunctionName() if m._rMocksByFunctionName = invalid - m._rMocksByFunctionName = {} + m._rMocksByFunctionName = {} end if return m._rMocksByFunctionName end function`); @@ -1067,50 +1107,55 @@ describe('RooibosPlugin', () => { expect(program.getDiagnostics()).to.be.empty; expect(plugin.session.sessionInfo.testSuitesToRun).to.not.be.empty; await builder.transpile(); - const testText = getTestFunctionContents(true); + const testText = getTestFunctionContents(); expect( testText ).to.eql(undent` item = { id: "item" } - m.currentAssertLineNumber = 7 m._expectCalled(utils_sayhello, "utils_sayhello", invalid, invalid, [ "arg1" "arg2" ], "return") - if m.currentResult?.isFail = true then m.done() : return invalid - - + if m.currentResult?.isFail = true then + m.done() + return invalid + end if m.currentAssertLineNumber = 8 m._expectCalled(utils_sayhello, "utils_sayhello", invalid, invalid, []) - if m.currentResult?.isFail = true then m.done() : return invalid - - + if m.currentResult?.isFail = true then + m.done() + return invalid + end if m.currentAssertLineNumber = 9 m._expectCalled(utils_sayhello, "utils_sayhello", invalid, invalid, [], "return") - if m.currentResult?.isFail = true then m.done() : return invalid - - + if m.currentResult?.isFail = true then + m.done() + return invalid + end if m.currentAssertLineNumber = 10 m._expectCalled(utils_sayhello, "utils_sayhello", invalid, invalid, [ "arg1" "arg2" ]) - if m.currentResult?.isFail = true then m.done() : return invalid + if m.currentResult?.isFail = true then + m.done() + return invalid + end if `); - let codeText = trimLeading(getContents('code.brs')); - expect(codeText).to.equal(trimLeading(` + let codeText = getContents('code.brs'); + expect(codeText).to.equal(undent(` function utils_sayHello(firstName = "", lastName = "") __stubs_globalAa = getGlobalAa() if RBS_SM_1_getMocksByFunctionName()["utils_sayhello"] <> invalid - __stubOrMockResult = RBS_SM_1_getMocksByFunctionName()["utils_sayhello"].callback(firstName,lastName) + __stubOrMockResult = RBS_SM_1_getMocksByFunctionName()["utils_sayhello"].callback(firstName, lastName) return __stubOrMockResult - else if type(__stubs_globalAa?.__globalStubs?.beings_sayHello).endsWith("Function") - __stubFunction = __stubs_globalAa.__globalStubs.beings_sayHello - __stubOrMockResult = __stubFunction() + else if type(__stubs_globalAa?.__globalStubs?.utils_sayhello).endsWith("Function") + __stubFunction = __stubs_globalAa.__globalStubs.utils_sayhello + __stubOrMockResult = __stubFunction(firstName, lastName) return __stubOrMockResult end if print firstName + " " + lastName @@ -1118,10 +1163,11 @@ describe('RooibosPlugin', () => { function RBS_SM_1_getMocksByFunctionName() if m._rMocksByFunctionName = invalid - m._rMocksByFunctionName = {} + m._rMocksByFunctionName = {} end if return m._rMocksByFunctionName - end function`)); + end function + `)); }); }); @@ -1291,22 +1337,28 @@ describe('RooibosPlugin', () => { ).to.eql(undent` m.currentAssertLineNumber = 6 m._expectNotCalled(m.thing, "callFunc", m, "m.thing") - if m.currentResult?.isFail = true then m.done() : return invalid - - + if m.currentResult?.isFail = true then + m.done() + return invalid + end if m.currentAssertLineNumber = 7 m._expectNotCalled(m.thing, "callFunc", m, "m.thing", "return") - if m.currentResult?.isFail = true then m.done() : return invalid - - + if m.currentResult?.isFail = true then + m.done() + return invalid + end if m.currentAssertLineNumber = 8 m._expectNotCalled(m.thing, "callFunc", m, "m.thing") - if m.currentResult?.isFail = true then m.done() : return invalid - - + if m.currentResult?.isFail = true then + m.done() + return invalid + end if m.currentAssertLineNumber = 9 m._expectNotCalled(m.thing, "callFunc", m, "m.thing", "return") - if m.currentResult?.isFail = true then m.done() : return invalid + if m.currentResult?.isFail = true then + m.done() + return invalid + end if `); }); @@ -1331,15 +1383,18 @@ describe('RooibosPlugin', () => { getTestFunctionContents() ).to.eql(undent` thing = {} - m.currentAssertLineNumber = 7 m._expectNotCalled(thing, "callFunc", thing, "thing") - if m.currentResult?.isFail = true then m.done() : return invalid - - + if m.currentResult?.isFail = true then + m.done() + return invalid + end if m.currentAssertLineNumber = 8 m._expectNotCalled(thing, "callFunc", thing, "thing") - if m.currentResult?.isFail = true then m.done() : return invalid + if m.currentResult?.isFail = true then + m.done() + return invalid + end if `); //verify original code does not remain modified after the transpile cycle const testMethod = ((file.ast.statements[0] as ClassStatement).memberMap['_'] as ClassMethodStatement); @@ -1376,7 +1431,10 @@ describe('RooibosPlugin', () => { ).to.eql(undent` m.currentAssertLineNumber = 6 m._expectNotCalled(m.thing, "getFunctionField", m, "m.thing") - if m.currentResult?.isFail = true then m.done() : return invalid + if m.currentResult?.isFail = true then + m.done() + return invalid + end if `); //verify original code does not remain modified after the transpile cycle const testMethod = ((file.ast.statements[0] as ClassStatement).memberMap['_'] as ClassMethodStatement); @@ -1410,23 +1468,28 @@ describe('RooibosPlugin', () => { ).to.eql(undent` m.currentAssertLineNumber = 6 m._expectNotCalled(m.thing, "getFunction", m, "m.thing") - if m.currentResult?.isFail = true then m.done() : return invalid - - + if m.currentResult?.isFail = true then + m.done() + return invalid + end if m.currentAssertLineNumber = 7 m._expectNotCalled(m.thing, "getFunction", m, "m.thing", "return") - if m.currentResult?.isFail = true then m.done() : return invalid - - + if m.currentResult?.isFail = true then + m.done() + return invalid + end if m.currentAssertLineNumber = 8 m._expectNotCalled(m.thing, "getFunction", m, "m.thing") - if m.currentResult?.isFail = true then m.done() : return invalid - - + if m.currentResult?.isFail = true then + m.done() + return invalid + end if m.currentAssertLineNumber = 9 m._expectNotCalled(m.thing, "getFunction", m, "m.thing", "return") - if m.currentResult?.isFail = true then m.done() : return invalid - `); + if m.currentResult?.isFail = true then + m.done() + return invalid + end if `); }); it('correctly transpiles function invocations - simple object', async () => { @@ -1446,22 +1509,25 @@ describe('RooibosPlugin', () => { expect(program.getDiagnostics()).to.be.empty; expect(plugin.session.sessionInfo.testSuitesToRun).to.not.be.empty; await builder.transpile(); - const testContents = getTestFunctionContents(true); + const testContents = getTestFunctionContents(); expect( testContents ).to.eql(undent` item = { - id: "item" + id: "item" } - m.currentAssertLineNumber = 7 m._expectNotCalled(item, "getFunction", item, "item") - if m.currentResult?.isFail = true then m.done() : return invalid - - + if m.currentResult?.isFail = true then + m.done() + return invalid + end if m.currentAssertLineNumber = 8 m._expectNotCalled(item, "getFunction", item, "item") - if m.currentResult?.isFail = true then m.done() : return invalid + if m.currentResult?.isFail = true then + m.done() + return invalid + end if `); }); });