Skip to content

Commit 58289ed

Browse files
committed
Implement conditionals tests for YS2
1 parent 9a93c8f commit 58289ed

6 files changed

Lines changed: 95 additions & 14 deletions

File tree

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
id,node,lineNumber,tags

examples/yarn2/conditionals.csv

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
id,text,file,node,lineNumber
2+
line:/Users/sweaver/Git/YarnRunner-Python/examples/yarn2/conditionals.yarn-Start-0,This is a test of conditionals and variables.,/Users/sweaver/Git/YarnRunner-Python/examples/yarn2/conditionals.yarn,Start,3
3+
line:/Users/sweaver/Git/YarnRunner-Python/examples/yarn2/conditionals.yarn-Start-1,"This is a fallback, and should not run.",/Users/sweaver/Git/YarnRunner-Python/examples/yarn2/conditionals.yarn,Start,12
4+
line:/Users/sweaver/Git/YarnRunner-Python/examples/yarn2/conditionals.yarn-var_is_1-2,This node should never be reached.,/Users/sweaver/Git/YarnRunner-Python/examples/yarn2/conditionals.yarn,var_is_1,18
5+
line:/Users/sweaver/Git/YarnRunner-Python/examples/yarn2/conditionals.yarn-var_is_2-3,This node should be reached.,/Users/sweaver/Git/YarnRunner-Python/examples/yarn2/conditionals.yarn,var_is_2,22

examples/yarn2/conditionals.yarn

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
title: Start
2+
---
3+
This is a test of conditionals and variables.
4+
5+
<<set $var to 2>>
6+
7+
<<if $var eq 1>>
8+
<<jump var_is_1>>
9+
<<elseif $var eq 2>>
10+
<<jump var_is_2>>
11+
<<else>>
12+
This is a fallback, and should not run.
13+
<<endif>>
14+
15+
===
16+
title: var_is_1
17+
---
18+
This node should never be reached.
19+
===
20+
title: var_is_2
21+
---
22+
This node should be reached.
23+
===

examples/yarn2/conditionals.yarnc

824 Bytes
Binary file not shown.

tests/test_conditionals.py

Lines changed: 38 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,52 @@
11
import os
22
from .context import YarnRunner
33

4-
compiled_yarn_f = open(os.path.join(os.path.dirname(
4+
compiled_yarn_f1 = open(os.path.join(os.path.dirname(
55
__file__), '../examples/yarn1/conditionals.yarnc'), 'rb')
6-
names_csv_f = open(os.path.join(os.path.dirname(
6+
names_csv_f1 = open(os.path.join(os.path.dirname(
77
__file__), '../examples/yarn1/conditionals.csv'), 'r')
8+
compiled_yarn_f2 = open(os.path.join(os.path.dirname(
9+
__file__), '../examples/yarn2/conditionals.yarnc'), 'rb')
10+
names_csv_f2 = open(os.path.join(os.path.dirname(
11+
__file__), '../examples/yarn2/conditionals.csv'), 'r')
812

9-
runner = YarnRunner(compiled_yarn_f, names_csv_f, autostart=False)
13+
runner1 = YarnRunner(compiled_yarn_f1, names_csv_f1, autostart=False)
14+
runner2 = YarnRunner(compiled_yarn_f2, names_csv_f2, autostart=False)
1015

1116

12-
def test_start_node_text():
13-
runner.debug_program_proto()
14-
runner.resume()
17+
def test_start_node_text1():
18+
runner1.debug_program_proto()
19+
runner1.resume()
1520

16-
assert "This is a test of conditionals and variables." == runner.get_line()
17-
assert runner.has_line()
21+
assert "This is a test of conditionals and variables." == runner1.get_line()
22+
assert runner1.has_line()
1823

1924

20-
def test_conditional_traversal():
21-
choices = runner.get_choices()
25+
def test_start_node_text2():
26+
runner2.debug_program_proto()
27+
runner2.resume()
28+
29+
assert "This is a test of conditionals and variables." == runner2.get_line()
30+
assert runner2.has_line()
31+
32+
33+
def test_conditional_traversal1():
34+
choices = runner1.get_choices()
35+
36+
assert len(choices) == 0
37+
38+
assert "This node should be reached." == runner1.get_line()
39+
assert not runner1.has_line()
40+
assert runner1.finished
41+
assert runner1.current_node == 'var_is_2'
42+
43+
44+
def test_conditional_traversal2():
45+
choices = runner2.get_choices()
2246

2347
assert len(choices) == 0
2448

25-
assert "This node should be reached." == runner.get_line()
26-
assert not runner.has_line()
27-
assert runner.finished
28-
assert runner.current_node == 'var_is_2'
49+
assert "This node should be reached." == runner2.get_line()
50+
assert not runner2.has_line()
51+
assert runner2.finished
52+
assert runner2.current_node == 'var_is_2'

yarnrunner_python/vm_std_lib.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,31 @@
1616
'Xor': (2, lambda p: p[0] ^ p[1]),
1717
'Not': (1, lambda p: not p[0])
1818
}
19+
20+
typeMethods = {
21+
'Boolean': ['EqualTo',
22+
'NotEqualTo',
23+
'And',
24+
'Or',
25+
'Xor',
26+
'Not'],
27+
'Number': ['EqualTo',
28+
'NotEqualTo',
29+
'Add',
30+
'Minus',
31+
'Divide',
32+
'Multiply',
33+
'Modulo',
34+
'UnaryMinus',
35+
'GreaterThan',
36+
'GreaterThanOrEqualTo',
37+
'LessThan',
38+
'LessThanOrEqualTo'],
39+
'String': ['EqualTo',
40+
'NotEqualTo',
41+
'Add']
42+
}
43+
44+
for type, methods in typeMethods.items():
45+
for method in methods:
46+
functions[f'{type}.{method}'] = functions[method]

0 commit comments

Comments
 (0)