Commit 6d9fe76d by Victor Shnayder

wip. adding tests, basic refactor

parent dd6d7e99
...@@ -195,29 +195,15 @@ class OptionInput(InputTypeBase): ...@@ -195,29 +195,15 @@ class OptionInput(InputTypeBase):
template = "optioninput.html" template = "optioninput.html"
tags = ['optioninput'] tags = ['optioninput']
def _get_render_context(self): def __init__(self, system, xml, state):
return _optioninput(self.xml, self.value, self.status, self.system.render_template, self.msg) super(OptionInput, self).__init__(system, xml, state)
def optioninput(element, value, status, render_template, msg=''):
context = _optioninput(element, value, status, render_template, msg)
html = render_template("optioninput.html", context)
return etree.XML(html)
def _optioninput(element, value, status, render_template, msg=''):
"""
Select option input type.
Example:
<optioninput options="('Up','Down')" correct="Up"/><text>The location of the sky</text> # Extract the options...
""" options = self.xml.get('options')
eid = element.get('id')
options = element.get('options')
if not options: if not options:
raise Exception( raise Exception(
"[courseware.capa.inputtypes.optioninput] Missing options specification in " "[courseware.capa.inputtypes.optioninput] Missing options specification in "
+ etree.tostring(element)) + etree.tostring(self.xml))
# parse the set of possible options # parse the set of possible options
oset = shlex.shlex(options[1:-1]) oset = shlex.shlex(options[1:-1])
...@@ -226,15 +212,18 @@ def _optioninput(element, value, status, render_template, msg=''): ...@@ -226,15 +212,18 @@ def _optioninput(element, value, status, render_template, msg=''):
oset = [x[1:-1] for x in list(oset)] oset = [x[1:-1] for x in list(oset)]
# make ordered list with (key, value) same # make ordered list with (key, value) same
osetdict = [(oset[x], oset[x]) for x in range(len(oset))] self.osetdict = [(oset[x], oset[x]) for x in range(len(oset))]
# TODO: allow ordering to be randomized # TODO: allow ordering to be randomized
context = {'id': eid, def _get_render_context(self):
'value': value,
'state': status, context = {
'msg': msg, 'id': self.id,
'options': osetdict, 'value': self.value,
'inline': element.get('inline',''), 'state': self.status,
'msg': self.msg,
'options': self.osetdict,
'inline': self.xml.get('inline',''),
} }
return context return context
...@@ -245,7 +234,6 @@ register_input_class(OptionInput) ...@@ -245,7 +234,6 @@ register_input_class(OptionInput)
# TODO: consolidate choicegroup, radiogroup, checkboxgroup after discussion of # TODO: consolidate choicegroup, radiogroup, checkboxgroup after discussion of
# desired semantics. # desired semantics.
# @register_render_function
def choicegroup(element, value, status, render_template, msg=''): def choicegroup(element, value, status, render_template, msg=''):
''' '''
Radio button inputs: multiple choice or true/false Radio button inputs: multiple choice or true/false
......
...@@ -27,14 +27,17 @@ class OptionInputTest(unittest.TestCase): ...@@ -27,14 +27,17 @@ class OptionInputTest(unittest.TestCase):
''' '''
Make sure option inputs work Make sure option inputs work
''' '''
def test_rendering_new(self):
xml = """<optioninput options="('Up','Down')" id="sky_input" correct="Up"/>"""
element = etree.fromstring(xml)
value = 'Down' def test_rendering(self):
status = 'answered' xml_str = """<optioninput options="('Up','Down')" id="sky_input" correct="Up"/>"""
context = inputtypes._optioninput(element, value, status, test_system.render_template) element = etree.fromstring(xml_str)
print 'context: ', context
state = {'value': 'Down',
'id': 'sky_input',
'status': 'answered'}
option_input = inputtypes.OptionInput(system, element, state)
context = option_input._get_render_context()
expected = {'value': 'Down', expected = {'value': 'Down',
'options': [('Up', 'Up'), ('Down', 'Down')], 'options': [('Up', 'Up'), ('Down', 'Down')],
...@@ -45,9 +48,30 @@ class OptionInputTest(unittest.TestCase): ...@@ -45,9 +48,30 @@ class OptionInputTest(unittest.TestCase):
self.assertEqual(context, expected) self.assertEqual(context, expected)
class ChoiceGroupTest(unittest.TestCase):
def test_rendering(self): '''
xml_str = """<optioninput options="('Up','Down')" id="sky_input" correct="Up"/>""" Test choice groups.
'''
def test_mult_choice(self):
xml_str = """
<choicegroup>
<choice correct="false" name="foil1">
<startouttext />This is foil One.<endouttext />
</choice>
<choice correct="false" name="foil2">
<startouttext />This is foil Two.<endouttext />
</choice>
<choice correct="true" name="foil3">
<startouttext />This is foil Three.<endouttext />
</choice>
<choice correct="false" name="foil4">
<startouttext />This is foil Four.<endouttext />
</choice>
<choice correct="false" name="foil5">
<startouttext />This is foil Five.<endouttext />
</choice>
</choicegroup>
"""
element = etree.fromstring(xml_str) element = etree.fromstring(xml_str)
state = {'value': 'Down', state = {'value': 'Down',
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment