211 lines
3.9 KiB
Python
211 lines
3.9 KiB
Python
import pytest
|
|
|
|
from rolltable import tables
|
|
|
|
fixture_metadata = """
|
|
metadata:
|
|
headers:
|
|
- Header 1
|
|
- Header 2
|
|
- Header 3
|
|
die: 10
|
|
frequencies:
|
|
default:
|
|
Option 1: 0.3
|
|
Option 2: 0.5
|
|
Option 3: 0.2
|
|
nondefault:
|
|
Option 1: 0.0
|
|
Option 2: 0.1
|
|
Option 3: 0.9
|
|
"""
|
|
|
|
fixture_source = """
|
|
Option 1:
|
|
- choice 1: description 1
|
|
- choice 2: description 2
|
|
- choice 3: description 3
|
|
Option 2:
|
|
- choice 1: description 4
|
|
- choice 2: description 5
|
|
- choice 3: description 6
|
|
Option 3:
|
|
- choice 1: description 7
|
|
- choice 2: description 8
|
|
- choice 3: description 9
|
|
"""
|
|
|
|
fixture_one_choice = """
|
|
option 1:
|
|
- choice 1: description 1
|
|
"""
|
|
|
|
fixture_repeated_choices = """
|
|
option 1:
|
|
- choice 1: description 1
|
|
- choice 1: description 1
|
|
- choice 1: description 1
|
|
"""
|
|
|
|
fixture_no_descriptions = """
|
|
metadata:
|
|
headers:
|
|
- option
|
|
- choice
|
|
option 1:
|
|
- choice 1
|
|
"""
|
|
|
|
fixture_combined_A = """
|
|
A1:
|
|
- A choice 1
|
|
- A choice 2
|
|
- A choice 3
|
|
A2:
|
|
- A choice 4
|
|
- A choice 5
|
|
- A choice 6
|
|
A3:
|
|
- A choice 7
|
|
- A choice 8
|
|
- A choice 9
|
|
"""
|
|
|
|
fixture_combined_B = """
|
|
metadata:
|
|
headers:
|
|
- HeaderB
|
|
- HeaderB_Choice
|
|
B1:
|
|
- B choice 1
|
|
B2:
|
|
- B choice 2
|
|
B3:
|
|
- B choice 3
|
|
"""
|
|
|
|
fixture_no_options = """
|
|
metadata:
|
|
headers:
|
|
- headerA
|
|
- headerB
|
|
B1:
|
|
B2:
|
|
B3:
|
|
"""
|
|
|
|
fixture_lists_and_dicts = ["""
|
|
#
|
|
# category one two three four
|
|
# Category foo bar baz quz
|
|
#
|
|
metadata:
|
|
headers:
|
|
- category
|
|
- one
|
|
- two
|
|
- three
|
|
- four
|
|
list:
|
|
- foo:
|
|
- bar
|
|
- baz
|
|
- quz
|
|
""", """
|
|
#
|
|
# category one two three four
|
|
# Category foo bar baz quz
|
|
#
|
|
metadata:
|
|
headers:
|
|
- category
|
|
- one
|
|
- two
|
|
- three
|
|
- four
|
|
dict:
|
|
foo:
|
|
- bar
|
|
- baz
|
|
- quz
|
|
bar:
|
|
- a
|
|
- b
|
|
- c
|
|
"""]
|
|
|
|
|
|
@pytest.mark.parametrize('fixture', fixture_lists_and_dicts)
|
|
def test_lists_and_dicts(fixture):
|
|
t = tables.RollTable([fixture], die=1)
|
|
assert(str(t))
|
|
|
|
|
|
def test_combined_tables():
|
|
combined = tables.RollTable([fixture_combined_A, fixture_combined_B], die=6)
|
|
assert str(combined)
|
|
|
|
|
|
def test_table_end_to_end():
|
|
assert str(tables.RollTable([fixture_source]))
|
|
|
|
|
|
def test_table_end_to_end_with_metadata():
|
|
assert str(tables.RollTable([fixture_metadata + fixture_source]))
|
|
|
|
|
|
def test_table_frequency():
|
|
t = tables.RollTable([fixture_metadata + fixture_source], frequency='nondefault')
|
|
assert t._data[0].frequencies['Option 1'] == 0.0
|
|
assert t._data[0].frequencies['Option 2'] == 0.1
|
|
assert t._data[0].frequencies['Option 3'] == 0.9
|
|
|
|
|
|
def test_one_option():
|
|
t = tables.RollTable([fixture_one_choice], die=1)
|
|
assert t._values == [['option 1', 'choice 1', 'description 1']]
|
|
|
|
|
|
def test_collapsed():
|
|
t = tables.RollTable([fixture_repeated_choices], die=6)
|
|
assert len(list(t.rows)) == 2 # (+1 for headers)
|
|
|
|
|
|
def test_not_collapsed():
|
|
t = tables.RollTable([fixture_repeated_choices], die=6)
|
|
assert len(list(t.expanded_rows)) == 7 # (+1 for headers)
|
|
|
|
|
|
def test_no_descriptions():
|
|
t = tables.RollTable([fixture_no_descriptions], die=1)
|
|
assert 'd1' in str(t)
|
|
assert 'option 1' in str(t)
|
|
|
|
|
|
def test_no_options():
|
|
t = tables.RollTable([fixture_no_options])
|
|
assert str(t)
|
|
|
|
|
|
@pytest.mark.parametrize('table', [
|
|
tables.RollTable([fixture_no_options]),
|
|
tables.RollTable([fixture_one_choice]),
|
|
tables.RollTable([fixture_metadata + fixture_source]),
|
|
tables.RollTable([fixture_source]),
|
|
])
|
|
def test_yaml(table):
|
|
assert table.as_yaml()
|
|
|
|
|
|
def test_text():
|
|
assert repr(tables.RollTable([fixture_no_options]))
|
|
assert repr(tables.RollTable([fixture_one_choice]))
|
|
assert repr(tables.RollTable([fixture_metadata + fixture_source]))
|
|
assert repr(tables.RollTable([fixture_source]))
|
|
|
|
|
|
def test_as_dict():
|
|
source = tables.RollTable([fixture_no_descriptions]).datasources[0]
|
|
ds = source.as_dict()
|
|
assert ds['option 1']['choice'] == 'choice 1'
|