| Index: third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/manifest/item.py
|
| diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/manifest/item.py b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/manifest/item.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..3d3480a1d25513d1325d5f449d9e7e0379cd4919
|
| --- /dev/null
|
| +++ b/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/manifest/item.py
|
| @@ -0,0 +1,219 @@
|
| +import os
|
| +from six.moves.urllib.parse import urljoin
|
| +from abc import ABCMeta, abstractmethod, abstractproperty
|
| +
|
| +
|
| +def get_source_file(source_files, tests_root, manifest, path):
|
| + def make_new():
|
| + from .sourcefile import SourceFile
|
| +
|
| + return SourceFile(tests_root, path, manifest.url_base)
|
| +
|
| + if source_files is None:
|
| + return make_new()
|
| +
|
| + if path not in source_files:
|
| + source_files[path] = make_new()
|
| +
|
| + return source_files[path]
|
| +
|
| +
|
| +class ManifestItem(object):
|
| + __metaclass__ = ABCMeta
|
| +
|
| + item_type = None
|
| +
|
| + def __init__(self, source_file, manifest=None):
|
| + self.manifest = manifest
|
| + self.source_file = source_file
|
| +
|
| + @abstractproperty
|
| + def id(self):
|
| + """The test's id (usually its url)"""
|
| + pass
|
| +
|
| + @property
|
| + def path(self):
|
| + """The test path relative to the test_root"""
|
| + return self.source_file.rel_path
|
| +
|
| + @property
|
| + def https(self):
|
| + return "https" in self.source_file.meta_flags
|
| +
|
| + def key(self):
|
| + """A unique identifier for the test"""
|
| + return (self.item_type, self.id)
|
| +
|
| + def meta_key(self):
|
| + """Extra metadata that doesn't form part of the test identity, but for
|
| + which changes mean regenerating the manifest (e.g. the test timeout."""
|
| + return ()
|
| +
|
| + def __eq__(self, other):
|
| + if not hasattr(other, "key"):
|
| + return False
|
| + return self.key() == other.key()
|
| +
|
| + def __hash__(self):
|
| + return hash(self.key() + self.meta_key())
|
| +
|
| + def __repr__(self):
|
| + return "<%s.%s id=%s, path=%s>" % (self.__module__, self.__class__.__name__, self.id, self.path)
|
| +
|
| + def to_json(self):
|
| + return [{}]
|
| +
|
| + @classmethod
|
| + def from_json(cls, manifest, tests_root, path, obj, source_files=None):
|
| + source_file = get_source_file(source_files, tests_root, manifest, path)
|
| + return cls(source_file,
|
| + manifest=manifest)
|
| +
|
| +
|
| +class URLManifestItem(ManifestItem):
|
| + def __init__(self, source_file, url, url_base="/", manifest=None):
|
| + ManifestItem.__init__(self, source_file, manifest=manifest)
|
| + self._url = url
|
| + self.url_base = url_base
|
| +
|
| + @property
|
| + def id(self):
|
| + return self.url
|
| +
|
| + @property
|
| + def url(self):
|
| + return urljoin(self.url_base, self._url)
|
| +
|
| + def to_json(self):
|
| + rv = [self._url, {}]
|
| + return rv
|
| +
|
| + @classmethod
|
| + def from_json(cls, manifest, tests_root, path, obj, source_files=None):
|
| + source_file = get_source_file(source_files, tests_root, manifest, path)
|
| + url, extras = obj
|
| + return cls(source_file,
|
| + url,
|
| + url_base=manifest.url_base,
|
| + manifest=manifest)
|
| +
|
| +
|
| +class TestharnessTest(URLManifestItem):
|
| + item_type = "testharness"
|
| +
|
| + def __init__(self, source_file, url, url_base="/", timeout=None, manifest=None):
|
| + URLManifestItem.__init__(self, source_file, url, url_base=url_base, manifest=manifest)
|
| + self.timeout = timeout
|
| +
|
| + def meta_key(self):
|
| + return (self.timeout,)
|
| +
|
| + def to_json(self):
|
| + rv = URLManifestItem.to_json(self)
|
| + if self.timeout is not None:
|
| + rv[-1]["timeout"] = self.timeout
|
| + return rv
|
| +
|
| + @classmethod
|
| + def from_json(cls, manifest, tests_root, path, obj, source_files=None):
|
| + source_file = get_source_file(source_files, tests_root, manifest, path)
|
| +
|
| + url, extras = obj
|
| + return cls(source_file,
|
| + url,
|
| + url_base=manifest.url_base,
|
| + timeout=extras.get("timeout"),
|
| + manifest=manifest)
|
| +
|
| +
|
| +class RefTestNode(URLManifestItem):
|
| + item_type = "reftest_node"
|
| +
|
| + def __init__(self, source_file, url, references, url_base="/", timeout=None,
|
| + viewport_size=None, dpi=None, manifest=None):
|
| + URLManifestItem.__init__(self, source_file, url, url_base=url_base, manifest=manifest)
|
| + for _, ref_type in references:
|
| + if ref_type not in ["==", "!="]:
|
| + raise ValueError("Unrecognised ref_type %s" % ref_type)
|
| + self.references = tuple(references)
|
| + self.timeout = timeout
|
| + self.viewport_size = viewport_size
|
| + self.dpi = dpi
|
| +
|
| + def meta_key(self):
|
| + return (self.timeout, self.viewport_size, self.dpi)
|
| +
|
| + def to_json(self):
|
| + rv = [self.url, self.references, {}]
|
| + extras = rv[-1]
|
| + if self.timeout is not None:
|
| + extras["timeout"] = self.timeout
|
| + if self.viewport_size is not None:
|
| + extras["viewport_size"] = self.viewport_size
|
| + if self.dpi is not None:
|
| + extras["dpi"] = self.dpi
|
| + return rv
|
| +
|
| + @classmethod
|
| + def from_json(cls, manifest, tests_root, path, obj, source_files=None):
|
| + source_file = get_source_file(source_files, tests_root, manifest, path)
|
| + url, references, extras = obj
|
| + return cls(source_file,
|
| + url,
|
| + references,
|
| + url_base=manifest.url_base,
|
| + timeout=extras.get("timeout"),
|
| + viewport_size=extras.get("viewport_size"),
|
| + dpi=extras.get("dpi"),
|
| + manifest=manifest)
|
| +
|
| + def to_RefTest(self):
|
| + if type(self) == RefTest:
|
| + return self
|
| + rv = RefTest.__new__(RefTest)
|
| + rv.__dict__.update(self.__dict__)
|
| + return rv
|
| +
|
| + def to_RefTestNode(self):
|
| + if type(self) == RefTestNode:
|
| + return self
|
| + rv = RefTestNode.__new__(RefTestNode)
|
| + rv.__dict__.update(self.__dict__)
|
| + return rv
|
| +
|
| +
|
| +class RefTest(RefTestNode):
|
| + item_type = "reftest"
|
| +
|
| +
|
| +class ManualTest(URLManifestItem):
|
| + item_type = "manual"
|
| +
|
| +
|
| +class ConformanceCheckerTest(URLManifestItem):
|
| + item_type = "conformancechecker"
|
| +
|
| +
|
| +class VisualTest(URLManifestItem):
|
| + item_type = "visual"
|
| +
|
| +
|
| +class Stub(URLManifestItem):
|
| + item_type = "stub"
|
| +
|
| +
|
| +class WebdriverSpecTest(URLManifestItem):
|
| + item_type = "wdspec"
|
| +
|
| + def __init__(self, source_file, url, url_base="/", timeout=None, manifest=None):
|
| + URLManifestItem.__init__(self, source_file, url, url_base=url_base, manifest=manifest)
|
| + self.timeout = timeout
|
| +
|
| +
|
| +class SupportFile(ManifestItem):
|
| + item_type = "support"
|
| +
|
| + @property
|
| + def id(self):
|
| + return self.source_file.rel_path
|
|
|