Commit b1894db8 by Chris Rossi

Update tests.

parent 3504026c
......@@ -80,14 +80,10 @@ class JSMEResponse(responsetypes.LoncapaResponse):
def get_answers(self):
elements = self.xml.xpath("./answer")
if elements:
answer = elements[0].text.strip()
else:
answer = ''
answer = elements[0].text.strip()
return {self.answer_id: answer}
def get_score(self, student_answers):
graded_answer = json.loads(
student_answers[self.answer_id].strip())['answer']
return CorrectMap(self.answer_id, graded_answer)
......@@ -15,11 +15,14 @@ class JSMEInputTests(unittest.TestCase):
Test JSMEInput
"""
xml = etree.fromstring("""
<jsdraw id="foo">
Some molfile
Testing
1 2 3
</jsdraw>
<jsme id="foo">
<initial-state>
Some molfile
Testing
1 2 3
</initial-state>
<answer>foo</answer>
</jsme>
""")
def test_setup(self):
......@@ -30,8 +33,19 @@ class JSMEInputTests(unittest.TestCase):
obj = JSMEInput(system, self.xml, {})
obj.setup()
value = json.loads(obj.value)
self.assertEqual(value['answer'], '')
self.assertEqual(value['state'], u'Some molfile\n Testing\n 1 2 3\n')
state = json.loads(value['state'])
self.assertEqual(state['answer'], 'foo')
self.assertEqual(state['state'], u'Some molfile\n Testing\n 1 2 3\n')
def test_setup_noanswer(self):
"""
Test that molfile data is extracted properly from XML.
"""
system = mock.Mock()
xml = etree.fromstring('<jsme id="foo"></jsme>')
with self.assertRaises(Exception) as context:
JSMEInput(system, xml, {})
self.assertTrue("Must provide an answer." in str(context.exception))
def test_setup_blank_molfile_with_whitespace(self):
"""
......@@ -39,10 +53,15 @@ class JSMEInputTests(unittest.TestCase):
parsed.
"""
system = mock.Mock()
xml = etree.fromstring('<jsdraw id="foo"> </jsdraw>')
xml = etree.fromstring(
'<jsme id="foo"><initial-state> </initial-state>'
'<answer>foo</answer></jsme>')
obj = JSMEInput(system, xml, {})
obj.setup()
self.assertEqual(obj.value, '')
value = json.loads(obj.value)
state = json.loads(value['state'])
self.assertEqual(state['answer'], 'foo')
self.assertTrue('state' not in state)
def test_extra_context(self):
"""
......@@ -52,18 +71,18 @@ class JSMEInputTests(unittest.TestCase):
obj = JSMEInput(system, self.xml, {})
obj.setup()
self.assertEqual(obj._extra_context(), {
'set_statefn': 'setMolfile',
'set_statefn': 'setState',
'height': '350',
'html_file': '/static/jsdraw_frame.html',
'get_statefn': 'getMolfile',
'gradefn': 'getSmiles',
'html_file': '/static/jsme_frame.html',
'get_statefn': 'getState',
'gradefn': 'getGrade',
'jsinput_loader': '/static/js/capa/src/jsinput.js',
'saved_state': '{"answer": "", "state": "Some molfile\\n '
'Testing\\n 1 2 3\\n"}',
'saved_state': '{"answer": "", "state": "{\\"answer\\": \\"foo\\",'
' \\"state\\": \\"Some molfile\\\\n Testing\\\\n '
'1 2 3\\\\n\\"}"}',
'width': '700',
'params': None,
'jschannel_loader': '/static/js/capa/src/jschannel.js',
'sop': None})
'jschannel_loader': '/static/js/capa/src/jschannel.js'})
class JSMEResponseTests(unittest.TestCase):
......@@ -71,30 +90,26 @@ class JSMEResponseTests(unittest.TestCase):
Test JSMEResponse
"""
xml = etree.fromstring("""
<jsdrawresponse>
<jsmeresponse>
Foo
<answer>One</answer>
<answer>Two</answer>
</jsdrawresponse>
</jsmeresponse>
""")
def test_setup_response(self):
def test_get_answers(self):
"""
Test method `setup_response`.
Test method `check_string`.
"""
system = mock.Mock()
input_fields = [JSMEInputTests.xml]
obj = JSMEResponse(self.xml, input_fields, {}, system)
obj.setup_response()
self.assertEqual(obj.correct_answer, ['One', 'Two'])
self.assertEqual(obj.get_answers(), {'foo': 'One'})
def test_check_string(self):
"""
Test method `check_string`.
"""
def test_get_score(self):
system = mock.Mock()
input_fields = [JSMEInputTests.xml]
obj = JSMEResponse(self.xml, input_fields, {}, system)
self.assertTrue(obj.check_string(['One', 'Two'], '{"answer": "One"}'))
self.assertFalse(
obj.check_string(['One', 'Two'], '{"answer": "Three"}'))
student_answers = {'foo': json.dumps({'answer': 'bar'})}
score = obj.get_score(student_answers)
self.assertEqual(score['foo']['correctness'], 'bar')
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