mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-04-28 21:07:59 +03:00
Move matchers to different module
This commit is contained in:
parent
9570b29a0a
commit
cbcd4f6acd
4 changed files with 111 additions and 100 deletions
|
@ -6,6 +6,7 @@ local input = require('openmw.input')
|
||||||
local types = require('openmw.types')
|
local types = require('openmw.types')
|
||||||
local nearby = require('openmw.nearby')
|
local nearby = require('openmw.nearby')
|
||||||
local camera = require('openmw.camera')
|
local camera = require('openmw.camera')
|
||||||
|
local matchers = require('matchers')
|
||||||
|
|
||||||
types.Player.setControlSwitch(self, types.Player.CONTROL_SWITCH.Controls, false)
|
types.Player.setControlSwitch(self, types.Player.CONTROL_SWITCH.Controls, false)
|
||||||
types.Player.setControlSwitch(self, types.Player.CONTROL_SWITCH.Fighting, false)
|
types.Player.setControlSwitch(self, types.Player.CONTROL_SWITCH.Fighting, false)
|
||||||
|
@ -113,13 +114,13 @@ testing.registerLocalTest('player rotation',
|
||||||
coroutine.yield()
|
coroutine.yield()
|
||||||
|
|
||||||
local alpha1, gamma1 = self.rotation:getAnglesXZ()
|
local alpha1, gamma1 = self.rotation:getAnglesXZ()
|
||||||
testing.expectThat(alpha1, testing.isNotNan(), 'Alpha rotation in XZ convention is nan')
|
testing.expectThat(alpha1, matchers.isNotNan(), 'Alpha rotation in XZ convention is nan')
|
||||||
testing.expectThat(gamma1, testing.isNotNan(), 'Gamma rotation in XZ convention is nan')
|
testing.expectThat(gamma1, matchers.isNotNan(), 'Gamma rotation in XZ convention is nan')
|
||||||
|
|
||||||
local alpha2, beta2, gamma2 = self.rotation:getAnglesZYX()
|
local alpha2, beta2, gamma2 = self.rotation:getAnglesZYX()
|
||||||
testing.expectThat(alpha2, testing.isNotNan(), 'Alpha rotation in ZYX convention is nan')
|
testing.expectThat(alpha2, matchers.isNotNan(), 'Alpha rotation in ZYX convention is nan')
|
||||||
testing.expectThat(beta2, testing.isNotNan(), 'Beta rotation in ZYX convention is nan')
|
testing.expectThat(beta2, matchers.isNotNan(), 'Beta rotation in ZYX convention is nan')
|
||||||
testing.expectThat(gamma2, testing.isNotNan(), 'Gamma rotation in ZYX convention is nan')
|
testing.expectThat(gamma2, matchers.isNotNan(), 'Gamma rotation in ZYX convention is nan')
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
|
79
scripts/data/integration_tests/testing_util/matchers.lua
Normal file
79
scripts/data/integration_tests/testing_util/matchers.lua
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
local module = {}
|
||||||
|
|
||||||
|
---
|
||||||
|
-- Matcher verifying that distance between given value and expected is not greater than maxDistance.
|
||||||
|
-- @function elementsAreArray
|
||||||
|
-- @param expected#vector.
|
||||||
|
-- @usage
|
||||||
|
-- expectThat(util.vector2(0, 0), closeToVector(util.vector2(0, 1), 1))
|
||||||
|
function module.closeToVector(expected, maxDistance)
|
||||||
|
return function(actual)
|
||||||
|
local distance = (expected - actual):length()
|
||||||
|
if distance <= maxDistance then
|
||||||
|
return ''
|
||||||
|
end
|
||||||
|
return string.format('%s is too far from expected %s: %s > %s', actual, expected, distance, maxDistance)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
---
|
||||||
|
-- Matcher verifying that given value is an array each element of which matches elements of expected.
|
||||||
|
-- @function elementsAreArray
|
||||||
|
-- @param expected#array of values or matcher functions.
|
||||||
|
-- @usage
|
||||||
|
-- local t = {42, 13}
|
||||||
|
-- local matcher = function(actual)
|
||||||
|
-- if actual ~= 42 then
|
||||||
|
-- return string.format('%s is not 42', actual)
|
||||||
|
-- end
|
||||||
|
-- return ''
|
||||||
|
-- end
|
||||||
|
-- expectThat({42, 13}, elementsAreArray({matcher, 13}))
|
||||||
|
function module.elementsAreArray(expected)
|
||||||
|
local expected_matchers = {}
|
||||||
|
for i, v in ipairs(expected) do
|
||||||
|
if type(v) == 'function' then
|
||||||
|
expected_matchers[i] = v
|
||||||
|
else
|
||||||
|
expected_matchers[i] = function (other)
|
||||||
|
if expected[i].__eq(expected[i], other) then
|
||||||
|
return ''
|
||||||
|
end
|
||||||
|
return string.format('%s element %s does no match expected: %s', i, other, expected[i])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return function(actual)
|
||||||
|
if #actual < #expected_matchers then
|
||||||
|
return string.format('number of elements is less than expected: %s < %s', #actual, #expected_matchers)
|
||||||
|
end
|
||||||
|
local message = ''
|
||||||
|
for i, v in ipairs(actual) do
|
||||||
|
if i > #expected_matchers then
|
||||||
|
message = string.format('%s\n%s element is out of expected range: %s', message, i, #expected_matchers)
|
||||||
|
break
|
||||||
|
end
|
||||||
|
local match_message = expected_matchers[i](v)
|
||||||
|
if match_message ~= '' then
|
||||||
|
message = string.format('%s\n%s', message, match_message)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return message
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
---
|
||||||
|
-- Matcher verifying that given number is not a nan.
|
||||||
|
-- @function isNotNan
|
||||||
|
-- @usage
|
||||||
|
-- expectThat(value, isNotNan())
|
||||||
|
function module.isNotNan()
|
||||||
|
return function(actual)
|
||||||
|
if actual ~= actual then
|
||||||
|
return 'actual value is nan, expected to be not nan'
|
||||||
|
end
|
||||||
|
return ''
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return module
|
|
@ -158,76 +158,6 @@ function M.expectNotEqual(v1, v2, msg)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function M.closeToVector(expected, maxDistance)
|
|
||||||
return function(actual)
|
|
||||||
local distance = (expected - actual):length()
|
|
||||||
if distance <= maxDistance then
|
|
||||||
return ''
|
|
||||||
end
|
|
||||||
return string.format('%s is too far from expected %s: %s > %s', actual, expected, distance, maxDistance)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
---
|
|
||||||
-- Matcher verifying that given value is an array each element of which matches elements of expected.
|
|
||||||
-- @function elementsAreArray
|
|
||||||
-- @param expected#array of values or matcher functions.
|
|
||||||
-- @usage
|
|
||||||
-- local t = {42, 13}
|
|
||||||
-- local matcher = function(actual)
|
|
||||||
-- if actual ~= 42 then
|
|
||||||
-- return string.format('%s is not 42', actual)
|
|
||||||
-- end
|
|
||||||
-- return ''
|
|
||||||
-- end
|
|
||||||
-- expectThat({42, 13}, elementsAreArray({matcher, 13}))
|
|
||||||
function M.elementsAreArray(expected)
|
|
||||||
local expected_matchers = {}
|
|
||||||
for i, v in ipairs(expected) do
|
|
||||||
if type(v) == 'function' then
|
|
||||||
expected_matchers[i] = v
|
|
||||||
else
|
|
||||||
expected_matchers[i] = function (other)
|
|
||||||
if expected[i].__eq(expected[i], other) then
|
|
||||||
return ''
|
|
||||||
end
|
|
||||||
return string.format('%s element %s does no match expected: %s', i, other, expected[i])
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return function(actual)
|
|
||||||
if #actual < #expected_matchers then
|
|
||||||
return string.format('number of elements is less than expected: %s < %s', #actual, #expected_matchers)
|
|
||||||
end
|
|
||||||
local message = ''
|
|
||||||
for i, v in ipairs(actual) do
|
|
||||||
if i > #expected_matchers then
|
|
||||||
message = string.format('%s\n%s element is out of expected range: %s', message, i, #expected_matchers)
|
|
||||||
break
|
|
||||||
end
|
|
||||||
local match_message = expected_matchers[i](v)
|
|
||||||
if match_message ~= '' then
|
|
||||||
message = string.format('%s\n%s', message, match_message)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return message
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
---
|
|
||||||
-- Matcher verifying that given number is not a nan.
|
|
||||||
-- @function isNotNan
|
|
||||||
-- @usage
|
|
||||||
-- expectThat(value, isNotNan())
|
|
||||||
function M.isNotNan(expected)
|
|
||||||
return function(actual)
|
|
||||||
if actual ~= actual then
|
|
||||||
return 'actual value is nan, expected to be not nan'
|
|
||||||
end
|
|
||||||
return ''
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
---
|
---
|
||||||
-- Verifies that given value matches provided matcher.
|
-- Verifies that given value matches provided matcher.
|
||||||
-- @function expectThat
|
-- @function expectThat
|
||||||
|
|
|
@ -5,6 +5,7 @@ local testing = require('testing_util')
|
||||||
local util = require('openmw.util')
|
local util = require('openmw.util')
|
||||||
local types = require('openmw.types')
|
local types = require('openmw.types')
|
||||||
local nearby = require('openmw.nearby')
|
local nearby = require('openmw.nearby')
|
||||||
|
local matchers = require('matchers')
|
||||||
|
|
||||||
types.Player.setControlSwitch(self, types.Player.CONTROL_SWITCH.Fighting, false)
|
types.Player.setControlSwitch(self, types.Player.CONTROL_SWITCH.Fighting, false)
|
||||||
types.Player.setControlSwitch(self, types.Player.CONTROL_SWITCH.Jumping, false)
|
types.Player.setControlSwitch(self, types.Player.CONTROL_SWITCH.Jumping, false)
|
||||||
|
@ -45,33 +46,33 @@ testing.registerLocalTest('Guard in Imperial Prison Ship should find path (#7241
|
||||||
testing.expectLessOrEqual((util.vector2(path[#path].x, path[#path].y) - util.vector2(dst.x, dst.y)):length(), 1, 'Last path point x, y')
|
testing.expectLessOrEqual((util.vector2(path[#path].x, path[#path].y) - util.vector2(dst.x, dst.y)):length(), 1, 'Last path point x, y')
|
||||||
testing.expectLessOrEqual(path[#path].z - dst.z, 20, 'Last path point z')
|
testing.expectLessOrEqual(path[#path].z - dst.z, 20, 'Last path point z')
|
||||||
if agentBounds.shapeType == nearby.COLLISION_SHAPE_TYPE.Aabb then
|
if agentBounds.shapeType == nearby.COLLISION_SHAPE_TYPE.Aabb then
|
||||||
testing.expectThat(path, testing.elementsAreArray({
|
testing.expectThat(path, matchers.elementsAreArray({
|
||||||
testing.closeToVector(util.vector3(34.29737091064453125, 806.3817138671875, 112.76610565185546875), 1e-1),
|
matchers.closeToVector(util.vector3(34.29737091064453125, 806.3817138671875, 112.76610565185546875), 1e-1),
|
||||||
testing.closeToVector(util.vector3(15, 1102, 112.2945709228515625), 1e-1),
|
matchers.closeToVector(util.vector3(15, 1102, 112.2945709228515625), 1e-1),
|
||||||
testing.closeToVector(util.vector3(-112, 1110, 112.2945709228515625), 1e-1),
|
matchers.closeToVector(util.vector3(-112, 1110, 112.2945709228515625), 1e-1),
|
||||||
testing.closeToVector(util.vector3(-118, 1393, 112.2945709228515625), 1e-1),
|
matchers.closeToVector(util.vector3(-118, 1393, 112.2945709228515625), 1e-1),
|
||||||
testing.closeToVector(util.vector3(-67.99993896484375, 1421.2000732421875, 112.2945709228515625), 1e-1),
|
matchers.closeToVector(util.vector3(-67.99993896484375, 1421.2000732421875, 112.2945709228515625), 1e-1),
|
||||||
testing.closeToVector(util.vector3(-33.999935150146484375, 1414.4000244140625, 112.2945709228515625), 1e-1),
|
matchers.closeToVector(util.vector3(-33.999935150146484375, 1414.4000244140625, 112.2945709228515625), 1e-1),
|
||||||
testing.closeToVector(util.vector3(-6.79993534088134765625, 1380.4000244140625, 85.094573974609375), 1e-1),
|
matchers.closeToVector(util.vector3(-6.79993534088134765625, 1380.4000244140625, 85.094573974609375), 1e-1),
|
||||||
testing.closeToVector(util.vector3(79, 724, -104.83390045166015625), 1e-1),
|
matchers.closeToVector(util.vector3(79, 724, -104.83390045166015625), 1e-1),
|
||||||
testing.closeToVector(util.vector3(84, 290.000030517578125, -104.83390045166015625), 1e-1),
|
matchers.closeToVector(util.vector3(84, 290.000030517578125, -104.83390045166015625), 1e-1),
|
||||||
testing.closeToVector(util.vector3(83.552001953125, 42.26399993896484375, -104.58989715576171875), 1e-1),
|
matchers.closeToVector(util.vector3(83.552001953125, 42.26399993896484375, -104.58989715576171875), 1e-1),
|
||||||
testing.closeToVector(util.vector3(89, -105, -98.72841644287109375), 1e-1),
|
matchers.closeToVector(util.vector3(89, -105, -98.72841644287109375), 1e-1),
|
||||||
testing.closeToVector(util.vector3(90, -90, -99.7056884765625), 1e-1),
|
matchers.closeToVector(util.vector3(90, -90, -99.7056884765625), 1e-1),
|
||||||
}))
|
}))
|
||||||
elseif agentBounds.shapeType == nearby.COLLISION_SHAPE_TYPE.Cylinder then
|
elseif agentBounds.shapeType == nearby.COLLISION_SHAPE_TYPE.Cylinder then
|
||||||
testing.expectThat(path, testing.elementsAreArray({
|
testing.expectThat(path, matchers.elementsAreArray({
|
||||||
testing.closeToVector(util.vector3(34.29737091064453125, 806.3817138671875, 112.76610565185546875), 1e-1),
|
matchers.closeToVector(util.vector3(34.29737091064453125, 806.3817138671875, 112.76610565185546875), 1e-1),
|
||||||
testing.closeToVector(util.vector3(-13.5999355316162109375, 1060.800048828125, 112.2945709228515625), 1e-1),
|
matchers.closeToVector(util.vector3(-13.5999355316162109375, 1060.800048828125, 112.2945709228515625), 1e-1),
|
||||||
testing.closeToVector(util.vector3(-27.1999359130859375, 1081.2000732421875, 112.2945709228515625), 1e-1),
|
matchers.closeToVector(util.vector3(-27.1999359130859375, 1081.2000732421875, 112.2945709228515625), 1e-1),
|
||||||
testing.closeToVector(util.vector3(-81.59993743896484375, 1128.800048828125, 112.2945709228515625), 1e-1),
|
matchers.closeToVector(util.vector3(-81.59993743896484375, 1128.800048828125, 112.2945709228515625), 1e-1),
|
||||||
testing.closeToVector(util.vector3(-101.99993896484375, 1156.0001220703125, 112.2945709228515625), 1e-1),
|
matchers.closeToVector(util.vector3(-101.99993896484375, 1156.0001220703125, 112.2945709228515625), 1e-1),
|
||||||
testing.closeToVector(util.vector3(-118, 1393, 112.2945709228515625), 1e-1),
|
matchers.closeToVector(util.vector3(-118, 1393, 112.2945709228515625), 1e-1),
|
||||||
testing.closeToVector(util.vector3(7, 1470, 114.73973846435546875), 1e-1),
|
matchers.closeToVector(util.vector3(7, 1470, 114.73973846435546875), 1e-1),
|
||||||
testing.closeToVector(util.vector3(79, 724, -104.83390045166015625), 1e-1),
|
matchers.closeToVector(util.vector3(79, 724, -104.83390045166015625), 1e-1),
|
||||||
testing.closeToVector(util.vector3(84, 290.000030517578125, -104.83390045166015625), 1e-1),
|
matchers.closeToVector(util.vector3(84, 290.000030517578125, -104.83390045166015625), 1e-1),
|
||||||
testing.closeToVector(util.vector3(95, 27, -104.83390045166015625), 1e-1),
|
matchers.closeToVector(util.vector3(95, 27, -104.83390045166015625), 1e-1),
|
||||||
testing.closeToVector(util.vector3(90, -90, -104.83390045166015625), 1e-1),
|
matchers.closeToVector(util.vector3(90, -90, -104.83390045166015625), 1e-1),
|
||||||
}))
|
}))
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue