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
- 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/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
- 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/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
- 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/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
- 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/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
- 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/index.html b/docs/index.html
index a7ac6c2d..69d3abc5 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -57,7 +57,7 @@
- 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-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:
- 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-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:
- 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-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:
- 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-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