removed use_targets flag
This commit is contained in:
@@ -1,11 +1,10 @@
|
||||
""" Grader of drag and drop input.
|
||||
|
||||
Client side behavior: user can drag and drop images from list on base image.
|
||||
Parameter 'use_targets' in xml can control two use cases.
|
||||
|
||||
if use_targets is true (defaut), then json returned from client is:
|
||||
|
||||
Then json returned from client is:
|
||||
{
|
||||
"use_targets": true,
|
||||
"draggable": [
|
||||
{ "image1": "t1" },
|
||||
{ "ant": "t2" },
|
||||
@@ -14,9 +13,8 @@ if use_targets is true (defaut), then json returned from client is:
|
||||
}
|
||||
values are target names.
|
||||
|
||||
If use_targets is false:
|
||||
or:
|
||||
{
|
||||
"use_targets": false,
|
||||
"draggable": [
|
||||
{ "image1": "[10, 20]" },
|
||||
{ "ant": "[30, 40]" },
|
||||
@@ -112,11 +110,8 @@ class DragAndDrop(object):
|
||||
def grade(self):
|
||||
''' Grader user answer.
|
||||
|
||||
If use_targets is True - checks if every draggable isplaced on proper
|
||||
target.
|
||||
|
||||
If use_targets is False - checks if every draggable is placed on proper
|
||||
coordinates within radius of forgiveness (default is 10).
|
||||
Checks if every draggable isplaced on proper target or on proper
|
||||
coordinates within radius of forgiveness (default is 10).
|
||||
|
||||
Returns: bool.
|
||||
'''
|
||||
@@ -260,7 +255,6 @@ class DragAndDrop(object):
|
||||
correct_answer = tmp
|
||||
|
||||
user_answer = json.loads(user_answer)
|
||||
self.use_targets = user_answer.get('use_targets')
|
||||
|
||||
# check if we have draggables that are not in correct answer:
|
||||
self.excess_draggables = {}
|
||||
@@ -295,12 +289,12 @@ def grade(user_input, correct_answer):
|
||||
Args:
|
||||
user_input: json. Format::
|
||||
|
||||
{"use_targets": false, "draggables":
|
||||
{ "draggables":
|
||||
[{"1": [10, 10]}, {"name_with_icon": [20, 20]}]}'
|
||||
|
||||
or
|
||||
|
||||
{"use_targets": true, "draggables": [{"1": "t1"}, \
|
||||
{"draggables": [{"1": "t1"}, \
|
||||
{"name_with_icon": "t2"}]}
|
||||
|
||||
correct_answer: dict or list.
|
||||
|
||||
@@ -41,73 +41,72 @@ class Test_PositionsCompare(unittest.TestCase):
|
||||
class Test_DragAndDrop_Grade(unittest.TestCase):
|
||||
|
||||
def test_targets_true(self):
|
||||
user_input = '{"use_targets": true, "draggables": [{"1": "t1"}, \
|
||||
user_input = '{"draggables": [{"1": "t1"}, \
|
||||
{"name_with_icon": "t2"}]}'
|
||||
correct_answer = {'1': 't1', 'name_with_icon': 't2'}
|
||||
self.assertTrue(draganddrop.grade(user_input, correct_answer))
|
||||
|
||||
def test_targets_false(self):
|
||||
user_input = '{"use_targets": true, "draggables": [{"1": "t1"}, \
|
||||
user_input = '{"draggables": [{"1": "t1"}, \
|
||||
{"name_with_icon": "t2"}]}'
|
||||
correct_answer = {'1': 't3', 'name_with_icon': 't2'}
|
||||
self.assertFalse(draganddrop.grade(user_input, correct_answer))
|
||||
|
||||
def test_multiple_images_per_target_true(self):
|
||||
user_input = '{"use_targets": true, \
|
||||
user_input = '{\
|
||||
"draggables": [{"1": "t1"}, {"name_with_icon": "t1"}]}'
|
||||
correct_answer = {'1': 't1', 'name_with_icon': 't1'}
|
||||
self.assertTrue(draganddrop.grade(user_input, correct_answer))
|
||||
|
||||
def test_multiple_images_per_target_false(self):
|
||||
user_input = '{"use_targets": true, \
|
||||
user_input = '{\
|
||||
"draggables": [{"1": "t1"}, {"name_with_icon": "t1"}]}'
|
||||
correct_answer = {'1': 't2', 'name_with_icon': 't1'}
|
||||
self.assertFalse(draganddrop.grade(user_input, correct_answer))
|
||||
|
||||
def test_targets_and_positions(self):
|
||||
user_input = '{"use_targets": true, "draggables": [{"1": [10,10]}, \
|
||||
user_input = '{"draggables": [{"1": [10,10]}, \
|
||||
{"name_with_icon": [[10,10],4]}]}'
|
||||
correct_answer = {'1': [10, 10], 'name_with_icon': [[10, 10], 4]}
|
||||
self.assertFalse(draganddrop.grade(user_input, correct_answer))
|
||||
|
||||
def test_position_and_targets(self):
|
||||
user_input = '{"use_targets": false, \
|
||||
"draggables": [{"1": "t1"}, {"name_with_icon": "t2"}]}'
|
||||
user_input = '{"draggables": [{"1": "t1"}, {"name_with_icon": "t2"}]}'
|
||||
correct_answer = {'1': 't1', 'name_with_icon': 't2'}
|
||||
self.assertTrue(draganddrop.grade(user_input, correct_answer))
|
||||
|
||||
def test_positions_exact(self):
|
||||
user_input = '{"use_targets": false, "draggables": \
|
||||
user_input = '{"draggables": \
|
||||
[{"1": [10, 10]}, {"name_with_icon": [20, 20]}]}'
|
||||
correct_answer = {'1': [10, 10], 'name_with_icon': [20, 20]}
|
||||
self.assertTrue(draganddrop.grade(user_input, correct_answer))
|
||||
|
||||
def test_positions_false(self):
|
||||
user_input = '{"use_targets": false, "draggables": \
|
||||
user_input = '{"draggables": \
|
||||
[{"1": [10, 10]}, {"name_with_icon": [20, 20]}]}'
|
||||
correct_answer = {'1': [25, 25], 'name_with_icon': [20, 20]}
|
||||
self.assertFalse(draganddrop.grade(user_input, correct_answer))
|
||||
|
||||
def test_positions_true_in_radius(self):
|
||||
user_input = '{"use_targets": false, "draggables": \
|
||||
user_input = '{"draggables": \
|
||||
[{"1": [10, 10]}, {"name_with_icon": [20, 20]}]}'
|
||||
correct_answer = {'1': [14, 14], 'name_with_icon': [20, 20]}
|
||||
self.assertTrue(draganddrop.grade(user_input, correct_answer))
|
||||
|
||||
def test_positions_true_in_manual_radius(self):
|
||||
user_input = '{"use_targets": false, "draggables": \
|
||||
user_input = '{"draggables": \
|
||||
[{"1": [10, 10]}, {"name_with_icon": [20, 20]}]}'
|
||||
correct_answer = {'1': [[40, 10], 30], 'name_with_icon': [20, 20]}
|
||||
self.assertTrue(draganddrop.grade(user_input, correct_answer))
|
||||
|
||||
def test_positions_false_in_manual_radius(self):
|
||||
user_input = '{"use_targets": false, "draggables": \
|
||||
user_input = '{"draggables": \
|
||||
[{"1": [10, 10]}, {"name_with_icon": [20, 20]}]}'
|
||||
correct_answer = {'1': [[40, 10], 29], 'name_with_icon': [20, 20]}
|
||||
self.assertFalse(draganddrop.grade(user_input, correct_answer))
|
||||
|
||||
def test_correct_answer_not_has_key_from_user_answer(self):
|
||||
user_input = '{"use_targets": true, "draggables": [{"1": "t1"}, \
|
||||
user_input = '{"draggables": [{"1": "t1"}, \
|
||||
{"name_with_icon": "t2"}]}'
|
||||
correct_answer = {'3': 't3', 'name_with_icon': 't2'}
|
||||
self.assertFalse(draganddrop.grade(user_input, correct_answer))
|
||||
@@ -116,14 +115,14 @@ class Test_DragAndDrop_Grade(unittest.TestCase):
|
||||
"""Draggables can be places anywhere on base image.
|
||||
Place grass in the middle of the image and ant in the
|
||||
right upper corner."""
|
||||
user_input = '{"use_targets": false, "draggables": \
|
||||
user_input = '{"draggables": \
|
||||
[{"ant":[610.5,57.449951171875]},{"grass":[322.5,199.449951171875]}]}'
|
||||
correct_answer = {'grass': [[300, 200], 200], 'ant': [[500, 0], 200]}
|
||||
self.assertTrue(draganddrop.grade(user_input, correct_answer))
|
||||
|
||||
def test_lcao_correct(self):
|
||||
"""Describe carbon molecule in LCAO-MO"""
|
||||
user_input = '{"use_targets":true,"draggables":[{"1":"s_left"}, \
|
||||
user_input = '{"draggables":[{"1":"s_left"}, \
|
||||
{"5":"s_right"},{"4":"s_sigma"},{"6":"s_sigma_star"},{"7":"p_left_1"}, \
|
||||
{"8":"p_left_2"},{"10":"p_right_1"},{"9":"p_right_2"}, \
|
||||
{"2":"p_pi_1"},{"3":"p_pi_2"},{"11":"s_sigma_name"}, \
|
||||
@@ -162,7 +161,7 @@ class Test_DragAndDrop_Grade(unittest.TestCase):
|
||||
|
||||
def test_lcao_extra_element_incorrect(self):
|
||||
"""Describe carbon molecule in LCAO-MO"""
|
||||
user_input = '{"use_targets":true,"draggables":[{"1":"s_left"}, \
|
||||
user_input = '{"draggables":[{"1":"s_left"}, \
|
||||
{"5":"s_right"},{"4":"s_sigma"},{"6":"s_sigma_star"},{"7":"p_left_1"}, \
|
||||
{"8":"p_left_2"},{"17":"p_left_3"},{"10":"p_right_1"},{"9":"p_right_2"}, \
|
||||
{"2":"p_pi_1"},{"3":"p_pi_2"},{"11":"s_sigma_name"}, \
|
||||
@@ -177,7 +176,7 @@ class Test_DragAndDrop_Grade(unittest.TestCase):
|
||||
'rule': 'anyof'
|
||||
}, {
|
||||
'draggables': ['7', '8', '9', '10'],
|
||||
'targets': ['p_left_1', 'p_left_2', 'p_right_1','p_right_2'],
|
||||
'targets': ['p_left_1', 'p_left_2', 'p_right_1', 'p_right_2'],
|
||||
'rule': 'anyof'
|
||||
}, {
|
||||
'draggables': ['11', '12'],
|
||||
@@ -205,7 +204,7 @@ class Test_DragAndDrop_Populate(unittest.TestCase):
|
||||
def test_1(self):
|
||||
dnd = draganddrop.DragAndDrop()
|
||||
correct_answer = {'1': [[40, 10], 29], 'name_with_icon': [20, 20]}
|
||||
user_input = '{"use_targets": false, "draggables": \
|
||||
user_input = '{"draggables": \
|
||||
[{"1": [10, 10]}, {"name_with_icon": [20, 20]}]}'
|
||||
dnd.populate(correct_answer, user_input)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user