Test passes if blue outline touches top left of green outline.
+
x
+
diff --git a/tests/wpt/web-platform-tests/css/tools/README.md b/tests/wpt/web-platform-tests/css/tools/README.md
new file mode 100644
index 00000000000..3679d9fb1fc
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/tools/README.md
@@ -0,0 +1,12 @@
+This directory contains the CSS build system.
+
+It is recommended that it is run with `../build-css-testsuites.sh`, as
+this ensures all dependencies are installed. Note that it is not
+required to build the testsuites to run tests; you can just run tests
+as with any other web-platform-tests tests (see ../../docs/).
+
+The build system is formed of build.py in this directory, the
+w3ctestlib package in w3ctestlib/, and the apiclient package in
+apiclient/apiclient/. Note that apiclient exists as a separate
+upstream project at https://hg.csswg.org/dev/apiclient/, and that
+ideally any changes here should make it upstream.
diff --git a/tests/wpt/web-platform-tests/css/tools/html2xhtml.py b/tests/wpt/web-platform-tests/css/tools/html2xhtml.py
deleted file mode 100755
index 3a9cfa2b844..00000000000
--- a/tests/wpt/web-platform-tests/css/tools/html2xhtml.py
+++ /dev/null
@@ -1,77 +0,0 @@
-#!/usr/bin/python
-
-# This file is licensed under CC Zero
-
-import sys
-import html5lib
-import re
-
-if len(sys.argv) != 3:
- print """! html2xhtml requires two arguments: the filename to read, and the filename to write"""
- exit()
-
-#######################################################################
-# Parse HTML and output XHTML
-
-f = open(sys.argv[1])
-p = html5lib.HTMLParser()
-t = p.parse(f)
-o = html5lib.serializer.serialize(t, format='xhtml')
-f.close()
-
-#######################################################################
-# Clean up the mess left by html5lib
-
-def firstMatch(m): # Python makes s/x(y+)?/z$1/ very difficult
- if m.group(1):
- return m.group(1)
- return ''
-
-# Missing XHTML artifacts
-
-o = re.sub(']+>',
- '',
- o);
-o = re.sub(']+)?>',
- lambda m : '',
- o);
-
-# Fix weird reordering
-
-o = re.sub('',
- lambda m : '',
- o);
-
-# Indentation
-
-o = re.sub(']+)>\n]+)?><',
- lambda m : '\n<',
- o);
-o = re.sub(']+)?><',
- lambda m : '\n<',
- o);
-o = re.sub('<',
- '\n<',
- o);
-o = re.sub(']+)?><',
- lambda m : '\n<',
- o);
-o = re.sub('<',
- '\n<',
- o);
-o = re.sub('$',
- '\n',
- o);
-o = re.sub('\xa0',
- ' ',
- o); # make nbsp visible to people viewing source
-
-#######################################################################
-# Write to file
-
-f = open(sys.argv[2], 'w')
-f.write(o.encode('utf-8'))
-f.close()
diff --git a/tests/wpt/web-platform-tests/css/tools/list-all.pl b/tests/wpt/web-platform-tests/css/tools/list-all.pl
deleted file mode 100755
index 78e630f01de..00000000000
--- a/tests/wpt/web-platform-tests/css/tools/list-all.pl
+++ /dev/null
@@ -1,86 +0,0 @@
-#!/usr/bin/perl
-# Print all files by filename and highlight duplicates
-# Prints in format specified as an argument on the command line:
-# '-txt' -> tab-separated database
-# '-pre' -> linkified tab-separated database using HTML and
-# '-html' -> HTML with tables
-
-use Template;
-
-$top = $ARGV[-1] || '.';
-
-@files = `find $top -type f ! -ipath '*.hg*' ! -ipath '*build-test*' ! -ipath '*selectors3*'`;
-foreach (@files) {
- chomp;
- m!^(?:\./)?((?:[^/]+/)*)([^/]+?)(\.[a-z]+)?$!;
- next if (m!/support/!);
- next if (m!\.css$!);
- next if (m!boland!);
- unless (exists $pairs{$2}) {
- $pairs{$2} = ["$1$2$3"];
- }
- else {
- push @{$pairs{$2}}, "$1$2$3";
- }
-}
-
-my $tt = Template->new({ INCLUDE_PATH => $libroot . '/templates' }) || die $tt->error(), "\n";
-
-# default template
-$tmpl = <<'EOM'
-[%- FOREACH name = pairs.keys.sort %]
-[%- FOREACH path = pairs.$name %]
-[% name %] [% path %]
-[%- END %][% END %]
-EOM
-;
-# linkified version
-if ($ARGV[0] eq '-pre') {
- $tmpl = <<'EOM'
-
-CSS Tests by Filename
-
-[%- FOREACH name = pairs.keys.sort %]
-[%- FOREACH path = pairs.$name %]
-[% name %] [% path %]
-[%- END %][% END %]
-
' >> $2.html
diff --git a/tests/wpt/web-platform-tests/css/tools/make-html.py b/tests/wpt/web-platform-tests/css/tools/make-html.py
deleted file mode 100755
index 3a988610278..00000000000
--- a/tests/wpt/web-platform-tests/css/tools/make-html.py
+++ /dev/null
@@ -1,66 +0,0 @@
-#!/usr/bin/python
-
-# HTMLMake
-# Converts all files of specified extension from XHTML to HTML
-# Written by fantasai
-# Joint copyright 2010 W3C and Microsoft
-# Licensed under BSD 3-Clause:
-
-srcExt = '.xht'
-dstExt = '.htm'
-skipDirs = ('contributors/microsoft/submitted/support', # XXXfixme files should be .xht
- 'incoming', '.svn', 'CVS', '.hg')
-
-import os.path
-from os.path import join, getmtime
-import sys
-import re
-import os
-from w3ctestlib.Sources import XHTMLSource, SourceTree
-
-def xhtml2html(source, dest):
- """Convert XHTML file given by path `source` into HTML file at path `dest`."""
-
- # Parse and serialize
- xs = XHTMLSource(SourceTree(None), source, dest)
- o = xs.serializeHTML()
-
- # Report errors
- if xs.error:
- print >>sys.stderr, "Error parsing XHTML file %s: %s" % (source, xs.error)
-
- # Write
- f = open(dest, 'w')
- f.write(o.encode(xs.encoding, 'xmlcharrefreplace'))
- f.close()
-
-if len(sys.argv) == 3:
- clobber = sys.argv[1] == '--clobber'
- force = sys.argv[1] == '-f'
- root = sys.argv[2]
-elif len(sys.argv) == 2 and (sys.argv[1] != '--clobber' and sys.argv[1] != '-f'):
- clobber = False;
- force = False;
- root = sys.argv[1]
-else:
- print "make-html converts all %s XHTML files to %s HTML files." % (srcExt, dstExt)
- print "Only changed files are converted, unless you specify -f."
- print "To use, specify the root directory of the files you want converted, e.g."
- print " make-html ."
- print "To delete all files with extension %s, specify the --clobber option." % dstExt
- exit()
-
-for root, dirs, files in os.walk(root):
- for skip in skipDirs:
- if skip in dirs:
- dirs.remove(skip)
- for file in files:
- if clobber:
- if file.endswith(dstExt):
- os.remove(join(root, file))
- elif file.endswith(srcExt):
- source = join(root, file)
- dest = join(root, file[0:-1*len(srcExt)] + dstExt)
- if not os.path.exists(dest) or getmtime(source) > getmtime(dest) or force:
- # print "Processing %s" % source
- xhtml2html(source, dest)
diff --git a/tests/wpt/web-platform-tests/css/tools/supportprop.py b/tests/wpt/web-platform-tests/css/tools/supportprop.py
deleted file mode 100755
index 1021b847ffb..00000000000
--- a/tests/wpt/web-platform-tests/css/tools/supportprop.py
+++ /dev/null
@@ -1,156 +0,0 @@
-#!/usr/bin/python
-
-# This file is licensed under CC Zero
-
-import os
-from os.path import join
-import shutil
-import filecmp
-
-# Files to not sync across support/ directories
-fileExcludes = ('README')
-dirExcludes = ('.svn', '.hg', 'CVS')
-# To prevent support files from being propagated into a particular support/
-# directory, add a file named LOCK
-
-def propagate(source, dest, errors):
- """Compare each file and copy from source to destination.
- Do nothing and flag an error if the destination already exists
- but is different. Recurse.
- source and dest are both directory paths.
- errors is a list of 2-element tuples, the first being a
- source filepath and the second a destination filepath,
- of file pairs where the destination isdifferent from
- """
-
- # This directory is locked; don't propagate
- if os.path.exists(join(dest, 'LOCK')): return
-
- # If the source directory doesn't exist return
- if not os.path.exists(source): return
-
- # Get the file and directory lists for source
- children = os.listdir(source)
- for name in children:
- origin = join(source, name)
- copy = join(dest, name)
- if os.path.isfile(origin):
- if name in fileExcludes: continue
- # Copy over the file if it needs copying
- if not os.path.exists(copy): # file missing
- shutil.copy2(origin, copy) # copy it over
- elif not filecmp.cmp(origin, copy): # files differ
- if not filecmp.cmp(origin, copy, True): # contents equal, stats differ
- shutil.copystat(origin, copy) # update stats so they match for next time
- else: # contents differ
- errors.append((origin, copy))
- elif os.path.isdir(origin):
- if name in dirExcludes: continue
- # Duplicate the directory structure and propagate the subtree
- if not os.path.exists(copy):
- os.makedirs(copy)
- propagate(origin, copy, errors)
- if len(children) == 0:
- print "Warn: " + source + " is empty.\n"
-
-def waterfall(parentDir, childDir, errors):
- """Copy down support files from parent support to child.
- parentDir is the parent of the parent support directory.
- childDir is the parent of the current support directory,
- that we should copy into.
- waterfall recurses into childDir's children."""
- assert os.path.exists(join(parentDir, 'support')), join(parentDir, 'support') + " doesn't exist\n"
- if os.path.exists(join(childDir, 'support')):
- propagate(join(parentDir, 'support'), join(childDir, 'support'), errors)
- dirs = os.walk(childDir).next()[1]
- for name in dirs:
- if name == 'support':
- pass
- elif name not in dirExcludes:
- waterfall(childDir, join(childDir, name), errors)
-
-def outline(source, dest, errors):
- """Copy over directory structure and all files under any support/ directories
- source and dest are both directory paths.
- errors is a list of 2-element tuples, the first being a
- source filepath and the second a destination filepath,
- of support file pairs where the destination copy is
- different from the source
- """
- # Get the directory list for source
- dirs = os.walk(source).next()[1]
- # Copy directory structure
- for name in dirs:
- if name in dirExcludes: continue
- origin = join(source, name)
- copy = join(dest, name)
- if not os.path.exists(copy):
- os.mkdirs(copy)
- if name == 'support':
- # Copy support files
- propagate(origin, copy, errors)
- else:
- outline(origin, copy, errors)
-
-def syncSupport(source, dest, errors):
- """For each support directory in dest, propagate the corresponding support
- files from source.
- source and dest are both directory paths.
- errors is a list of 2-element tuples, the first being a
- source filepath and the second a destination filepath,
- of support file pairs where the destination copy is
- different from the source
- """
- # Get the directory list for est
- dirs = os.walk(dest).next()[1]
- # Scan directory structure, building support dirs as necessary
- for name in dirs:
- if name in dirExcludes: continue
- master = join(source, name)
- slave = join(dest, name)
- if name == 'support':
- # Copy support files
- propagate(master, slave, errors)
- else:
- syncSupport(master, slave, errors)
-
-def main():
- # Part I: Propagate support files through approved/
-
- errors = []
- root, dirs, _ = os.walk('.').next()
- if 'approved' in dirs:
- root = join(root, 'approved')
- suites = os.walk(root).next()[1]
- suites = filter(lambda name: name not in dirExcludes, suites)
- for suite in suites:
- waterfall(root, join(root, suite, 'src'), errors)
- else:
- print "Failed to find approved/ directory.\n"
- exit();
-
- # Part II: Propagate test suite support files into contributors/
-
- if 'contributors' in dirs:
- _, contribs, _ = os.walk('contributors').next()
- for contributor in contribs:
- contribRoot = join('contributors', contributor, 'submitted')
- if not os.path.exists(contribRoot): continue # missing submitted folder
- dirs = os.walk(contribRoot).next()[1]
- for dir in dirs:
- # Check if contributor has a top-level directory name matching
- # one of our suites; if so, sync any matching support directories
- if dir in suites:
- suiteRoot = join(root, dir, 'src')
- if os.path.exists(suiteRoot):
- syncSupport(suiteRoot, join(contribRoot, dir), errors)
- else:
- print "Failed to find contributors/ directory.\n"
-
- # Print all errors
-
- for error in errors:
- print "Mismatch: " + error[0] + " vs " + error [1] + " Copy failed.\n"
-
-if __name__ == "__main__":
- main()
diff --git a/tests/wpt/web-platform-tests/css/tools/templates/filename-list.tmpl b/tests/wpt/web-platform-tests/css/tools/templates/filename-list.tmpl
deleted file mode 100644
index fd891c1eee4..00000000000
--- a/tests/wpt/web-platform-tests/css/tools/templates/filename-list.tmpl
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
- CSS Tests by Filename
-
-
-
-
diff --git a/tests/wpt/web-platform-tests/css/tools/travis/LICENSE b/tests/wpt/web-platform-tests/css/tools/travis/LICENSE
deleted file mode 100644
index 4584189af31..00000000000
--- a/tests/wpt/web-platform-tests/css/tools/travis/LICENSE
+++ /dev/null
@@ -1,12 +0,0 @@
-Copyright (c) 2015, Mozilla
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
-
-3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/tools/travis/build.py b/tests/wpt/web-platform-tests/css/tools/travis/build.py
deleted file mode 100644
index 6360630805b..00000000000
--- a/tests/wpt/web-platform-tests/css/tools/travis/build.py
+++ /dev/null
@@ -1,223 +0,0 @@
-import itertools
-import os
-import shutil
-import subprocess
-import sys
-
-import vcs
-
-here = os.path.abspath(os.path.dirname(__file__))
-
-source_dir = os.path.join(here, "..", "..")
-
-remote_built = "https://github.com/jgraham/css-test-built.git"
-built_dir = os.path.join(here, "css-test-built")
-
-local_files = ["manifest", "serve", "serve.py", ".gitmodules", "tools", "resources",
- "config.default.json"]
-
-def get_hgsubstate():
- state = {}
- with open(os.path.join(source_dir, ".hgsubstate"), "r") as f:
- for line in f:
- line = line.strip()
- if not line:
- continue
- revision, path = line.split(" ", 1)
- state[path] = revision
- return state
-
-def fetch_submodules():
- hg = vcs.hg
- orig_dir = os.getcwd()
- state = get_hgsubstate()
- for tool in ["apiclient", "w3ctestlib"]:
- dest_dir = os.path.join(source_dir, "tools", tool)
- repo_path = "tools/" + tool
- if os.path.exists(os.path.join(dest_dir, ".hg")):
- try:
- os.chdir(dest_dir)
- if repo_path in state:
- rev = state[repo_path]
- try:
- hg("update", rev, log_error=False)
- except subprocess.CalledProcessError:
- hg("pull")
- hg("update", rev)
- else:
- hg("pull")
- hg("update")
- finally:
- os.chdir(orig_dir)
- else:
- hg("clone", ("https://hg.csswg.org/dev/%s" % tool), dest_dir)
- try:
- os.chdir(dest_dir)
- if repo_path in state:
- hg("update", state[repo_path])
- else:
- hg("update")
- finally:
- os.chdir(orig_dir)
-
-def update_dist():
- if not os.path.exists(built_dir) or not vcs.is_git_root(built_dir):
- git = vcs.git
- git("clone", "--depth", "1", remote_built, built_dir)
- else:
- git = vcs.bind_to_repo(vcs.git, built_dir)
- git("fetch")
- if "origin/master" in git("branch", "-a"):
- git("checkout", "master")
- git("merge", "--ff-only", "origin/master")
-
- git = vcs.bind_to_repo(vcs.git, built_dir)
- git("config", "user.email", "CssBuildBot@users.noreply.github.com")
- git("config", "user.name", "CSS Build Bot")
- git("submodule", "update", "--init", "--recursive")
-
-def setup_virtualenv():
- virtualenv_path = os.path.join(here, "_virtualenv")
-
- if not os.path.exists(virtualenv_path):
- subprocess.check_call(["virtualenv", virtualenv_path])
-
- activate_path = os.path.join(virtualenv_path, "bin", "activate_this.py")
-
- execfile(activate_path, dict(__file__=activate_path))
-
- subprocess.check_call(["pip", "-q", "install", "mercurial"])
- subprocess.check_call(["pip", "-q", "install", "html5lib==0.9999999"])
- subprocess.check_call(["pip", "-q", "install", "lxml"])
- subprocess.check_call(["pip", "-q", "install", "Template-Python"])
-
-
-def update_to_changeset(changeset):
- git = vcs.bind_to_repo(vcs.git, source_dir)
- git("checkout", changeset)
- apply_build_system_fixes()
-
-def apply_build_system_fixes():
- fixes = [
- "c017547f65e07bdd889736524d47824d032ba2e8",
- "cb4a737a88aa7e2f4e54383c57ffa2dfae093dcf",
- "ec540343a3e729644c8178dbcf6d063dca20d49f",
- ]
- git = vcs.bind_to_repo(vcs.git, source_dir)
- for fix in fixes:
- git("cherry-pick", "--keep-redundant-commits", fix)
-
-def build_tests():
- subprocess.check_call(["python", os.path.join(source_dir, "tools", "build.py")],
- cwd=source_dir)
-
-def remove_current_files():
- for node in os.listdir(built_dir):
- if node.startswith(".git"):
- continue
-
- if node in ("resources", "tools"):
- continue
-
- path = os.path.join(built_dir, node)
- if os.path.isdir(path):
- shutil.rmtree(path)
- else:
- os.remove(path)
-
-def copy_files():
- dist_path = os.path.join(source_dir, "dist")
- for node in os.listdir(dist_path):
- src_path = os.path.join(dist_path, node)
- dest_path = os.path.join(built_dir, node)
- if os.path.isdir(src_path):
- shutil.copytree(src_path, dest_path)
- else:
- shutil.copy2(src_path, dest_path)
-
-def update_git():
- git = vcs.bind_to_repo(vcs.git, built_dir)
- git("add", ".")
-
-def add_changeset(changeset):
- git = vcs.bind_to_repo(vcs.git, built_dir)
-
- dest_path = os.path.join(built_dir, "source_rev")
- with open(dest_path, "w") as f:
- f.write(changeset)
- git("add", os.path.relpath(dest_path, built_dir))
-
-def commit(changeset):
- git = vcs.git
-
- msg = git("log", "-r", changeset, "-n", "1", "--pretty=%B", repo=source_dir)
- msg = "%s\n\nBuild from revision %s" % (msg, changeset)
-
- git("commit", "-m", msg, repo=built_dir)
-
-def get_new_commits():
- git = vcs.bind_to_repo(vcs.git, source_dir)
- commit_path = os.path.join(built_dir, "source_rev")
- with open(commit_path) as f:
- prev_commit = f.read().strip()
-
- if git("rev-parse", "--revs-only", prev_commit).strip() != prev_commit:
- # we don't have prev_commit in current tree, so let's just do what's new
- commit_range = os.environ['TRAVIS_COMMIT_RANGE']
- assert (os.environ["TRAVIS_PULL_REQUEST"] != "false" or
- os.environ["TRAVIS_BRANCH"] != "master")
- else:
- merge_base = git("merge-base", prev_commit, os.environ['TRAVIS_COMMIT']).strip()
- commit_range = "%s..%s" % (merge_base, os.environ['TRAVIS_COMMIT'])
-
- commits = git("log", "--pretty=%H", "-r", commit_range).strip()
- if not commits:
- return []
- return reversed(commits.split("\n"))
-
-def maybe_push():
- if os.environ["TRAVIS_PULL_REQUEST"] != "false":
- return
-
- if os.environ["TRAVIS_BRANCH"] != "master":
- return
-
- git = vcs.bind_to_repo(vcs.git, built_dir)
-
- out = "https://%s@github.com/jgraham/css-test-built.git" % os.environ["TOKEN"]
- git("remote", "add", "out", out, quiet=True)
-
- for i in range(2):
- try:
- git("push", "out", "HEAD:master")
- except subprocess.CalledProcessError:
- if i == 0:
- git("fetch", "origin")
- git("rebase", "origin/master")
- else:
- return
-
- raise Exception("Push failed")
-
-def main():
- setup_virtualenv()
- fetch_submodules()
- update_dist()
- changesets = list(get_new_commits())
- print >> sys.stderr, "Building %d changesets:" % len(changesets)
- print >> sys.stderr, "\n".join(changesets)
- if len(changesets) > 50:
- raise Exception("Building more than 50 changesets, giving up")
-
- for changeset in changesets:
- update_to_changeset(changeset)
- remove_current_files()
- build_tests()
- copy_files()
- update_git()
- add_changeset(changeset)
- commit(changeset)
- maybe_push()
-
-if __name__ == "__main__":
- main()
diff --git a/tests/wpt/web-platform-tests/css/tools/travis/vcs.py b/tests/wpt/web-platform-tests/css/tools/travis/vcs.py
deleted file mode 100644
index 13b2c21dd8a..00000000000
--- a/tests/wpt/web-platform-tests/css/tools/travis/vcs.py
+++ /dev/null
@@ -1,43 +0,0 @@
-import subprocess
-import sys
-from functools import partial
-
-def vcs(bin_name):
- def inner(command, *args, **kwargs):
- repo = kwargs.pop("repo", None)
- log_error = kwargs.pop("log_error", True)
- quiet = kwargs.pop("quiet", False)
- if kwargs:
- raise TypeError, kwargs
-
- args = list(args)
-
- proc_kwargs = {}
- if repo is not None:
- proc_kwargs["cwd"] = repo
-
- command_line = [bin_name, command] + args
- if not quiet:
- print >> sys.stderr, " ".join(command_line[:10])
- try:
- return subprocess.check_output(command_line, stderr=subprocess.STDOUT, **proc_kwargs)
- except subprocess.CalledProcessError as e:
- if log_error:
- print >> sys.stderr, e.output
- raise
- return inner
-
-git = vcs("git")
-hg = vcs("hg")
-
-
-def bind_to_repo(vcs_func, repo):
- return partial(vcs_func, repo=repo)
-
-
-def is_git_root(path):
- try:
- rv = git("rev-parse", "--show-cdup", repo=path)
- except subprocess.CalledProcessError:
- return False
- return rv == "\n"
diff --git a/tests/wpt/web-platform-tests/css/tools/w3ctestlib/templates/index.content.tmpl b/tests/wpt/web-platform-tests/css/tools/w3ctestlib/templates/index.content.tmpl
index 130d0255254..e3bee8aa85b 100644
--- a/tests/wpt/web-platform-tests/css/tools/w3ctestlib/templates/index.content.tmpl
+++ b/tests/wpt/web-platform-tests/css/tools/w3ctestlib/templates/index.content.tmpl
@@ -40,7 +40,12 @@
cover all of [% suites.$suite.spec %]. Your help is welcome in this effort.
[% END %]
The appropriate mailing list for submitting tests and bug reports is
- public-css-testsuite@w3.org.
+ public-css-testsuite@w3.org.
+
+ To report bugs or feedback about a specific test file,
+ search for the filename (without extension) in
+ Web Platform Tests Issues,
+ and file a new issue if necessary with suggested label "wg-css".
More information on the contribution process and test guidelines is
available on the wiki
page.
-[% END %]
\ No newline at end of file
+[% END %]
diff --git a/tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/vertical-scroll-touch-block.html b/tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/vertical-scroll-touch-block.html
new file mode 100644
index 00000000000..4c204055afd
--- /dev/null
+++ b/tests/wpt/web-platform-tests/feature-policy/experimental-features/resources/vertical-scroll-touch-block.html
@@ -0,0 +1,42 @@
+
+
+
+
+
This page blocks 'touchstart' and 'touchmove'.
+
+
+
diff --git a/tests/wpt/web-platform-tests/feature-policy/experimental-features/vertical-scroll-touch-block-manual.tentative.html b/tests/wpt/web-platform-tests/feature-policy/experimental-features/vertical-scroll-touch-block-manual.tentative.html
new file mode 100644
index 00000000000..b14423f43df
--- /dev/null
+++ b/tests/wpt/web-platform-tests/feature-policy/experimental-features/vertical-scroll-touch-block-manual.tentative.html
@@ -0,0 +1,237 @@
+
+vertical-scroll test for touch-action
+
+
+
+
+
+
+
+
Spacers below to make page scrollable
+
+
+
+
EOF
+
+
diff --git a/tests/wpt/web-platform-tests/fullscreen/api/document-exit-fullscreen-twice-manual.html b/tests/wpt/web-platform-tests/fullscreen/api/document-exit-fullscreen-twice-manual.html
index b5865ecbab3..15824885b24 100644
--- a/tests/wpt/web-platform-tests/fullscreen/api/document-exit-fullscreen-twice-manual.html
+++ b/tests/wpt/web-platform-tests/fullscreen/api/document-exit-fullscreen-twice-manual.html
@@ -18,7 +18,7 @@ async_test(t => {
const secondPromise = document.exitFullscreen();
assert_equals(document.fullscreenElement, div, "fullscreenElement after second exitFullscreen()");
- document.onfullscreenchange = t.step_func(() => {
+ document.onfullscreenchange = t.step_func(event => {
assert_equals(document.fullscreenElement, null);
// Ensure that there's only one fullscreenchange event.
document.onfullscreenchange = t.unreached_func("second fullscreenchange event");
diff --git a/tests/wpt/web-platform-tests/fullscreen/api/document-onfullscreenerror.html b/tests/wpt/web-platform-tests/fullscreen/api/document-onfullscreenerror.html
index 499e77d0b99..02cb94820fb 100644
--- a/tests/wpt/web-platform-tests/fullscreen/api/document-onfullscreenerror.html
+++ b/tests/wpt/web-platform-tests/fullscreen/api/document-onfullscreenerror.html
@@ -7,12 +7,23 @@
async_test(function(t)
{
var sync = true;
+ var promise_executed = false;
assert_equals(document.onfullscreenerror, null, "initial onfullscreenerror");
document.onfullscreenerror = t.step_func_done(function(event) {
+ assert_true(promise_executed);
assert_false(sync);
});
var e = document.createElement('span');
- e.requestFullscreen();
+ var promise = e.requestFullscreen();
+ if (promise) {
+ promise.catch(()=> {
+ assert_false(sync);
+ promise_executed = true;
+ });
+ } else {
+ // If promises aren't supported just treat it as already done.
+ promise_executed = true;
+ }
sync = false;
});
diff --git a/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-not-allowed.html b/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-not-allowed.html
index eb9e23b85f9..3170c184823 100644
--- a/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-not-allowed.html
+++ b/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-not-allowed.html
@@ -6,14 +6,24 @@
diff --git a/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-timing-manual.html b/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-timing-manual.html
index 1ccfc7a3fe4..359b688b427 100644
--- a/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-timing-manual.html
+++ b/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-timing-manual.html
@@ -28,11 +28,19 @@ async_test(t => {
}, 'Timing of fullscreenchange and resize events');
async_test(t => {
- document.createElement('a').requestFullscreen();
+ var promise = document.createElement('a').requestFullscreen();
+ var promise_executed = false;
+ if (promise) {
+ promise.catch(()=>{promise_executed = true; });
+ } else {
+ // if promises aren't supported treat it as executed.
+ promise_executed = true;
+ }
// If fullscreenerror is an animation frame event, then animation frame
// callbacks should be run after it is fired, before the timer callback.
document.onfullscreenerror = t.step_func(() => {
+ assert_true(promise_executed, "promise executed");
step_timeout(t.unreached_func('timer callback'));
requestAnimationFrame(t.step_func_done());
});
diff --git a/tests/wpt/web-platform-tests/fullscreen/api/promises-reject.html b/tests/wpt/web-platform-tests/fullscreen/api/promises-reject.html
new file mode 100644
index 00000000000..2f47d4cdcd0
--- /dev/null
+++ b/tests/wpt/web-platform-tests/fullscreen/api/promises-reject.html
@@ -0,0 +1,17 @@
+
+Promises#reject
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/fullscreen/api/promises-resolve-manual.html b/tests/wpt/web-platform-tests/fullscreen/api/promises-resolve-manual.html
new file mode 100644
index 00000000000..e58b8d90fed
--- /dev/null
+++ b/tests/wpt/web-platform-tests/fullscreen/api/promises-resolve-manual.html
@@ -0,0 +1,21 @@
+
+Promises#resolve
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/fullscreen/model/move-to-iframe-manual.html b/tests/wpt/web-platform-tests/fullscreen/model/move-to-iframe-manual.html
index 1d388ea2739..12bda5cab43 100644
--- a/tests/wpt/web-platform-tests/fullscreen/model/move-to-iframe-manual.html
+++ b/tests/wpt/web-platform-tests/fullscreen/model/move-to-iframe-manual.html
@@ -7,6 +7,7 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/tables/form-in-tables.xhtml b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/tables/form-in-tables.xhtml
new file mode 100644
index 00000000000..6af44139a09
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/tables/form-in-tables.xhtml
@@ -0,0 +1,23 @@
+
+
+ UA style for form in table elements - XHTML
+
+
+
+
+
+
+