Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
X
xblock-drag-and-drop-v2
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
OpenEdx
xblock-drag-and-drop-v2
Commits
9e32e448
Commit
9e32e448
authored
Jan 18, 2016
by
Braden MacDonald
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Basic size/layout integration tests for desktop
parent
87eb855e
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
85 additions
and
58 deletions
+85
-58
drag_and_drop_v2/public/css/drag_and_drop.css
+1
-1
tests/integration/test_sizing.py
+84
-57
No files found.
drag_and_drop_v2/public/css/drag_and_drop.css
View file @
9e32e448
...
@@ -64,7 +64,7 @@
...
@@ -64,7 +64,7 @@
display
:
inline-block
;
display
:
inline-block
;
width
:
auto
;
width
:
auto
;
min-width
:
4em
;
min-width
:
4em
;
max-width
:
calc
(
100%
/
3
-
1%
-
1%
-
20px
)
;
max-width
:
30%
;
border
:
1px
solid
transparent
;
border
:
1px
solid
transparent
;
border-radius
:
3px
;
border-radius
:
3px
;
box-sizing
:
border-box
;
box-sizing
:
border-box
;
...
...
tests/integration/test_sizing.py
View file @
9e32e448
...
@@ -2,6 +2,7 @@ from __future__ import division
...
@@ -2,6 +2,7 @@ from __future__ import division
import
base64
import
base64
from
collections
import
namedtuple
from
collections
import
namedtuple
import
os.path
import
os.path
from
selenium.webdriver.common.keys
import
Keys
from
xblockutils.resources
import
ResourceLoader
from
xblockutils.resources
import
ResourceLoader
...
@@ -20,13 +21,16 @@ def _svg_to_data_uri(path):
...
@@ -20,13 +21,16 @@ def _svg_to_data_uri(path):
Expectation
=
namedtuple
(
'Expectation'
,
[
Expectation
=
namedtuple
(
'Expectation'
,
[
'item_id'
,
'zone_id'
,
'width_percent'
,
'wh_ratio'
,
'item_id'
,
'zone_id'
,
'width_percent'
,
# we expect this item to have this width relative to its container (item bank or image target)
'fixed_width_percent'
,
# we expect this item to have this width (always relative to the target image)
])
])
Expectation
.
__new__
.
__defaults__
=
(
None
,)
*
len
(
Expectation
.
_fields
)
# pylint: disable=protected-access
Expectation
.
__new__
.
__defaults__
=
(
None
,)
*
len
(
Expectation
.
_fields
)
# pylint: disable=protected-access
ZONE_33
=
"Zone 1/3"
# Title of top zone in each image used in these tests (33% width)
ZONE_33
=
"Zone 1/3"
# Title of top zone in each image used in these tests (33% width)
ZONE_50
=
"Zone 50
%
"
ZONE_50
=
"Zone 50
%
"
ZONE_75
=
"Zone 75
%
"
ZONE_75
=
"Zone 75
%
"
AUTO_MAX_WIDTH
=
29
# Maximum width (as % of the parent container) for items with automatic sizing
AUTO_MAX_WIDTH
=
30
# Maximum width (as % of the parent container) for items with automatic sizing
class
SizingTests
(
InteractionTestBase
,
BaseIntegrationTest
):
class
SizingTests
(
InteractionTestBase
,
BaseIntegrationTest
):
...
@@ -68,72 +72,95 @@ class SizingTests(InteractionTestBase, BaseIntegrationTest):
...
@@ -68,72 +72,95 @@ class SizingTests(InteractionTestBase, BaseIntegrationTest):
return
"<vertical_demo>{}
\n
{}</vertical_demo>"
.
format
(
upper_block
,
lower_block
)
return
"<vertical_demo>{}
\n
{}</vertical_demo>"
.
format
(
upper_block
,
lower_block
)
DESKTOP_EXPECTATIONS
=
[
# The text 'Auto' with no fixed size specified should be 5-20% wide
Expectation
(
item_id
=
0
,
zone_id
=
ZONE_33
,
width_percent
=
[
5
,
20
]),
# The long text with no fixed size specified should be wrapped at the maximum width
Expectation
(
item_id
=
1
,
zone_id
=
ZONE_33
,
width_percent
=
AUTO_MAX_WIDTH
),
# The text items that specify specific widths as a percentage of the background image:
Expectation
(
item_id
=
2
,
zone_id
=
ZONE_33
,
fixed_width_percent
=
33.3
),
Expectation
(
item_id
=
3
,
zone_id
=
ZONE_50
,
fixed_width_percent
=
50
),
Expectation
(
item_id
=
4
,
zone_id
=
ZONE_75
,
fixed_width_percent
=
75
),
# A 400x300 image with automatic sizing should be constrained to the maximum width
Expectation
(
item_id
=
5
,
zone_id
=
ZONE_50
,
width_percent
=
AUTO_MAX_WIDTH
),
# A 200x200 image with automatic sizing
Expectation
(
item_id
=
6
,
zone_id
=
ZONE_50
,
width_percent
=
[
25
,
30
]),
# A 400x300 image with a specified width of 50%
Expectation
(
item_id
=
7
,
zone_id
=
ZONE_50
,
fixed_width_percent
=
50
),
# A 200x200 image with a specified width of 50%
Expectation
(
item_id
=
8
,
zone_id
=
ZONE_50
,
fixed_width_percent
=
50
),
]
def
test_wide_image
(
self
):
def
test_wide_image
(
self
):
expectations
=
[
""" Test the upper, larger, wide image in a desktop-sized window """
# The text 'Auto' with no fixed size specified should be 5-20% wide
self
.
_check_sizes
(
0
,
self
.
DESKTOP_EXPECTATIONS
)
Expectation
(
item_id
=
0
,
zone_id
=
ZONE_33
,
width_percent
=
[
5
,
20
]),
# The long text with no fixed size specified should be wrapped at the maximum width
def
test_square_image
(
self
):
Expectation
(
item_id
=
1
,
zone_id
=
ZONE_33
,
width_percent
=
AUTO_MAX_WIDTH
),
""" Test the lower, smaller, square image in a desktop-sized window """
# The text items that specify specific widths as a percentage of the background image:
self
.
_check_sizes
(
1
,
self
.
DESKTOP_EXPECTATIONS
,
expected_img_width
=
500
)
Expectation
(
item_id
=
2
,
zone_id
=
ZONE_33
,
width_percent
=
33.3
),
Expectation
(
item_id
=
3
,
zone_id
=
ZONE_33
,
width_percent
=
50
),
def
_check_width
(
self
,
item_description
,
item
,
container_width
,
expected_percent
):
Expectation
(
item_id
=
4
,
zone_id
=
ZONE_33
,
width_percent
=
75
),
"""
]
Check that item 'item' has a width that is approximately the specified percentage
self
.
_check_sizes
(
0
,
expectations
)
of container_width, or if expected_percent is a pair of numbers, that it is within
that range.
def
_check_sizes
(
self
,
block_index
,
expectations
):
"""
width_percent
=
item
.
size
[
"width"
]
/
container_width
*
100
if
isinstance
(
expected_percent
,
(
list
,
tuple
)):
min_expected
,
max_expected
=
expected_percent
msg
=
"{} should have width of {}
% -
{}
%
. Actual: {:.2f}
%
"
.
format
(
item_description
,
min_expected
,
max_expected
,
width_percent
)
self
.
assertGreaterEqual
(
width_percent
,
min_expected
,
msg
)
self
.
assertLessEqual
(
width_percent
,
max_expected
,
msg
)
else
:
self
.
assertAlmostEqual
(
width_percent
,
expected_percent
,
delta
=
1
,
msg
=
"{} should have width of ~{}
%
(+/- 1
%
). Actual: {:.2f}
%
"
.
format
(
item_description
,
expected_percent
,
width_percent
)
)
def
_check_sizes
(
self
,
block_index
,
expectations
,
expected_img_width
=
755
,
is_desktop
=
True
):
""" Test the actual dimensions that each draggable has, in the bank and when placed """
""" Test the actual dimensions that each draggable has, in the bank and when placed """
# Check assumptions - the container wrapping this XBlock should be 770px wide
# Check assumptions - the container wrapping this XBlock should be 770px wide
self
.
_switch_to_block
(
block_index
)
self
.
_switch_to_block
(
block_index
)
self
.
assertEqual
(
self
.
_page
.
size
[
"width"
],
770
)
# self._page is the .xblock--drag-and-drop div
target_img
=
self
.
_page
.
find_element_by_css_selector
(
'.target-img'
)
target_img
=
self
.
_page
.
find_element_by_css_selector
(
'.target-img'
)
target_img_width
=
target_img
.
size
[
"width"
]
target_img_width
=
target_img
.
size
[
"width"
]
self
.
assertEqual
(
target_img_width
,
755
)
item_bank
=
self
.
_page
.
find_element_by_css_selector
(
'.item-bank'
)
item_bank
=
self
.
_page
.
find_element_by_css_selector
(
'.item-bank'
)
item_bank_width
=
item_bank
.
size
[
"width"
]
item_bank_width
=
item_bank
.
size
[
"width"
]
self
.
assertEqual
(
item_bank_width
,
755
)
# Test each element, before it is placed.
if
is_desktop
:
# If using a desktop-sized window, we can know the exact dimensions of various containers:
self
.
assertEqual
(
self
.
_page
.
size
[
"width"
],
770
)
# self._page is the .xblock--drag-and-drop div
self
.
assertEqual
(
target_img_width
,
expected_img_width
)
self
.
assertEqual
(
item_bank_width
,
755
)
# Test each element, before it is placed (while it is in the item bank).
for
expect
in
expectations
:
for
expect
in
expectations
:
item_unplaced
=
self
.
_get_item_by_value
(
expect
.
item_id
)
if
expect
.
width_percent
is
not
None
:
if
expect
.
width_percent
is
not
None
:
width_percent
=
item_unplaced
.
size
[
"width"
]
/
item_bank_width
*
100
self
.
_check_width
(
if
isinstance
(
expect
.
width_percent
,
list
):
item_description
=
"Unplaced item {}"
.
format
(
expect
.
item_id
),
min_expected
,
max_expected
=
expect
.
width_percent
item
=
self
.
_get_unplaced_item_by_value
(
expect
.
item_id
),
msg
=
"Unplaced item {} should have width of {}
% -
{}
%
. Actual: {:.2f}
%
"
.
format
(
container_width
=
item_bank_width
,
expect
.
item_id
,
min_expected
,
max_expected
,
width_percent
expected_percent
=
expect
.
width_percent
,
)
)
self
.
assertGreaterEqual
(
width_percent
,
min_expected
,
msg
)
if
expect
.
fixed_width_percent
is
not
None
:
self
.
assertLessEqual
(
width_percent
,
max_expected
,
msg
)
self
.
_check_width
(
else
:
item_description
=
"Unplaced item {} with fixed width"
.
format
(
expect
.
item_id
),
self
.
assertAlmostEqual
(
item
=
self
.
_get_unplaced_item_by_value
(
expect
.
item_id
),
width_percent
,
expect
.
width_percent
,
delta
=
1
,
container_width
=
target_img_width
,
msg
=
"Unplaced item {} should have width of ~{}
%
(+/- 1
%
). Actual: {:.2f}
%
"
.
format
(
expected_percent
=
expect
.
fixed_width_percent
,
expect
.
item_id
,
expect
.
width_percent
,
width_percent
)
)
)
# Test each element, after it it placed.
# Test each element, after it it placed.
for
expect
in
expectations
:
for
expect
in
expectations
:
self
.
place_item
(
expect
.
item_id
,
expect
.
zone_id
)
self
.
place_item
(
expect
.
item_id
,
expect
.
zone_id
,
action_key
=
Keys
.
RETURN
)
item_placed
=
self
.
_get_placed_item_by_value
(
expect
.
item_id
)
expected_width_percent
=
expect
.
fixed_width_percent
or
expect
.
width_percent
if
expected_width_percent
is
not
None
:
if
expect
.
width_percent
is
not
None
:
self
.
_check_width
(
width_percent
=
item_placed
.
size
[
"width"
]
/
target_img_width
*
100
item_description
=
"Placed item {}"
.
format
(
expect
.
item_id
),
if
isinstance
(
expect
.
width_percent
,
list
):
item
=
self
.
_get_placed_item_by_value
(
expect
.
item_id
),
min_expected
,
max_expected
=
expect
.
width_percent
container_width
=
target_img_width
,
msg
=
"Placed item {} should have width of {}
% -
{}
%
. Actual: {:.2f}
%
"
.
format
(
expected_percent
=
expected_width_percent
,
expect
.
item_id
,
min_expected
,
max_expected
,
width_percent
)
)
self
.
assertGreaterEqual
(
width_percent
,
min_expected
,
msg
)
self
.
assertLessEqual
(
width_percent
,
max_expected
,
msg
)
else
:
self
.
assertAlmostEqual
(
width_percent
,
expect
.
width_percent
,
delta
=
1
,
msg
=
"Placed item {} should have width of ~{}
%
(+/- 1
%
). Actual: {:.2f}
%
"
.
format
(
expect
.
item_id
,
expect
.
width_percent
,
width_percent
)
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment