diff --git a/dist/rooibosDist.brs b/dist/rooibosDist.brs index 8291ec99..1d8104b4 100644 --- a/dist/rooibosDist.brs +++ b/dist/rooibosDist.brs @@ -906,7 +906,7 @@ function RBS_BTS_Stub(target, methodName, returnValue = invalid, allowNonExistin fake = m.CreateFake(id, target, methodName, 1, invalid, returnValue) m.stubs[id] = fake allowNonExisting = m.allowNonExistingMethodsOnMocks = true or allowNonExistingMethods - isMethodPresent = type(target[methodName]) = "Function" or type(target[methodName]) = "roFunction" + isMethodPresent = type(target[methodName]) = "Function" or type(target[methodName]) = "roFunction" if (isMethodPresent or allowNonExisting) target[methodName] = m["StubCallback" + id] target.__stubs = m.stubs @@ -935,19 +935,36 @@ function RBS_BTS_Expect(target, methodName, expectedInvocations = 1, expectedArg return m.Mock(target, methodName, expectedInvocations, expectedArgs, returnValue, allowNonExistingMethods) end function function RBS_BTS_Mock(target, methodName, expectedInvocations = 1, expectedArgs = invalid, returnValue = invalid, allowNonExistingMethods = false) as object - if (type(target) <> "roAssociativeArray") - m.Fail("could not create Stub provided target was null") + if not RBS_CMN_IsAssociativeArray(target) + m.Fail("mock args: target was not an AA") + else if not RBS_CMN_IsString(methodName) + m.Fail("mock args: methodName was not a string") + else if not RBS_CMN_IsNumber(expectedInvocations) + m.Fail("mock args: expectedInvocations was not an int") + else if not RBS_CMN_IsArray(expectedArgs) and RBS_CMN_IsValid(expectedArgs) + m.Fail("mock args: expectedArgs was not invalid or an array of args") + else if RBS_CMN_IsUndefined(expectedArgs) + m.Fail("mock args: expectedArgs undefined") + end if + if m.currentResult.isFail + ? "ERROR: "; m.currentResult.messages[m.currentResult.currentAssertIndex - 1] return {} end if if (m.mocks = invalid) m.__mockId = -1 + m.__mockTargetId = -1 m.mocks = {} end if fake = invalid + if not target.doesExist("__rooibosTargetId") + m.__mockTargetId++ + target["__rooibosTargetId"] = m.__mockTargetId + end if for i = 0 to m.__mockId id = stri(i).trim() - if m.mocks[id] <> invalid and m.mocks[id].methodName = methodName - fake = m.mocks[id] + mock = m.mocks[id] + if mock <> invalid and mock.methodName = methodName and mock.target.__rooibosTargetId = target.__rooibosTargetId + fake = mock exit for end if end for @@ -962,8 +979,8 @@ function RBS_BTS_Mock(target, methodName, expectedInvocations = 1, expectedArgs fake = m.CreateFake(id, target, methodName, expectedInvocations, expectedArgs, returnValue) m.mocks[id] = fake 'this will bind it to m allowNonExisting = m.allowNonExistingMethodsOnMocks = true or allowNonExistingMethods - isMethodPresent = type(target[methodName]) = "Function" or type(target[methodName]) = "roFunction" - if (isMethodPresent or allowNonExisting) + isMethodPresent = type(target[methodName]) = "Function" or type(target[methodName]) = "roFunction" + if (isMethodPresent or allowNonExisting) target[methodName] = m["MockCallback" + id] target.__mocks = m.mocks if (not isMethodPresent) @@ -972,7 +989,7 @@ function RBS_BTS_Mock(target, methodName, expectedInvocations = 1, expectedArgs else ? "ERROR - could not create Mock : method not found "; target ; "." ; methodName end if - else + else m.CombineFakes(fake, m.CreateFake(id, target, methodName, expectedInvocations, expectedArgs, returnValue)) end if return fake @@ -1095,141 +1112,141 @@ function RBS_BTS_AssertMocks() as void end for m.CleanMocks() end function - function RBS_BTS_CleanMocks() as void - if m.mocks = invalid return - for each id in m.mocks - mock = m.mocks[id] - mock.target.__mocks = invalid +function RBS_BTS_CleanMocks() as void + if m.mocks = invalid return + for each id in m.mocks + mock = m.mocks[id] + mock.target.__mocks = invalid + end for + m.mocks = invalid + end function + function RBS_BTS_CleanStubs() as void + if m.stubs = invalid return + for each id in m.stubs + stub = m.stubs[id] + stub.target.__stubs = invalid end for - m.mocks = invalid + m.stubs = invalid end function - function RBS_BTS_CleanStubs() as void - if m.stubs = invalid return - for each id in m.stubs - stub = m.stubs[id] - stub.target.__stubs = invalid - end for - m.stubs = invalid - end function - function RBS_BTS_MockFail(methodName, message) as dynamic - if (m.currentResult.isFail) then return m.GetLegacyCompatibleReturnValue(false) ' skip test we already failed - m.currentResult.AddResult("mock failure on '" + methodName + "' : " + message) - return m.GetLegacyCompatibleReturnValue(false) - end function - function RBS_BTS_StubCallback0(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic - fake = m.__Stubs["0"] - return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) - end function - function RBS_BTS_StubCallback1(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic - fake = m.__Stubs["1"] - return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) - end function - function RBS_BTS_StubCallback2(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic - fake = m.__Stubs["2"] - return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) - end function - function RBS_BTS_StubCallback3(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic - fake = m.__Stubs["3"] - return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) - end function - function RBS_BTS_StubCallback4(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic - fake = m.__Stubs["4"] - return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) - end function - function RBS_BTS_StubCallback5(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic - fake = m.__Stubs["5"] - return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) - end function - function RBS_BTS_MockCallback0(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic - fake = m.__mocks["0"] - return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) - end function - function RBS_BTS_MockCallback1(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic - fake = m.__mocks["1"] - return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) - end function - function RBS_BTS_MockCallback2(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic - fake = m.__mocks["2"] - return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) - end function - function RBS_BTS_MockCallback3(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic - fake = m.__mocks["3"] - return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) - end function - function RBS_BTS_MockCallback4(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic - fake = m.__mocks["4"] - return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) - end function - function RBS_BTS_MockCallback5(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic - fake = m.__mocks["5"] - return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) - end function - function RBS_BTS_rodash_pathsAsArray_(path) - pathRE = CreateObject("roRegex", "\[([0-9]+)\]", "i") - segments = [] - if type(path) = "String" or type(path) = "roString" - dottedPath = pathRE.replaceAll(path, ".\1") - stringSegments = dottedPath.tokenize(".") - for each s in stringSegments - if (Asc(s) >= 48) and (Asc(s) <= 57) - segments.push(s.toInt()) - else - segments.push(s) - end if - end for - else if type(path) = "roList" or type(path) = "roArray" - stringPath = "" - for each s in path - stringPath = stringPath + "." + Box(s).toStr() - end for - segments = m.pathAsArray_(stringPath) - else - segments = invalid - end if - return segments - end function - function RBS_BTS_rodash_get_(aa, path, default=invalid) - if type(aa) <> "roAssociativeArray" and type(aa) <> "roArray" and type(aa) <> "roSGNode" then return default - segments = m.pathAsArray_(path) - if (Type(path) = "roInt" or Type(path) = "roInteger" or Type(path) = "Integer") - path = stri(path).trim() - end if - if segments = invalid then return default - result = invalid - while segments.count() > 0 - key = segments.shift() - if (type(key) = "roInteger") 'it's a valid index - if (aa <> invalid and GetInterface(aa, "ifArray") <> invalid) - value = aa[key] - else if (aa <> invalid and GetInterface(aa, "ifSGNodeChildren") <> invalid) - value = aa.getChild(key) - else if (aa <> invalid and GetInterface(aa, "ifAssociativeArray") <> invalid) - key = tostr(key) - if not aa.doesExist(key) - exit while - end if - value = aa.lookup(key) - else - value = invalid - end if + function RBS_BTS_MockFail(methodName, message) as dynamic + if (m.currentResult.isFail) then return m.GetLegacyCompatibleReturnValue(false) ' skip test we already failed + m.currentResult.AddResult("mock failure on '" + methodName + "' : " + message) + return m.GetLegacyCompatibleReturnValue(false) + end function + function RBS_BTS_StubCallback0(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic + fake = m.__Stubs["0"] + return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) + end function + function RBS_BTS_StubCallback1(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic + fake = m.__Stubs["1"] + return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) + end function + function RBS_BTS_StubCallback2(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic + fake = m.__Stubs["2"] + return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) + end function + function RBS_BTS_StubCallback3(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic + fake = m.__Stubs["3"] + return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) + end function + function RBS_BTS_StubCallback4(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic + fake = m.__Stubs["4"] + return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) + end function + function RBS_BTS_StubCallback5(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic + fake = m.__Stubs["5"] + return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) + end function + function RBS_BTS_MockCallback0(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic + fake = m.__mocks["0"] + return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) + end function + function RBS_BTS_MockCallback1(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic + fake = m.__mocks["1"] + return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) + end function + function RBS_BTS_MockCallback2(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic + fake = m.__mocks["2"] + return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) + end function + function RBS_BTS_MockCallback3(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic + fake = m.__mocks["3"] + return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) + end function + function RBS_BTS_MockCallback4(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic + fake = m.__mocks["4"] + return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) + end function + function RBS_BTS_MockCallback5(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic + fake = m.__mocks["5"] + return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) + end function + function RBS_BTS_rodash_pathsAsArray_(path) + pathRE = CreateObject("roRegex", "\[([0-9]+)\]", "i") + segments = [] + if type(path) = "String" or type(path) = "roString" + dottedPath = pathRE.replaceAll(path, ".\1") + stringSegments = dottedPath.tokenize(".") + for each s in stringSegments + if (Asc(s) >= 48) and (Asc(s) <= 57) + segments.push(s.toInt()) else + segments.push(s) + end if + end for + else if type(path) = "roList" or type(path) = "roArray" + stringPath = "" + for each s in path + stringPath = stringPath + "." + Box(s).toStr() + end for + segments = m.pathAsArray_(stringPath) + else + segments = invalid + end if + return segments + end function + function RBS_BTS_rodash_get_(aa, path, default=invalid) + if type(aa) <> "roAssociativeArray" and type(aa) <> "roArray" and type(aa) <> "roSGNode" then return default + segments = m.pathAsArray_(path) + if (Type(path) = "roInt" or Type(path) = "roInteger" or Type(path) = "Integer") + path = stri(path).trim() + end if + if segments = invalid then return default + result = invalid + while segments.count() > 0 + key = segments.shift() + if (type(key) = "roInteger") 'it's a valid index + if (aa <> invalid and GetInterface(aa, "ifArray") <> invalid) + value = aa[key] + else if (aa <> invalid and GetInterface(aa, "ifSGNodeChildren") <> invalid) + value = aa.getChild(key) + else if (aa <> invalid and GetInterface(aa, "ifAssociativeArray") <> invalid) + key = tostr(key) if not aa.doesExist(key) exit while end if value = aa.lookup(key) + else + value = invalid end if - if segments.count() = 0 - result = value - exit while - end if - if type(value) <> "roAssociativeArray" and type(value) <> "roArray" and type(value) <> "roSGNode" + else + if not aa.doesExist(key) exit while end if - aa = value - end while - if result = invalid then return default - return result - end function + value = aa.lookup(key) + end if + if segments.count() = 0 + result = value + exit while + end if + if type(value) <> "roAssociativeArray" and type(value) <> "roArray" and type(value) <> "roSGNode" + exit while + end if + aa = value + end while + if result = invalid then return default + return result + end function function RBS_CMN_IsXmlElement(value ) as boolean return RBS_CMN_IsValid(value) and GetInterface(value, "ifXMLElement") <> invalid end function diff --git a/docs/Rooibos.brs.html b/docs/Rooibos.brs.html index 05c62a52..42e59f75 100644 --- a/docs/Rooibos.brs.html +++ b/docs/Rooibos.brs.html @@ -122,7 +122,7 @@

Rooibos.brs


diff --git a/docs/Rooibos_BaseTestSuite.brs.html b/docs/Rooibos_BaseTestSuite.brs.html index ad593cbe..40c522fa 100644 --- a/docs/Rooibos_BaseTestSuite.brs.html +++ b/docs/Rooibos_BaseTestSuite.brs.html @@ -1456,7 +1456,7 @@

Rooibos_BaseTestSuite.brs

fake = m.CreateFake(id, target, methodName, 1, invalid, returnValue) m.stubs[id] = fake allowNonExisting = m.allowNonExistingMethodsOnMocks = true or allowNonExistingMethods - isMethodPresent = type(target[methodName]) = "Function" or type(target[methodName]) = "roFunction" + isMethodPresent = type(target[methodName]) = "Function" or type(target[methodName]) = "roFunction" if (isMethodPresent or allowNonExisting) target[methodName] = m["StubCallback" + id] target.__stubs = m.stubs @@ -1558,31 +1558,48 @@

Rooibos_BaseTestSuite.brs

' * @param {boolean} [allowNonExistingMethods=false] - if true, then rooibos will only warn if the method did not exist prior to faking ' * @returns {Object} - mock that was wired into the real method ' */ - function RBS_BTS_Mock(target, methodName, expectedInvocations = 1, expectedArgs = invalid, returnValue = invalid, allowNonExistingMethods = false) as object - if (type(target) <> "roAssociativeArray") - m.Fail("could not create Stub provided target was null") + 'check params + if not RBS_CMN_IsAssociativeArray(target) + m.Fail("mock args: target was not an AA") + else if not RBS_CMN_IsString(methodName) + m.Fail("mock args: methodName was not a string") + else if not RBS_CMN_IsNumber(expectedInvocations) + m.Fail("mock args: expectedInvocations was not an int") + else if not RBS_CMN_IsArray(expectedArgs) and RBS_CMN_IsValid(expectedArgs) + m.Fail("mock args: expectedArgs was not invalid or an array of args") + else if RBS_CMN_IsUndefined(expectedArgs) + m.Fail("mock args: expectedArgs undefined") + end if + + if m.currentResult.isFail + ? "ERROR: "; m.currentResult.messages[m.currentResult.currentAssertIndex - 1] return {} end if if (m.mocks = invalid) m.__mockId = -1 + m.__mockTargetId = -1 m.mocks = {} end if - + fake = invalid + if not target.doesExist("__rooibosTargetId") + m.__mockTargetId++ + target["__rooibosTargetId"] = m.__mockTargetId + end if 'ascertain if mock already exists for i = 0 to m.__mockId id = stri(i).trim() - if m.mocks[id] <> invalid and m.mocks[id].methodName = methodName - fake = m.mocks[id] + mock = m.mocks[id] + if mock <> invalid and mock.methodName = methodName and mock.target.__rooibosTargetId = target.__rooibosTargetId + fake = mock exit for end if end for if fake = invalid m.__mockId++ id = stri(m.__mockId).trim() - if (m.__mockId > 6) ? "ERROR ONLY 6 MOCKS PER TEST ARE SUPPORTED!! you're on # " ; m.__mockId ? " Method was " ; methodName @@ -1592,8 +1609,8 @@

Rooibos_BaseTestSuite.brs

fake = m.CreateFake(id, target, methodName, expectedInvocations, expectedArgs, returnValue) m.mocks[id] = fake 'this will bind it to m allowNonExisting = m.allowNonExistingMethodsOnMocks = true or allowNonExistingMethods - isMethodPresent = type(target[methodName]) = "Function" or type(target[methodName]) = "roFunction" - if (isMethodPresent or allowNonExisting) + isMethodPresent = type(target[methodName]) = "Function" or type(target[methodName]) = "roFunction" + if (isMethodPresent or allowNonExisting) target[methodName] = m["MockCallback" + id] target.__mocks = m.mocks @@ -1603,7 +1620,7 @@

Rooibos_BaseTestSuite.brs

else ? "ERROR - could not create Mock : method not found "; target ; "." ; methodName end if - else + else m.CombineFakes(fake, m.CreateFake(id, target, methodName, expectedInvocations, expectedArgs, returnValue)) end if return fake @@ -1761,219 +1778,219 @@

Rooibos_BaseTestSuite.brs

m.CleanMocks() end function +' /** +' * @memberof module:BaseTestSuite +' * @name CleanMocks +' * @function +' * @instance +' * @description Cleans up all tracking data associated with mocks +' */ +function RBS_BTS_CleanMocks() as void + if m.mocks = invalid return + for each id in m.mocks + mock = m.mocks[id] + mock.target.__mocks = invalid + end for + m.mocks = invalid + end function + ' /** ' * @memberof module:BaseTestSuite - ' * @name CleanMocks + ' * @name CleanStubs ' * @function ' * @instance - ' * @description Cleans up all tracking data associated with mocks + ' * @description Cleans up all tracking data associated with stubs ' */ - function RBS_BTS_CleanMocks() as void - if m.mocks = invalid return - for each id in m.mocks - mock = m.mocks[id] - mock.target.__mocks = invalid + function RBS_BTS_CleanStubs() as void + if m.stubs = invalid return + for each id in m.stubs + stub = m.stubs[id] + stub.target.__stubs = invalid end for - m.mocks = invalid + m.stubs = invalid end function - ' /** - ' * @memberof module:BaseTestSuite - ' * @name CleanStubs - ' * @function - ' * @instance - ' * @description Cleans up all tracking data associated with stubs - ' */ - function RBS_BTS_CleanStubs() as void - if m.stubs = invalid return - for each id in m.stubs - stub = m.stubs[id] - stub.target.__stubs = invalid - end for - m.stubs = invalid - end function - - function RBS_BTS_MockFail(methodName, message) as dynamic - if (m.currentResult.isFail) then return m.GetLegacyCompatibleReturnValue(false) ' skip test we already failed - m.currentResult.AddResult("mock failure on '" + methodName + "' : " + message) - return m.GetLegacyCompatibleReturnValue(false) - end function + function RBS_BTS_MockFail(methodName, message) as dynamic + if (m.currentResult.isFail) then return m.GetLegacyCompatibleReturnValue(false) ' skip test we already failed + m.currentResult.AddResult("mock failure on '" + methodName + "' : " + message) + return m.GetLegacyCompatibleReturnValue(false) + end function - '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - '++ Fake Stub callback functions - this is required to get scope - '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + '++ Fake Stub callback functions - this is required to get scope + '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - function RBS_BTS_StubCallback0(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic - fake = m.__Stubs["0"] - return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) - end function + function RBS_BTS_StubCallback0(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic + fake = m.__Stubs["0"] + return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) + end function - function RBS_BTS_StubCallback1(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic - fake = m.__Stubs["1"] - return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) - end function + function RBS_BTS_StubCallback1(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic + fake = m.__Stubs["1"] + return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) + end function - function RBS_BTS_StubCallback2(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic - fake = m.__Stubs["2"] - return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) - end function + function RBS_BTS_StubCallback2(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic + fake = m.__Stubs["2"] + return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) + end function - function RBS_BTS_StubCallback3(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic - fake = m.__Stubs["3"] - return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) - end function + function RBS_BTS_StubCallback3(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic + fake = m.__Stubs["3"] + return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) + end function - function RBS_BTS_StubCallback4(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic - fake = m.__Stubs["4"] - return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) - end function + function RBS_BTS_StubCallback4(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic + fake = m.__Stubs["4"] + return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) + end function - function RBS_BTS_StubCallback5(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic - fake = m.__Stubs["5"] - return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) - end function + function RBS_BTS_StubCallback5(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic + fake = m.__Stubs["5"] + return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) + end function - '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - '++ Fake Mock callback functions - this is required to get scope - '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + '++ Fake Mock callback functions - this is required to get scope + '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - function RBS_BTS_MockCallback0(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic - fake = m.__mocks["0"] - return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) - end function + function RBS_BTS_MockCallback0(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic + fake = m.__mocks["0"] + return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) + end function - function RBS_BTS_MockCallback1(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic - fake = m.__mocks["1"] - return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) - end function + function RBS_BTS_MockCallback1(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic + fake = m.__mocks["1"] + return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) + end function - function RBS_BTS_MockCallback2(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic - fake = m.__mocks["2"] - return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) - end function + function RBS_BTS_MockCallback2(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic + fake = m.__mocks["2"] + return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) + end function - function RBS_BTS_MockCallback3(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic - fake = m.__mocks["3"] - return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) - end function + function RBS_BTS_MockCallback3(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic + fake = m.__mocks["3"] + return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) + end function - function RBS_BTS_MockCallback4(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic - fake = m.__mocks["4"] - return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) - end function + function RBS_BTS_MockCallback4(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic + fake = m.__mocks["4"] + return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) + end function - function RBS_BTS_MockCallback5(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic - fake = m.__mocks["5"] - return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) - end function + function RBS_BTS_MockCallback5(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic + fake = m.__mocks["5"] + return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) + end function - '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - '++ Utility functions! - '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + '++ Utility functions! + '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + '************************************************************* + '** ripped and adapted from rodash - thanks @veeta! + '** used by get method - consider thsis private + '************************************************************* + function RBS_BTS_rodash_pathsAsArray_(path) + pathRE = CreateObject("roRegex", "\[([0-9]+)\]", "i") + segments = [] + if type(path) = "String" or type(path) = "roString" + dottedPath = pathRE.replaceAll(path, ".\1") + stringSegments = dottedPath.tokenize(".") + for each s in stringSegments + if (Asc(s) >= 48) and (Asc(s) <= 57) + segments.push(s.toInt()) + else + segments.push(s) + end if + end for + else if type(path) = "roList" or type(path) = "roArray" + stringPath = "" + for each s in path + stringPath = stringPath + "." + Box(s).toStr() + end for + segments = m.pathAsArray_(stringPath) + else + segments = invalid + end if + return segments + end function - '************************************************************* - '** ripped and adapted from rodash - thanks @veeta! - '** used by get method - consider thsis private - '************************************************************* - function RBS_BTS_rodash_pathsAsArray_(path) - pathRE = CreateObject("roRegex", "\[([0-9]+)\]", "i") - segments = [] - if type(path) = "String" or type(path) = "roString" - dottedPath = pathRE.replaceAll(path, ".\1") - stringSegments = dottedPath.tokenize(".") - for each s in stringSegments - if (Asc(s) >= 48) and (Asc(s) <= 57) - segments.push(s.toInt()) - else - segments.push(s) - end if - end for - else if type(path) = "roList" or type(path) = "roArray" - stringPath = "" - for each s in path - stringPath = stringPath + "." + Box(s).toStr() - end for - segments = m.pathAsArray_(stringPath) - else - segments = invalid - end if - return segments - end function - - ' /** - ' * @memberof module:BaseTestSuite - ' * @name g - ' * @function - ' * @instance - ' * @description ripped and adapted from rodash - thanks @veeta! - ' * use this method to safely get anything. useful for when unit testing a collection - ' * or something and you're not sure if it's gonna crash! - ' * @param {Dynamic} aa - node, array or assoArray - ' * @param {Dynamic} subset - the items to check for - ' * @param {Dynamic} path -as string path to target field. Can use .0. or [0] index notation e.g. "children.0.title" or "children[0].title" - ' * @returns {dynamic} - matched item, on aa at path - ' */ - - function RBS_BTS_rodash_get_(aa, path, default=invalid) - if type(aa) <> "roAssociativeArray" and type(aa) <> "roArray" and type(aa) <> "roSGNode" then return default - segments = m.pathAsArray_(path) - - if (Type(path) = "roInt" or Type(path) = "roInteger" or Type(path) = "Integer") - path = stri(path).trim() - end if + ' /** + ' * @memberof module:BaseTestSuite + ' * @name g + ' * @function + ' * @instance + ' * @description ripped and adapted from rodash - thanks @veeta! + ' * use this method to safely get anything. useful for when unit testing a collection + ' * or something and you're not sure if it's gonna crash! + ' * @param {Dynamic} aa - node, array or assoArray + ' * @param {Dynamic} subset - the items to check for + ' * @param {Dynamic} path -as string path to target field. Can use .0. or [0] index notation e.g. "children.0.title" or "children[0].title" + ' * @returns {dynamic} - matched item, on aa at path + ' */ + + function RBS_BTS_rodash_get_(aa, path, default=invalid) + if type(aa) <> "roAssociativeArray" and type(aa) <> "roArray" and type(aa) <> "roSGNode" then return default + segments = m.pathAsArray_(path) + + if (Type(path) = "roInt" or Type(path) = "roInteger" or Type(path) = "Integer") + path = stri(path).trim() + end if - if segments = invalid then return default - result = invalid - - while segments.count() > 0 - key = segments.shift() - if (type(key) = "roInteger") 'it's a valid index - if (aa <> invalid and GetInterface(aa, "ifArray") <> invalid) - value = aa[key] - else if (aa <> invalid and GetInterface(aa, "ifSGNodeChildren") <> invalid) - value = aa.getChild(key) - else if (aa <> invalid and GetInterface(aa, "ifAssociativeArray") <> invalid) - key = tostr(key) - if not aa.doesExist(key) - exit while - end if - - value = aa.lookup(key) - else - value = invalid - end if - else + if segments = invalid then return default + result = invalid + + while segments.count() > 0 + key = segments.shift() + if (type(key) = "roInteger") 'it's a valid index + if (aa <> invalid and GetInterface(aa, "ifArray") <> invalid) + value = aa[key] + else if (aa <> invalid and GetInterface(aa, "ifSGNodeChildren") <> invalid) + value = aa.getChild(key) + else if (aa <> invalid and GetInterface(aa, "ifAssociativeArray") <> invalid) + key = tostr(key) if not aa.doesExist(key) exit while end if value = aa.lookup(key) + else + value = invalid end if - - if segments.count() = 0 - result = value + else + if not aa.doesExist(key) exit while end if - if type(value) <> "roAssociativeArray" and type(value) <> "roArray" and type(value) <> "roSGNode" - exit while - end if - aa = value - end while + value = aa.lookup(key) + end if + + if segments.count() = 0 + result = value + exit while + end if + + if type(value) <> "roAssociativeArray" and type(value) <> "roArray" and type(value) <> "roSGNode" + exit while + end if + aa = value + end while - if result = invalid then return default - return result - end function + if result = invalid then return default + return result + end function @@ -1986,7 +2003,7 @@

Rooibos_BaseTestSuite.brs


diff --git a/docs/Rooibos_CommonUtils.brs.html b/docs/Rooibos_CommonUtils.brs.html index 29c4cdda..6b42acc2 100644 --- a/docs/Rooibos_CommonUtils.brs.html +++ b/docs/Rooibos_CommonUtils.brs.html @@ -598,7 +598,7 @@

Rooibos_CommonUtils.brs


diff --git a/docs/Rooibos_ItemGenerator.brs.html b/docs/Rooibos_ItemGenerator.brs.html index 2928d096..73a7d516 100644 --- a/docs/Rooibos_ItemGenerator.brs.html +++ b/docs/Rooibos_ItemGenerator.brs.html @@ -273,7 +273,7 @@

Rooibos_ItemGenerator.brs


diff --git a/docs/Rooibos_TestRunner.brs.html b/docs/Rooibos_TestRunner.brs.html index 1a0f7b20..ac5b6dbf 100644 --- a/docs/Rooibos_TestRunner.brs.html +++ b/docs/Rooibos_TestRunner.brs.html @@ -415,7 +415,7 @@

Rooibos_TestRunner.brs


diff --git a/docs/index.html b/docs/index.html index a7ac6c2d..69d3abc5 100644 --- a/docs/index.html +++ b/docs/index.html @@ -57,7 +57,7 @@
diff --git a/docs/module-BaseTestSuite.html b/docs/module-BaseTestSuite.html index 17f4d9e5..0d3aab7f 100644 --- a/docs/module-BaseTestSuite.html +++ b/docs/module-BaseTestSuite.html @@ -12420,7 +12420,7 @@
Returns:

diff --git a/docs/module-CommonUtils.html b/docs/module-CommonUtils.html index 61cd170f..e2f50f95 100644 --- a/docs/module-CommonUtils.html +++ b/docs/module-CommonUtils.html @@ -5062,7 +5062,7 @@
Returns:

diff --git a/docs/module-ItemGenerator.html b/docs/module-ItemGenerator.html index 1dbb3aec..7b2be570 100644 --- a/docs/module-ItemGenerator.html +++ b/docs/module-ItemGenerator.html @@ -1442,7 +1442,7 @@
Returns:

diff --git a/docs/module-TestRunner.html b/docs/module-TestRunner.html index 508b7b31..3c77572b 100644 --- a/docs/module-TestRunner.html +++ b/docs/module-TestRunner.html @@ -651,7 +651,7 @@

Run
- Generated by JSDoc 3.5.5 on Thu Mar 21 2019 15:41:07 GMT-0500 (-05) using the Minami theme. + Generated by JSDoc 3.5.5 on Thu Mar 21 2019 20:05:44 GMT-0500 (-05) using the Minami theme.
diff --git a/docs/module-rooibosh.html b/docs/module-rooibosh.html index ea2e4af1..2ce7bf82 100644 --- a/docs/module-rooibosh.html +++ b/docs/module-rooibosh.html @@ -273,7 +273,7 @@
Parameters:

- Generated by JSDoc 3.5.5 on Thu Mar 21 2019 15:41:07 GMT-0500 (-05) using the Minami theme. + Generated by JSDoc 3.5.5 on Thu Mar 21 2019 20:05:44 GMT-0500 (-05) using the Minami theme.
diff --git a/frameworkTests/source/tests/AssertionTests.brs b/frameworkTests/source/tests/AssertionTests.brs index e4716322..6eba2846 100644 --- a/frameworkTests/source/tests/AssertionTests.brs +++ b/frameworkTests/source/tests/AssertionTests.brs @@ -341,8 +341,11 @@ function Simp_expect_multiValues() end function +'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +'@It tests expect with overloaded expectOnce +'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -'@Test can set up multi expects on same method +'@Test simple test function Simp_expect_multiExpect_success() obj = {} arg1 = "arg1" @@ -370,9 +373,9 @@ function Simp_expect_multiExpect_success() m.currentResult.Reset() m.AssertFalse(isFail) - end function + '@Test can set up multi expects on same method - one invocation with any args function Simp_expect_multiExpect_success_oneCallsArgsNotTracked() obj = {} @@ -547,6 +550,73 @@ function Simp_expect_multiExpect_fail(call1, call2, call3) m.currentResult.Reset() m.AssertTrue(isFail) +end function + +'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +'@It tests overloaded expectOnce on different objects +'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +'@Test success +function Simp_expect_multiExpect_differentOnj_success() + obj = {} + obj2 = {} + arg1 = "arg1" + arg2 = "arg2" + arg3 = "arg3" + result1 = 1 + result2 = 2 + result3 = 3 + + m.expectOnce(obj, "mockMethod", [arg1], result1, true) + m.expectOnce(obj, "mockMethod", [arg2], result2, true) + m.expectOnce(obj2, "mockMethod", [arg3], result3, true) + + result = obj.mockMethod(arg1) + m.AssertEqual(result, result1) + + result = obj.mockMethod(arg2) + m.AssertEqual(result, result2) + + result = obj2.mockMethod(arg3) + m.AssertEqual(result, result3) + + m.assertMocks() + isFail = m.currentResult.isFail + + m.currentResult.Reset() + m.AssertFalse(isFail) + +end function + +'@Test fail to match +function Simp_expect_multiExpect_differentOnj_fail() + obj = {} + obj2 = {} + arg1 = "arg1" + arg2 = "arg2" + arg3 = "arg3" + result1 = 1 + result2 = 2 + result3 = 3 + + m.expectOnce(obj, "mockMethod", [arg1], result1, true) + m.expectOnce(obj, "mockMethod", [arg2], result2, true) + m.expectOnce(obj2, "mockMethod", [arg3], result3, true) + + result = obj.mockMethod(arg1) + m.AssertEqual(result, result1) + + result = obj.mockMethod(arg2) + m.AssertEqual(result, result2) + + result = obj2.mockMethod(arg3) + m.AssertEqual(result, result3) + + m.assertMocks() + isFail = m.currentResult.isFail + + m.currentResult.Reset() + m.AssertFalse(isFail) end function diff --git a/gulpfile.ts b/gulpfile.ts index ee6fa7ac..96ad3cbf 100644 --- a/gulpfile.ts +++ b/gulpfile.ts @@ -85,5 +85,6 @@ export function doc(cb) { } exports.build = series(clean, createDirectories, squash, copyToSamples); -exports.runFrameworkTests = series(exports.build, prepareFrameworkTests, copyToSamples, zipFrameworkTests, deployFrameworkTests) -exports.prePublishFrameworkTests = series(exports.build, prepareFrameworkTests, copyToSamples) \ No newline at end of file +exports.runFrameworkTests = series(exports.build, prepareFrameworkTests, zipFrameworkTests, deployFrameworkTests) +exports.prePublishFrameworkTests = series(exports.build, prepareFrameworkTests) +exports.dist = series(exports.build, doc); \ No newline at end of file diff --git a/samples/example/source/tests/rooibos/rooibosDist.brs b/samples/example/source/tests/rooibos/rooibosDist.brs index 8291ec99..1d8104b4 100644 --- a/samples/example/source/tests/rooibos/rooibosDist.brs +++ b/samples/example/source/tests/rooibos/rooibosDist.brs @@ -906,7 +906,7 @@ function RBS_BTS_Stub(target, methodName, returnValue = invalid, allowNonExistin fake = m.CreateFake(id, target, methodName, 1, invalid, returnValue) m.stubs[id] = fake allowNonExisting = m.allowNonExistingMethodsOnMocks = true or allowNonExistingMethods - isMethodPresent = type(target[methodName]) = "Function" or type(target[methodName]) = "roFunction" + isMethodPresent = type(target[methodName]) = "Function" or type(target[methodName]) = "roFunction" if (isMethodPresent or allowNonExisting) target[methodName] = m["StubCallback" + id] target.__stubs = m.stubs @@ -935,19 +935,36 @@ function RBS_BTS_Expect(target, methodName, expectedInvocations = 1, expectedArg return m.Mock(target, methodName, expectedInvocations, expectedArgs, returnValue, allowNonExistingMethods) end function function RBS_BTS_Mock(target, methodName, expectedInvocations = 1, expectedArgs = invalid, returnValue = invalid, allowNonExistingMethods = false) as object - if (type(target) <> "roAssociativeArray") - m.Fail("could not create Stub provided target was null") + if not RBS_CMN_IsAssociativeArray(target) + m.Fail("mock args: target was not an AA") + else if not RBS_CMN_IsString(methodName) + m.Fail("mock args: methodName was not a string") + else if not RBS_CMN_IsNumber(expectedInvocations) + m.Fail("mock args: expectedInvocations was not an int") + else if not RBS_CMN_IsArray(expectedArgs) and RBS_CMN_IsValid(expectedArgs) + m.Fail("mock args: expectedArgs was not invalid or an array of args") + else if RBS_CMN_IsUndefined(expectedArgs) + m.Fail("mock args: expectedArgs undefined") + end if + if m.currentResult.isFail + ? "ERROR: "; m.currentResult.messages[m.currentResult.currentAssertIndex - 1] return {} end if if (m.mocks = invalid) m.__mockId = -1 + m.__mockTargetId = -1 m.mocks = {} end if fake = invalid + if not target.doesExist("__rooibosTargetId") + m.__mockTargetId++ + target["__rooibosTargetId"] = m.__mockTargetId + end if for i = 0 to m.__mockId id = stri(i).trim() - if m.mocks[id] <> invalid and m.mocks[id].methodName = methodName - fake = m.mocks[id] + mock = m.mocks[id] + if mock <> invalid and mock.methodName = methodName and mock.target.__rooibosTargetId = target.__rooibosTargetId + fake = mock exit for end if end for @@ -962,8 +979,8 @@ function RBS_BTS_Mock(target, methodName, expectedInvocations = 1, expectedArgs fake = m.CreateFake(id, target, methodName, expectedInvocations, expectedArgs, returnValue) m.mocks[id] = fake 'this will bind it to m allowNonExisting = m.allowNonExistingMethodsOnMocks = true or allowNonExistingMethods - isMethodPresent = type(target[methodName]) = "Function" or type(target[methodName]) = "roFunction" - if (isMethodPresent or allowNonExisting) + isMethodPresent = type(target[methodName]) = "Function" or type(target[methodName]) = "roFunction" + if (isMethodPresent or allowNonExisting) target[methodName] = m["MockCallback" + id] target.__mocks = m.mocks if (not isMethodPresent) @@ -972,7 +989,7 @@ function RBS_BTS_Mock(target, methodName, expectedInvocations = 1, expectedArgs else ? "ERROR - could not create Mock : method not found "; target ; "." ; methodName end if - else + else m.CombineFakes(fake, m.CreateFake(id, target, methodName, expectedInvocations, expectedArgs, returnValue)) end if return fake @@ -1095,141 +1112,141 @@ function RBS_BTS_AssertMocks() as void end for m.CleanMocks() end function - function RBS_BTS_CleanMocks() as void - if m.mocks = invalid return - for each id in m.mocks - mock = m.mocks[id] - mock.target.__mocks = invalid +function RBS_BTS_CleanMocks() as void + if m.mocks = invalid return + for each id in m.mocks + mock = m.mocks[id] + mock.target.__mocks = invalid + end for + m.mocks = invalid + end function + function RBS_BTS_CleanStubs() as void + if m.stubs = invalid return + for each id in m.stubs + stub = m.stubs[id] + stub.target.__stubs = invalid end for - m.mocks = invalid + m.stubs = invalid end function - function RBS_BTS_CleanStubs() as void - if m.stubs = invalid return - for each id in m.stubs - stub = m.stubs[id] - stub.target.__stubs = invalid - end for - m.stubs = invalid - end function - function RBS_BTS_MockFail(methodName, message) as dynamic - if (m.currentResult.isFail) then return m.GetLegacyCompatibleReturnValue(false) ' skip test we already failed - m.currentResult.AddResult("mock failure on '" + methodName + "' : " + message) - return m.GetLegacyCompatibleReturnValue(false) - end function - function RBS_BTS_StubCallback0(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic - fake = m.__Stubs["0"] - return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) - end function - function RBS_BTS_StubCallback1(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic - fake = m.__Stubs["1"] - return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) - end function - function RBS_BTS_StubCallback2(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic - fake = m.__Stubs["2"] - return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) - end function - function RBS_BTS_StubCallback3(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic - fake = m.__Stubs["3"] - return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) - end function - function RBS_BTS_StubCallback4(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic - fake = m.__Stubs["4"] - return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) - end function - function RBS_BTS_StubCallback5(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic - fake = m.__Stubs["5"] - return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) - end function - function RBS_BTS_MockCallback0(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic - fake = m.__mocks["0"] - return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) - end function - function RBS_BTS_MockCallback1(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic - fake = m.__mocks["1"] - return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) - end function - function RBS_BTS_MockCallback2(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic - fake = m.__mocks["2"] - return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) - end function - function RBS_BTS_MockCallback3(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic - fake = m.__mocks["3"] - return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) - end function - function RBS_BTS_MockCallback4(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic - fake = m.__mocks["4"] - return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) - end function - function RBS_BTS_MockCallback5(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic - fake = m.__mocks["5"] - return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) - end function - function RBS_BTS_rodash_pathsAsArray_(path) - pathRE = CreateObject("roRegex", "\[([0-9]+)\]", "i") - segments = [] - if type(path) = "String" or type(path) = "roString" - dottedPath = pathRE.replaceAll(path, ".\1") - stringSegments = dottedPath.tokenize(".") - for each s in stringSegments - if (Asc(s) >= 48) and (Asc(s) <= 57) - segments.push(s.toInt()) - else - segments.push(s) - end if - end for - else if type(path) = "roList" or type(path) = "roArray" - stringPath = "" - for each s in path - stringPath = stringPath + "." + Box(s).toStr() - end for - segments = m.pathAsArray_(stringPath) - else - segments = invalid - end if - return segments - end function - function RBS_BTS_rodash_get_(aa, path, default=invalid) - if type(aa) <> "roAssociativeArray" and type(aa) <> "roArray" and type(aa) <> "roSGNode" then return default - segments = m.pathAsArray_(path) - if (Type(path) = "roInt" or Type(path) = "roInteger" or Type(path) = "Integer") - path = stri(path).trim() - end if - if segments = invalid then return default - result = invalid - while segments.count() > 0 - key = segments.shift() - if (type(key) = "roInteger") 'it's a valid index - if (aa <> invalid and GetInterface(aa, "ifArray") <> invalid) - value = aa[key] - else if (aa <> invalid and GetInterface(aa, "ifSGNodeChildren") <> invalid) - value = aa.getChild(key) - else if (aa <> invalid and GetInterface(aa, "ifAssociativeArray") <> invalid) - key = tostr(key) - if not aa.doesExist(key) - exit while - end if - value = aa.lookup(key) - else - value = invalid - end if + function RBS_BTS_MockFail(methodName, message) as dynamic + if (m.currentResult.isFail) then return m.GetLegacyCompatibleReturnValue(false) ' skip test we already failed + m.currentResult.AddResult("mock failure on '" + methodName + "' : " + message) + return m.GetLegacyCompatibleReturnValue(false) + end function + function RBS_BTS_StubCallback0(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic + fake = m.__Stubs["0"] + return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) + end function + function RBS_BTS_StubCallback1(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic + fake = m.__Stubs["1"] + return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) + end function + function RBS_BTS_StubCallback2(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic + fake = m.__Stubs["2"] + return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) + end function + function RBS_BTS_StubCallback3(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic + fake = m.__Stubs["3"] + return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) + end function + function RBS_BTS_StubCallback4(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic + fake = m.__Stubs["4"] + return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) + end function + function RBS_BTS_StubCallback5(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic + fake = m.__Stubs["5"] + return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) + end function + function RBS_BTS_MockCallback0(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic + fake = m.__mocks["0"] + return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) + end function + function RBS_BTS_MockCallback1(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic + fake = m.__mocks["1"] + return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) + end function + function RBS_BTS_MockCallback2(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic + fake = m.__mocks["2"] + return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) + end function + function RBS_BTS_MockCallback3(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic + fake = m.__mocks["3"] + return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) + end function + function RBS_BTS_MockCallback4(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic + fake = m.__mocks["4"] + return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) + end function + function RBS_BTS_MockCallback5(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic + fake = m.__mocks["5"] + return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) + end function + function RBS_BTS_rodash_pathsAsArray_(path) + pathRE = CreateObject("roRegex", "\[([0-9]+)\]", "i") + segments = [] + if type(path) = "String" or type(path) = "roString" + dottedPath = pathRE.replaceAll(path, ".\1") + stringSegments = dottedPath.tokenize(".") + for each s in stringSegments + if (Asc(s) >= 48) and (Asc(s) <= 57) + segments.push(s.toInt()) else + segments.push(s) + end if + end for + else if type(path) = "roList" or type(path) = "roArray" + stringPath = "" + for each s in path + stringPath = stringPath + "." + Box(s).toStr() + end for + segments = m.pathAsArray_(stringPath) + else + segments = invalid + end if + return segments + end function + function RBS_BTS_rodash_get_(aa, path, default=invalid) + if type(aa) <> "roAssociativeArray" and type(aa) <> "roArray" and type(aa) <> "roSGNode" then return default + segments = m.pathAsArray_(path) + if (Type(path) = "roInt" or Type(path) = "roInteger" or Type(path) = "Integer") + path = stri(path).trim() + end if + if segments = invalid then return default + result = invalid + while segments.count() > 0 + key = segments.shift() + if (type(key) = "roInteger") 'it's a valid index + if (aa <> invalid and GetInterface(aa, "ifArray") <> invalid) + value = aa[key] + else if (aa <> invalid and GetInterface(aa, "ifSGNodeChildren") <> invalid) + value = aa.getChild(key) + else if (aa <> invalid and GetInterface(aa, "ifAssociativeArray") <> invalid) + key = tostr(key) if not aa.doesExist(key) exit while end if value = aa.lookup(key) + else + value = invalid end if - if segments.count() = 0 - result = value - exit while - end if - if type(value) <> "roAssociativeArray" and type(value) <> "roArray" and type(value) <> "roSGNode" + else + if not aa.doesExist(key) exit while end if - aa = value - end while - if result = invalid then return default - return result - end function + value = aa.lookup(key) + end if + if segments.count() = 0 + result = value + exit while + end if + if type(value) <> "roAssociativeArray" and type(value) <> "roArray" and type(value) <> "roSGNode" + exit while + end if + aa = value + end while + if result = invalid then return default + return result + end function function RBS_CMN_IsXmlElement(value ) as boolean return RBS_CMN_IsValid(value) and GetInterface(value, "ifXMLElement") <> invalid end function diff --git a/src/Rooibos_BaseTestSuite.brs b/src/Rooibos_BaseTestSuite.brs index 3fbe1ce6..48f2d463 100644 --- a/src/Rooibos_BaseTestSuite.brs +++ b/src/Rooibos_BaseTestSuite.brs @@ -1415,7 +1415,7 @@ function RBS_BTS_Stub(target, methodName, returnValue = invalid, allowNonExistin fake = m.CreateFake(id, target, methodName, 1, invalid, returnValue) m.stubs[id] = fake allowNonExisting = m.allowNonExistingMethodsOnMocks = true or allowNonExistingMethods - isMethodPresent = type(target[methodName]) = "Function" or type(target[methodName]) = "roFunction" + isMethodPresent = type(target[methodName]) = "Function" or type(target[methodName]) = "roFunction" if (isMethodPresent or allowNonExisting) target[methodName] = m["StubCallback" + id] target.__stubs = m.stubs @@ -1517,31 +1517,48 @@ end function ' * @param {boolean} [allowNonExistingMethods=false] - if true, then rooibos will only warn if the method did not exist prior to faking ' * @returns {Object} - mock that was wired into the real method ' */ - function RBS_BTS_Mock(target, methodName, expectedInvocations = 1, expectedArgs = invalid, returnValue = invalid, allowNonExistingMethods = false) as object - if (type(target) <> "roAssociativeArray") - m.Fail("could not create Stub provided target was null") + 'check params + if not RBS_CMN_IsAssociativeArray(target) + m.Fail("mock args: target was not an AA") + else if not RBS_CMN_IsString(methodName) + m.Fail("mock args: methodName was not a string") + else if not RBS_CMN_IsNumber(expectedInvocations) + m.Fail("mock args: expectedInvocations was not an int") + else if not RBS_CMN_IsArray(expectedArgs) and RBS_CMN_IsValid(expectedArgs) + m.Fail("mock args: expectedArgs was not invalid or an array of args") + else if RBS_CMN_IsUndefined(expectedArgs) + m.Fail("mock args: expectedArgs undefined") + end if + + if m.currentResult.isFail + ? "ERROR: "; m.currentResult.messages[m.currentResult.currentAssertIndex - 1] return {} end if if (m.mocks = invalid) m.__mockId = -1 + m.__mockTargetId = -1 m.mocks = {} end if - + fake = invalid + if not target.doesExist("__rooibosTargetId") + m.__mockTargetId++ + target["__rooibosTargetId"] = m.__mockTargetId + end if 'ascertain if mock already exists for i = 0 to m.__mockId id = stri(i).trim() - if m.mocks[id] <> invalid and m.mocks[id].methodName = methodName - fake = m.mocks[id] + mock = m.mocks[id] + if mock <> invalid and mock.methodName = methodName and mock.target.__rooibosTargetId = target.__rooibosTargetId + fake = mock exit for end if end for if fake = invalid m.__mockId++ id = stri(m.__mockId).trim() - if (m.__mockId > 6) ? "ERROR ONLY 6 MOCKS PER TEST ARE SUPPORTED!! you're on # " ; m.__mockId ? " Method was " ; methodName @@ -1551,8 +1568,8 @@ function RBS_BTS_Mock(target, methodName, expectedInvocations = 1, expectedArgs fake = m.CreateFake(id, target, methodName, expectedInvocations, expectedArgs, returnValue) m.mocks[id] = fake 'this will bind it to m allowNonExisting = m.allowNonExistingMethodsOnMocks = true or allowNonExistingMethods - isMethodPresent = type(target[methodName]) = "Function" or type(target[methodName]) = "roFunction" - if (isMethodPresent or allowNonExisting) + isMethodPresent = type(target[methodName]) = "Function" or type(target[methodName]) = "roFunction" + if (isMethodPresent or allowNonExisting) target[methodName] = m["MockCallback" + id] target.__mocks = m.mocks @@ -1562,7 +1579,7 @@ function RBS_BTS_Mock(target, methodName, expectedInvocations = 1, expectedArgs else ? "ERROR - could not create Mock : method not found "; target ; "." ; methodName end if - else + else m.CombineFakes(fake, m.CreateFake(id, target, methodName, expectedInvocations, expectedArgs, returnValue)) end if return fake @@ -1720,216 +1737,216 @@ function RBS_BTS_AssertMocks() as void m.CleanMocks() end function +' /** +' * @memberof module:BaseTestSuite +' * @name CleanMocks +' * @function +' * @instance +' * @description Cleans up all tracking data associated with mocks +' */ +function RBS_BTS_CleanMocks() as void + if m.mocks = invalid return + for each id in m.mocks + mock = m.mocks[id] + mock.target.__mocks = invalid + end for + m.mocks = invalid + end function + ' /** ' * @memberof module:BaseTestSuite - ' * @name CleanMocks + ' * @name CleanStubs ' * @function ' * @instance - ' * @description Cleans up all tracking data associated with mocks + ' * @description Cleans up all tracking data associated with stubs ' */ - function RBS_BTS_CleanMocks() as void - if m.mocks = invalid return - for each id in m.mocks - mock = m.mocks[id] - mock.target.__mocks = invalid + function RBS_BTS_CleanStubs() as void + if m.stubs = invalid return + for each id in m.stubs + stub = m.stubs[id] + stub.target.__stubs = invalid end for - m.mocks = invalid + m.stubs = invalid end function - ' /** - ' * @memberof module:BaseTestSuite - ' * @name CleanStubs - ' * @function - ' * @instance - ' * @description Cleans up all tracking data associated with stubs - ' */ - function RBS_BTS_CleanStubs() as void - if m.stubs = invalid return - for each id in m.stubs - stub = m.stubs[id] - stub.target.__stubs = invalid - end for - m.stubs = invalid - end function - - function RBS_BTS_MockFail(methodName, message) as dynamic - if (m.currentResult.isFail) then return m.GetLegacyCompatibleReturnValue(false) ' skip test we already failed - m.currentResult.AddResult("mock failure on '" + methodName + "' : " + message) - return m.GetLegacyCompatibleReturnValue(false) - end function + function RBS_BTS_MockFail(methodName, message) as dynamic + if (m.currentResult.isFail) then return m.GetLegacyCompatibleReturnValue(false) ' skip test we already failed + m.currentResult.AddResult("mock failure on '" + methodName + "' : " + message) + return m.GetLegacyCompatibleReturnValue(false) + end function - '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - '++ Fake Stub callback functions - this is required to get scope - '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + '++ Fake Stub callback functions - this is required to get scope + '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - function RBS_BTS_StubCallback0(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic - fake = m.__Stubs["0"] - return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) - end function + function RBS_BTS_StubCallback0(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic + fake = m.__Stubs["0"] + return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) + end function - function RBS_BTS_StubCallback1(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic - fake = m.__Stubs["1"] - return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) - end function + function RBS_BTS_StubCallback1(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic + fake = m.__Stubs["1"] + return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) + end function - function RBS_BTS_StubCallback2(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic - fake = m.__Stubs["2"] - return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) - end function + function RBS_BTS_StubCallback2(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic + fake = m.__Stubs["2"] + return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) + end function - function RBS_BTS_StubCallback3(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic - fake = m.__Stubs["3"] - return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) - end function + function RBS_BTS_StubCallback3(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic + fake = m.__Stubs["3"] + return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) + end function - function RBS_BTS_StubCallback4(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic - fake = m.__Stubs["4"] - return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) - end function + function RBS_BTS_StubCallback4(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic + fake = m.__Stubs["4"] + return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) + end function - function RBS_BTS_StubCallback5(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic - fake = m.__Stubs["5"] - return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) - end function + function RBS_BTS_StubCallback5(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic + fake = m.__Stubs["5"] + return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) + end function - '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - '++ Fake Mock callback functions - this is required to get scope - '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + '++ Fake Mock callback functions - this is required to get scope + '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - function RBS_BTS_MockCallback0(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic - fake = m.__mocks["0"] - return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) - end function + function RBS_BTS_MockCallback0(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic + fake = m.__mocks["0"] + return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) + end function - function RBS_BTS_MockCallback1(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic - fake = m.__mocks["1"] - return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) - end function + function RBS_BTS_MockCallback1(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic + fake = m.__mocks["1"] + return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) + end function - function RBS_BTS_MockCallback2(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic - fake = m.__mocks["2"] - return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) - end function + function RBS_BTS_MockCallback2(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic + fake = m.__mocks["2"] + return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) + end function - function RBS_BTS_MockCallback3(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic - fake = m.__mocks["3"] - return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) - end function + function RBS_BTS_MockCallback3(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic + fake = m.__mocks["3"] + return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) + end function - function RBS_BTS_MockCallback4(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic - fake = m.__mocks["4"] - return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) - end function + function RBS_BTS_MockCallback4(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic + fake = m.__mocks["4"] + return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) + end function - function RBS_BTS_MockCallback5(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic - fake = m.__mocks["5"] - return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) - end function + function RBS_BTS_MockCallback5(arg1=invalid, arg2=invalid, arg3=invalid, arg4=invalid, arg5=invalid, arg6=invalid, arg7=invalid, arg8=invalid, arg9 =invalid)as dynamic + fake = m.__mocks["5"] + return fake.callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) + end function - '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - '++ Utility functions! - '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + '++ Utility functions! + '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + '************************************************************* + '** ripped and adapted from rodash - thanks @veeta! + '** used by get method - consider thsis private + '************************************************************* + function RBS_BTS_rodash_pathsAsArray_(path) + pathRE = CreateObject("roRegex", "\[([0-9]+)\]", "i") + segments = [] + if type(path) = "String" or type(path) = "roString" + dottedPath = pathRE.replaceAll(path, ".\1") + stringSegments = dottedPath.tokenize(".") + for each s in stringSegments + if (Asc(s) >= 48) and (Asc(s) <= 57) + segments.push(s.toInt()) + else + segments.push(s) + end if + end for + else if type(path) = "roList" or type(path) = "roArray" + stringPath = "" + for each s in path + stringPath = stringPath + "." + Box(s).toStr() + end for + segments = m.pathAsArray_(stringPath) + else + segments = invalid + end if + return segments + end function - '************************************************************* - '** ripped and adapted from rodash - thanks @veeta! - '** used by get method - consider thsis private - '************************************************************* - function RBS_BTS_rodash_pathsAsArray_(path) - pathRE = CreateObject("roRegex", "\[([0-9]+)\]", "i") - segments = [] - if type(path) = "String" or type(path) = "roString" - dottedPath = pathRE.replaceAll(path, ".\1") - stringSegments = dottedPath.tokenize(".") - for each s in stringSegments - if (Asc(s) >= 48) and (Asc(s) <= 57) - segments.push(s.toInt()) - else - segments.push(s) - end if - end for - else if type(path) = "roList" or type(path) = "roArray" - stringPath = "" - for each s in path - stringPath = stringPath + "." + Box(s).toStr() - end for - segments = m.pathAsArray_(stringPath) - else - segments = invalid - end if - return segments - end function - - ' /** - ' * @memberof module:BaseTestSuite - ' * @name g - ' * @function - ' * @instance - ' * @description ripped and adapted from rodash - thanks @veeta! - ' * use this method to safely get anything. useful for when unit testing a collection - ' * or something and you're not sure if it's gonna crash! - ' * @param {Dynamic} aa - node, array or assoArray - ' * @param {Dynamic} subset - the items to check for - ' * @param {Dynamic} path -as string path to target field. Can use .0. or [0] index notation e.g. "children.0.title" or "children[0].title" - ' * @returns {dynamic} - matched item, on aa at path - ' */ - - function RBS_BTS_rodash_get_(aa, path, default=invalid) - if type(aa) <> "roAssociativeArray" and type(aa) <> "roArray" and type(aa) <> "roSGNode" then return default - segments = m.pathAsArray_(path) - - if (Type(path) = "roInt" or Type(path) = "roInteger" or Type(path) = "Integer") - path = stri(path).trim() - end if + ' /** + ' * @memberof module:BaseTestSuite + ' * @name g + ' * @function + ' * @instance + ' * @description ripped and adapted from rodash - thanks @veeta! + ' * use this method to safely get anything. useful for when unit testing a collection + ' * or something and you're not sure if it's gonna crash! + ' * @param {Dynamic} aa - node, array or assoArray + ' * @param {Dynamic} subset - the items to check for + ' * @param {Dynamic} path -as string path to target field. Can use .0. or [0] index notation e.g. "children.0.title" or "children[0].title" + ' * @returns {dynamic} - matched item, on aa at path + ' */ + + function RBS_BTS_rodash_get_(aa, path, default=invalid) + if type(aa) <> "roAssociativeArray" and type(aa) <> "roArray" and type(aa) <> "roSGNode" then return default + segments = m.pathAsArray_(path) + + if (Type(path) = "roInt" or Type(path) = "roInteger" or Type(path) = "Integer") + path = stri(path).trim() + end if - if segments = invalid then return default - result = invalid - - while segments.count() > 0 - key = segments.shift() - if (type(key) = "roInteger") 'it's a valid index - if (aa <> invalid and GetInterface(aa, "ifArray") <> invalid) - value = aa[key] - else if (aa <> invalid and GetInterface(aa, "ifSGNodeChildren") <> invalid) - value = aa.getChild(key) - else if (aa <> invalid and GetInterface(aa, "ifAssociativeArray") <> invalid) - key = tostr(key) - if not aa.doesExist(key) - exit while - end if - - value = aa.lookup(key) - else - value = invalid - end if - else + if segments = invalid then return default + result = invalid + + while segments.count() > 0 + key = segments.shift() + if (type(key) = "roInteger") 'it's a valid index + if (aa <> invalid and GetInterface(aa, "ifArray") <> invalid) + value = aa[key] + else if (aa <> invalid and GetInterface(aa, "ifSGNodeChildren") <> invalid) + value = aa.getChild(key) + else if (aa <> invalid and GetInterface(aa, "ifAssociativeArray") <> invalid) + key = tostr(key) if not aa.doesExist(key) exit while end if value = aa.lookup(key) + else + value = invalid end if - - if segments.count() = 0 - result = value + else + if not aa.doesExist(key) exit while end if - if type(value) <> "roAssociativeArray" and type(value) <> "roArray" and type(value) <> "roSGNode" - exit while - end if - aa = value - end while + value = aa.lookup(key) + end if + + if segments.count() = 0 + result = value + exit while + end if + + if type(value) <> "roAssociativeArray" and type(value) <> "roArray" and type(value) <> "roSGNode" + exit while + end if + aa = value + end while - if result = invalid then return default - return result - end function + if result = invalid then return default + return result + end function