forked from DFHack/dfhack
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathorders.lua
More file actions
123 lines (111 loc) · 3.57 KB
/
Copy pathorders.lua
File metadata and controls
123 lines (111 loc) · 3.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
config.mode = 'fortress'
TMP_FILE_NAME = 'tmp-test'
TMP_FILE_PATH = ('dfhack-config/orders/%s.json'):format(TMP_FILE_NAME)
function run_orders_import(file_content)
local f = io.open(TMP_FILE_PATH, 'w')
f:write(file_content)
f:close()
return dfhack.with_finalize(
function()
os.remove(TMP_FILE_PATH)
end,
function()
return dfhack.run_command_silent{'orders', 'import', TMP_FILE_NAME}
end
)
end
function check_import_success(file_content)
local output, result = run_orders_import(file_content)
expect.eq(result, CR_OK)
end
function check_import_fail(file_content, comment, prefix)
comment = comment or ''
local prev_num_orders = #df.global.world.manager_orders
local output, result = run_orders_import(file_content)
expect.eq(result, CR_FAILURE, ('%s: was successful'):format(comment))
if prefix then
expect.true_(output:lower():startswith(prefix), ('%s: "%s" missing "%s"'):format(comment, output, prefix))
end
expect.eq(prev_num_orders, #df.global.world.manager_orders, ('%s: number of manager orders changed'):format(comment))
end
function test.import_empty()
check_import_success('[]')
end
function test.import_non_array()
check_import_fail('{}', 'object', 'invalid')
check_import_fail('null', 'null', 'invalid')
check_import_fail('2', 'number', 'invalid')
end
function test.import_invalid_syntax()
-- for https://github.com/DFHack/dfhack/pull/1770
check_import_fail('', 'empty')
check_import_fail(']', 'missing opening bracket')
check_import_fail([[
[
{
"amount_left" : 0,
"amount_total" : 0,
"frequency" : "OneTime",
"id" : 0,
"is_active" : false,
"is_validated" : true,
"job" : "CustomReaction",
"reaction" : "BRASS_MAKING"
}
]], 'missing closing bracket')
end
function test.import_missing_fields()
check_import_fail('[{}]', 'empty order', 'invalid')
end
function test.import_invalid_id()
-- for https://github.com/DFHack/dfhack/issues/1893
check_import_fail([[
[
{
"amount_left": 0,
"amount_total": 0,
"frequency": "OneTime",
"id": "",
"is_active": false,
"is_validated": false,
"item_category": [
"finished_goods"
],
"job": "EncrustWithGems",
"material": "INORGANIC:AMBER OPAL"
}
]
]], 'string id instead of int', 'error')
end
function test.import_valid_and_invalid_orders()
-- check_import_fail([[
-- [
-- {
-- "amount_left" : 1,
-- "amount_total" : 1,
-- "frequency" : "OneTime",
-- "id" : 0,
-- "is_active" : false,
-- "is_validated" : true,
-- "job" : "ConstructTable",
-- "material" : "INORGANIC:IRON"
-- },
-- {}
-- ]
-- ]], 'empty order after valid order')
check_import_fail([[
[
{},
{
"amount_left" : 1,
"amount_total" : 1,
"frequency" : "OneTime",
"id" : 0,
"is_active" : false,
"is_validated" : true,
"job" : "ConstructTable",
"material" : "INORGANIC:IRON"
}
]
]], 'empty order before valid order')
end