#!/usr/bin/env python
#
# Any copyright is dedicated to the Public Domain.
# http://creativecommons.org/publicdomain/zero/1.0/
#
# Generates HTML test files with permutations for frame tree hierarchies to
# test page-name breaks.
# These should all have page-name-two-pages-ref.html as their ref case.
#
# The generated tests have the structure of two
elements that will have
# different page name values through various means:
# * Both
elements have different values for the `page` property.
# * One
element has a specified non-default `page` property and the other
# does not.
# * One
element has a specified non-default `page` property and the other
# has `page: auto`.
#
# Additionally, the
elements may be contained in a
element, which may
# also have the `page` property set on it.
import os
import sys
# Test count, used for file numbers
i = 1
# Generate tests that enumerate putting each paragraph element into a div or
# not, and applying the page-name to the div or the paragraph element.
# Data that is used to generate the structure and element attributes for a page.
ALL_DATA_COMBOS = (
{"p_page": True, "use_div": False, "div_page": False},
{"p_page": True, "use_div": True, "div_page": False},
{"p_page": False, "use_div": True, "div_page": True},
)
# Process ALL_DATA_COMBOS to generate data combos for a page with a given name.
def gen_data_combos(name):
combos = [{"p_page": False, "use_div": False, "div_page": False}]
for data in ALL_DATA_COMBOS:
data_copy = data.copy()
data_copy["p_page"] = data["p_page"] and name
data_copy["div_page"] = data["div_page"] and name
combos.append(data_copy)
# Make page: auto versions for parts with empty page values.
for k in ("p_page", "div_page"):
# Only care about div page when there is a div
if k == "div_page" and not data["use_div"]:
continue
if not data[k]:
data_copy_auto = data_copy.copy()
data_copy_auto[k] = "auto"
combos.append(data_copy_auto)
return combos
A_DATA_COMBOS = gen_data_combos("a")
B_DATA_COMBOS = gen_data_combos("b")
def tag(name, page, inner=""):
# Build the opening
open_tag = "<" + name
if page:
open_tag += ' style="page:' + page + '"'
open_tag += ">"
close_tag = "" + name + ">"
return open_tag + inner + close_tag
def generate_page_html(txt, p_page, use_div, div_page):
p = tag("p", p_page, txt)
if use_div:
return tag("div", div_page, p)
return p
# Preamble to all test cases
BEGIN = """\
"""
# Closing tags for all test cases.
END = """
"""
directory = os.path.dirname(sys.argv[0])
def data_has_no_page(d):
return (not d["p_page"] or d["p_page"] == "auto") and (
not d["div_page"] or d["div_page"] == "auto"
)
for a in A_DATA_COMBOS:
for b in B_DATA_COMBOS:
# Test for the case of empty or auto page-names in both data
if data_has_no_page(a) and data_has_no_page(b):
continue
file_name = "page-name-two-page-" + str(i).rjust(3, "0") + ".html"
i += 1
f = open(os.path.join(directory, file_name), "w")
f.write(BEGIN)
f.write(generate_page_html("a", **a))
f.write("\n")
f.write(generate_page_html("b", **b))
f.write(END)
f.close()