158 lines
5.2 KiB
Python
158 lines
5.2 KiB
Python
#!/usr/bin/env python3
|
|
import os, shutil
|
|
|
|
target_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + "/compute-kind-widget-generated"
|
|
|
|
props_grouped = [
|
|
[
|
|
u"background-color",
|
|
u"background-image",
|
|
],
|
|
[
|
|
u"background-attachment",
|
|
u"background-position",
|
|
u"background-clip",
|
|
u"background-origin",
|
|
u"background-size",
|
|
],
|
|
[
|
|
u"border-top-color",
|
|
u"border-right-color",
|
|
u"border-bottom-color",
|
|
u"border-left-color",
|
|
],
|
|
[
|
|
u"border-top-style",
|
|
u"border-right-style",
|
|
u"border-bottom-style",
|
|
u"border-left-style",
|
|
],
|
|
[
|
|
u"border-top-width",
|
|
u"border-right-width",
|
|
u"border-bottom-width",
|
|
u"border-left-width",
|
|
],
|
|
[
|
|
u"border-block-start-color",
|
|
u"border-block-end-color",
|
|
u"border-inline-start-color",
|
|
u"border-inline-end-color",
|
|
],
|
|
[
|
|
u"border-block-start-style",
|
|
u"border-block-end-style",
|
|
u"border-inline-start-style",
|
|
u"border-inline-end-style",
|
|
],
|
|
[
|
|
u"border-block-start-width",
|
|
u"border-block-end-width",
|
|
u"border-inline-start-width",
|
|
u"border-inline-end-width",
|
|
],
|
|
[
|
|
u"border-image-source",
|
|
u"border-image-slice",
|
|
u"border-image-width",
|
|
u"border-image-outset",
|
|
u"border-image-repeat",
|
|
],
|
|
[
|
|
u"border-top-left-radius",
|
|
u"border-top-right-radius",
|
|
u"border-bottom-right-radius",
|
|
u"border-bottom-left-radius",
|
|
u"border-start-start-radius",
|
|
u"border-start-end-radius",
|
|
u"border-end-start-radius",
|
|
u"border-end-end-radius",
|
|
],
|
|
]
|
|
|
|
els = [
|
|
[u'link', u'<a id="link">a</a>'],
|
|
[u'button', u'<button id="button">button</button>'],
|
|
[u'input-button', u'<input id="button-input" type="button" value="input-button">'],
|
|
[u'input-submit', u'<input id="submit-input" type="submit" value="input-submit">'],
|
|
[u'input-reset', u'<input id="reset-input" type="reset" value="input-reset">'],
|
|
[u'input-text', u'<input id="text-input" type="text" value="input-text">'],
|
|
[u'input-search-text', u'<input id="search-text-input" type="search" value="input-search-text">'],
|
|
[u'input-search', u'<input id="search-input" type="search" value="input-search">'],
|
|
[u'range', u'<input id="range-input" type="range">'],
|
|
[u'checkbox-input', u'<input id="checkbox-input" type="checkbox">'],
|
|
[u'radio-input', u'<input id="radio-input" type="radio">'],
|
|
[u'color-input', u'<input id="color-input" type="color">'],
|
|
[u'textarea', u'<textarea id="textarea">textarea</textarea>'],
|
|
[u'select-listbox', u'<select multiple id="select-listbox"><option>select-listbox</option></select>'],
|
|
[u'select-dropdown-box', u'<select id="select-dropdown-box"><option>select-dropdown-box</option></select>'],
|
|
[u'select-menulist-button', u'<select id="select-menulist-button"><option>select-menulist-button</option></select>'],
|
|
[u'meter', u'<meter id="meter" value=0.5></meter>'],
|
|
[u'progress', u'<progress id="progress" value=0.5></progress>'],
|
|
]
|
|
|
|
all_els = ""
|
|
for el_id, el_markup in els:
|
|
all_els += el_markup + "\n "
|
|
all_els = all_els.rstrip()
|
|
|
|
template = u"""<!-- DO NOT EDIT. This file has been generated. Source:
|
|
../tools/build-compute-kind-widget-fallback-props.py
|
|
-->
|
|
<!DOCTYPE html>
|
|
<meta charset="utf-8">
|
|
<title>CSS Basic User Interface Test: Compute kind of widget: {props} maybe disables native appearance for {el_id}</title>
|
|
<link rel="help" href="https://drafts.csswg.org/css-ui-4/#appearance-disabling-properties">
|
|
<link rel="help" href="https://html.spec.whatwg.org/#widgets">
|
|
<meta name="assert" content="appropriate widget is used when props includes {props}.">
|
|
<link rel="match" href="../compute-kind-widget-fallback-{el_id}-ref.html">
|
|
<style>
|
|
#container {{ width: 500px; }}
|
|
/* NOTE: This rule is only used in the search-text-input tests: */
|
|
#container > #search-text-input {{ appearance: textfield; }}
|
|
/* NOTE: This rule is only used in the select-menulist-button tests: */
|
|
#container > #select-menulist-button {{ appearance: none; appearance: menulist-button; }}
|
|
</style>
|
|
|
|
<div id="container">
|
|
{el_markup}
|
|
</div>
|
|
|
|
<script>
|
|
// Set author-level CSS that matches UA style, but don't use the 'revert' value.
|
|
const elements = document.querySelectorAll('#container > *');
|
|
const props = "{props}".split(",");
|
|
for (const el of elements) {{
|
|
for (const prop of props) {{
|
|
el.style.setProperty(prop, getComputedStyle(el).getPropertyValue(prop));
|
|
}}
|
|
}}
|
|
</script>
|
|
"""
|
|
|
|
# Generate tests
|
|
|
|
# wipe target_dir
|
|
if os.path.isdir(target_dir):
|
|
shutil.rmtree(target_dir)
|
|
|
|
def write_file(path, content):
|
|
path = os.path.join(target_dir, path)
|
|
os.makedirs(os.path.dirname(path), exist_ok=True)
|
|
file = open(os.path.join(target_dir, path), 'w')
|
|
file.write(content)
|
|
file.close()
|
|
|
|
def generate_tests(prop, el_id, el_markup):
|
|
test = template.format(props=prop, el_id=el_id, el_markup=el_markup)
|
|
write_file(f"kind-of-widget-fallback-{el_id}-{prop}-001.html", test)
|
|
|
|
def generate_grouped_tests(group):
|
|
test = template.format(props=",".join(group), el_id="all-elements", el_markup=all_els)
|
|
write_file(f"grouped-kind-of-widget-fallback-{group[0]}-001.html", test)
|
|
|
|
for group in props_grouped:
|
|
generate_grouped_tests(group)
|
|
for prop in group:
|
|
for el_id, el_markup in els:
|
|
generate_tests(prop, el_id, el_markup)
|