Advertisement
Guest User

Untitled

a guest
Oct 15th, 2023
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 5.08 KB | None | 0 0
  1. Mock = {}
  2. Mock.Any = {}
  3. __scope = function()
  4. isGH = globals.hasIndex("isGH") // use colours if set.
  5. ifGH = function(s)
  6.     if isGH then return s
  7.     return ""
  8. end function
  9. ERR    = ifGH("<color=""red"">")
  10. ERR_E  = ifGH("</color>")
  11. DATA   = ifGH("<color=#bfb360>")
  12. DATA_E = ifGH("</color>")
  13. BARG   = ifGH("<color=#ff4203>")
  14. BARG_E = ifGH("</color>")
  15. FUNC   = ifGH("<b><color=#3644a3>")
  16. FUNC_E = ifGH("</color></b>")
  17. Mock.__mockCall = function(actualParams, funcName)
  18.     if self._expect.len == 0 or funcName != self._expect[0].target then
  19.         s = ERR + "Fatal error, unexpected call to " + FUNC + funcName + FUNC_E + ":" + ERR_E +
  20.             "\n      params: " + DATA + actualParams + DATA_E
  21.         if MINITEST_RUNNING then minitest_print_error(s, true)
  22.         print s
  23.         exit()
  24.     end if
  25.     expected = self._expect.pull
  26.     expectedArgCnt = self._argCnt[expected.target]
  27.     if expectedArgCnt != actualParams.len then
  28.         s = ERR + "Fatal error, wrong argument count:" + ERR_E
  29.         if actualParams.len > 0 then s = s +
  30.             "\n      params: " + DATA + actualParams + DATA_E
  31.         s = "\n    expected: " + DATA + expectedArgCnt + DATA_E + " args" +
  32.             "\n      actual: " + DATA + actualParams.len + DATA_E + "\n args" +
  33.             "\nexpecting function: " + FUNC + expected.target + FUNC_E
  34.         if MINITEST_RUNNING then minitest_print_error(s, true)
  35.         print s
  36.         exit()
  37.     end if
  38.     for i in expected.params.indexes
  39.         if not expected.params[i] == Mock.Any and expected.params[i] != actualParams[i] then
  40.             s = "Error In expected call to " + FUNC + expected.target + FUNC_E + "\n"
  41.             s = s + "    expected args: " + DATA + expected.params + DATA_E + "\n"
  42.             s = s + "      actual args: " + BARG + actualParams + BARG_E
  43.             //s = s + "NOTE: ensure the function name that was actually called matches, too."
  44.             p = @print
  45.             if MINITEST_RUNNING then p = @minitest_print_error
  46.             p s
  47.             break
  48.         end if
  49.     end for
  50.     maybeRet = null
  51.     if @expected.clbk then maybeRet = expected.clbk(actualParams)
  52.     if @expected.retVal == null then return maybeRet
  53.     return @expected.retVal
  54. end function
  55.  
  56. Mock.genFunc = function(paramCount, funcName)
  57.     locals.self = self
  58.     locals.funcName = @funcName
  59.     funcs = []
  60.     f = function()
  61.         return outer.self.__mockCall([], outer.funcName)
  62.     end function
  63.     funcs.push @f
  64.     f = function(a)
  65.         return outer.self.__mockCall([@a], outer.funcName)
  66.     end function
  67.     funcs.push @f
  68.     f = function(a, b)
  69.         return outer.self.__mockCall([@a, @b], outer.funcName)
  70.     end function
  71.     funcs.push @f
  72.     f = function(a, b, c)
  73.         return outer.self.__mockCall([@a, @b, @c], outer.funcName)
  74.     end function
  75.     funcs.push @f
  76.     f = function(a, b, c, d)
  77.         return outer.self.__mockCall([@a, @b, @c, @d], outer.funcName)
  78.     end function
  79.     funcs.push @f
  80.     f = function(a, b, c, d, e)
  81.         return outer.self.__mockCall([@a, @b, @c, @d, @e], outer.funcName)
  82.     end function
  83.     funcs.push @f
  84.     f = function(a, b, c, d, e, f)
  85.         return outer.self.__mockCall([@a, @b, @c, @d, @e, @f], outer.funcName)
  86.     end function
  87.     funcs.push @f
  88.     // Add more as needed.
  89.     return @funcs[paramCount]
  90. end function
  91.  
  92. Mock._addMockFunc = function(kv)
  93.     paramCount = ("" + @kv.value).split(",").len - 1
  94.     self[kv["key"]] = @self.genFunc(paramCount, @kv.key)
  95.     self._argCnt[kv["key"]] = paramCount
  96. end function
  97.  
  98. Mock._addMockData = function(kv)
  99.     self[kv["key"]] = @self.genFunc(0)
  100. end function
  101.  
  102. Mock._build = function(mapToMock, ret)
  103.     for kv in mapToMock
  104.         if @kv.key == "__isa" then
  105.             self._build(kv.value, ret)
  106.         else if @kv.value isa funcRef then
  107.             ret._addMockFunc(kv)
  108.         else
  109.             ret._addMockData(kv)
  110.         end if
  111.     end for
  112.     return ret
  113. end function
  114.  
  115. Mock.define = function(key, paramCount)
  116.     func = @self.genFunc(paramCount, @key)
  117.     self._argCnt[key] = paramCount
  118.     self[key] = @func
  119.     return @func
  120. end function
  121.  
  122. Mock.build = function(mapToMock)
  123.     map = {"__isa": mapToMock, "_expect": [], "_argCnt": {}}
  124.     for kv in self
  125.         map[@kv.key] = @kv.value
  126.     end for
  127.     return self._build(mapToMock, map)
  128. end function
  129.  
  130. Expect = {}
  131.  
  132. Expect.build = function(funcName)
  133.     ret = new Expect
  134.     ret.target = funcName
  135.     ret.params = []
  136.     ret.clbk = null
  137.     ret.retVal = null
  138.     return ret
  139. end function
  140.  
  141. // params should be enclosed in a list[]
  142. // However, a single argument will be converted for you.
  143. Expect.withParams = function(params)
  144.     if not params isa list then params = [params]
  145.     self.params = params
  146.     return self
  147. end function
  148.  
  149. Expect.thenInvoke = function(func)
  150.     self.clbk = @func
  151.     return self
  152. end function
  153.  
  154. Expect.andReturn = function(retVal)
  155.     self.retVal = @retVal
  156.     return self
  157. end function
  158.  
  159. Mock.expectCall = function(funcName)
  160.     ret = Expect.build(funcName)
  161.     self._expect.push(ret)
  162.     return ret
  163. end function
  164. Mock.expectData = @Mock.expectCall
  165.  
  166. Mock.getResult = function()
  167.     if self._expect.len == 0 then return true
  168.     ret = "Error: Unfulfilled call(s):"
  169.     for call in self._expect
  170.         ret = ret + "\n    callee: " + FUNC + call.target + FUNC_E
  171.         if call.params.len > 0 then ret = ret + "\n    params: " + DATA + call.params + DATA_E
  172.     end for
  173.     return ret
  174. end function
  175.  
  176. end function //end __scope
  177. if not globals.hasIndex("MINIMOCK_DEFINED") then __scope()
  178. __scope = null
  179. MINIMOCK_DEFINED = true
  180.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement