Commit 4ed229e8 by Will Daly

Modified StringResponse test to use XML factory and

to check case-insensitivity.
parent 1060ce49
...@@ -374,11 +374,36 @@ class OptionResponseXMLFactory(ResponseXMLFactory): ...@@ -374,11 +374,36 @@ class OptionResponseXMLFactory(ResponseXMLFactory):
class StringResponseXMLFactory(ResponseXMLFactory): class StringResponseXMLFactory(ResponseXMLFactory):
""" Factory for producing <stringresponse> XML """
def create_response_element(self, **kwargs): def create_response_element(self, **kwargs):
raise NotImplemented """ Create a <stringresponse> XML element.
Uses **kwargs:
*answer*: The correct answer (a string) [REQUIRED]
*case_sensitive*: Whether the response is case-sensitive (True/False)
[DEFAULT: True]
"""
# Retrieve the **kwargs
answer = kwargs.get("answer", None)
case_sensitive = kwargs.get("case_sensitive", True)
assert(answer)
# Create the <stringresponse> element
response_element = etree.Element("stringresponse")
# Set the answer attribute
response_element.set("answer", str(answer))
# Set the case sensitivity
response_element.set("type", "cs" if case_sensitive else "ci")
return response_element
def create_input_element(self, **kwargs): def create_input_element(self, **kwargs):
raise NotImplemented return ResponseXMLFactory.textline_input_xml(**kwargs)
class SymbolicResponseXMLFactory(ResponseXMLFactory): class SymbolicResponseXMLFactory(ResponseXMLFactory):
def create_response_element(self, **kwargs): def create_response_element(self, **kwargs):
......
...@@ -283,19 +283,31 @@ class FormulaResponseWithHintTest(unittest.TestCase): ...@@ -283,19 +283,31 @@ class FormulaResponseWithHintTest(unittest.TestCase):
self.assertTrue('You have inverted' in cmap.get_hint('1_2_1')) self.assertTrue('You have inverted' in cmap.get_hint('1_2_1'))
class StringResponseWithHintTest(unittest.TestCase): class StringResponseWithHintTest(ResponseTest):
''' from response_xml_factory import StringResponseXMLFactory
Test String response problem with a hint xml_factory_class = StringResponseXMLFactory
'''
def test_or_grade(self):
problem_file = os.path.dirname(__file__) + "/test_files/stringresponse_with_hint.xml" def test_case_sensitive(self):
test_lcp = lcp.LoncapaProblem(open(problem_file).read(), '1', system=test_system) problem = self.build_problem(answer="Second", case_sensitive=True)
correct_answers = {'1_2_1': 'Michigan'}
test_answers = {'1_2_1': 'Minnesota'} # Exact string should be correct
self.assertEquals(test_lcp.grade_answers(correct_answers).get_correctness('1_2_1'), 'correct') self.assert_grade(problem, "Second", "correct")
cmap = test_lcp.grade_answers(test_answers)
self.assertEquals(cmap.get_correctness('1_2_1'), 'incorrect') # Other strings and the lowercase version of the string are incorrect
self.assertTrue('St. Paul' in cmap.get_hint('1_2_1')) self.assert_grade(problem, "Other String", "incorrect")
self.assert_grade(problem, "second", "incorrect")
def test_case_insensitive(self):
problem = self.build_problem(answer="Second", case_sensitive=False)
# Both versions of the string should be allowed, regardless
# of capitalization
self.assert_grade(problem, "Second", "correct")
self.assert_grade(problem, "second", "correct")
# Other strings are not allowed
self.assert_grade(problem, "Other String", "incorrect")
class CodeResponseTest(unittest.TestCase): class CodeResponseTest(unittest.TestCase):
......
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