A search engine for MMP's eASLRB.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
asl-rulebook2/asl_rulebook2/webapp/tests/test_footnotes.py

85 lines
3.1 KiB

""" Test footnotes. """
import lxml.html
from asl_rulebook2.webapp.tests.utils import init_webapp, \
find_children, wait_for, set_stored_msg_marker, get_last_footnote_msg
from asl_rulebook2.webapp.tests.test_search import do_search
# ---------------------------------------------------------------------
def test_footnotes( webdriver, webapp ):
"""Test footnotes."""
# initialize
webapp.control_tests.set_data_dir( "footnotes" )
init_webapp( webapp, webdriver )
# bring up the ruleid's and locate the ruleid links
do_search( "document" )
def remove_brackets( val ):
assert val.startswith( "[" ) and val.endswith( "]" )
return val[1:-1]
ruleid_elems = {
remove_brackets( c.text ): c
for c in find_children( "#search-results .ruleid" )
}
def do_test( ruleid, expected ):
# click on the specified ruleid and wait for the footnote to appear
marker = set_stored_msg_marker( "footnote" )
ruleid_elems[ ruleid ].click()
wait_for( 2, lambda: get_last_footnote_msg() != marker )
# locate the footnote(s)
footnotes = []
root = lxml.html.fragment_fromstring( get_last_footnote_msg() )
if root.attrib["class"] == "footnote":
# this is a single footnote
footnote_elems = [ root ]
def get_content( fnote ):
return fnote.find( "div[@class='content']" ).text
else:
# there are multiple footnotes
footnote_elems = root.findall( "div[@class='footnote']" )
def get_content( fnote ):
return "".join( fnote.xpath( "text()" ) )
# extract content from each footnote
for footnote in footnote_elems:
header = footnote.find( "div[@class='header']" )
footnotes.append( {
"caption": header.find( "span[@class='caption']" ).text,
"footnote_id": remove_brackets( header.find( "span[@class='footnote-id']" ).text ),
"content": get_content( footnote )
} )
assert footnotes == expected
# do the tests (content set 1)
do_test( "1a.1", [ {
"caption": "Alpha (1a.1)", "footnote_id": "X1",
"content": "This footnote is for ruleid 1a.1."
} ] )
do_test( "1a.2", [ {
"caption": "Bravo (1a.2)", "footnote_id": "X2",
"content": "This footnote is for ruleid 1a.2."
} ] )
do_test( "1b.1", [ {
"caption": "Charlie (1b.1)", "footnote_id": "X10",
"content": "This footnote is for ruleid 1b1.1."
}, {
"caption": "Delta (1b.1)", "footnote_id": "X11",
"content": "This footnote is also for ruleid 1b1.1."
} ] )
do_test( "1b.2", [ {
"caption": "1b.2", "footnote_id": "X20",
"content": None
} ] )
# do the tests (content set 2)
do_test( "2.1", [ {
"caption": "Mike (2.1)", "footnote_id": "Y1",
"content": "This footnote is for ruleid 2.1."
} ] )
do_test( "2.2", [ {
"caption": "November (2.2)", "footnote_id": "Y2",
"content": "This footnote is for ruleid 2.2."
} ] )