Skip to content

Commit

Permalink
Store the path in the manifest file and use this path directly.
Browse files Browse the repository at this point in the history
This fixes a problem with incorrect conversion between url and path when that
conversion is non-trivial (e.g. .worker tests)
  • Loading branch information
jgraham committed Feb 4, 2015
1 parent 3def89b commit 8d8df6b
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 44 deletions.
52 changes: 22 additions & 30 deletions tools/manifest/item.py
@@ -1,17 +1,16 @@
import urlparse
from abc import ABCMeta, abstractmethod, abstractproperty

from utils import url_to_rel_path

item_types = ["testharness", "reftest", "manual", "stub", "wdspec"]

class ManifestItem(object):
__metaclass__ = ABCMeta

item_type = None

def __init__(self, manifest=None):
def __init__(self, path, manifest=None):
self.manifest = manifest
self.path = path

@abstractmethod
def key(self):
Expand All @@ -25,9 +24,8 @@ def __eq__(self, other):
def __hash__(self):
return hash(self.key())

@abstractmethod
def to_json(self):
raise NotImplementedError
return {"path": self.path}

@classmethod
def from_json(self, manifest, obj):
Expand All @@ -39,8 +37,8 @@ def id(self):


class URLManifestItem(ManifestItem):
def __init__(self, url, url_base="/", manifest=None):
ManifestItem.__init__(self, manifest=manifest)
def __init__(self, path, url, url_base="/", manifest=None):
ManifestItem.__init__(self, path, manifest=manifest)
self._url = url
self.url_base = url_base

Expand All @@ -55,37 +53,36 @@ def url(self):
def key(self):
return self.item_type, self.url

@property
def path(self):
return url_to_rel_path(self.url, self.url_base)

def to_json(self):
rv = {"url": self._url}
rv = ManifestItem.to_json(self)
rv["url"] = self._url
return rv

@classmethod
def from_json(cls, manifest, obj):
return cls(obj["url"],
return cls(obj["path"],
obj["url"],
url_base=manifest.url_base,
manifest=manifest)


class TestharnessTest(URLManifestItem):
item_type = "testharness"

def __init__(self, url, url_base="/", timeout=None, manifest=None):
URLManifestItem.__init__(self, url, url_base=url_base, manifest=manifest)
def __init__(self, path, url, url_base="/", timeout=None, manifest=None):
URLManifestItem.__init__(self, path, url, url_base=url_base, manifest=manifest)
self.timeout = timeout

def to_json(self):
rv = {"url": self.url}
rv = URLManifestItem.to_json(self)
if self.timeout is not None:
rv["timeout"] = self.timeout
return rv

@classmethod
def from_json(cls, manifest, obj):
return cls(obj["url"],
return cls(obj["path"],
obj["url"],
url_base=manifest.url_base,
timeout=obj.get("timeout"),
manifest = manifest)
Expand All @@ -94,9 +91,9 @@ def from_json(cls, manifest, obj):
class RefTest(URLManifestItem):
item_type = "reftest"

def __init__(self, url, references, url_base="/", timeout=None, is_reference=False,
def __init__(self, path, url, references, url_base="/", timeout=None, is_reference=False,
manifest=None):
URLManifestItem.__init__(self, url, url_base=url_base, manifest=manifest)
URLManifestItem.__init__(self, path, 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
Expand All @@ -112,15 +109,16 @@ def key(self):
return self.item_type, self.url

def to_json(self):
rv = {"url": self.url,
"references": self.references}
rv = URLManifestItem.to_json(self)
rv["references"] = self.references
if self.timeout is not None:
rv["timeout"] = self.timeout
return rv

@classmethod
def from_json(cls, manifest, obj):
return cls(obj["url"],
return cls(obj["path"],
obj["url"],
obj["references"],
url_base=manifest.url_base,
timeout=obj.get("timeout"),
Expand All @@ -136,20 +134,14 @@ class Stub(URLManifestItem):
class WebdriverSpecTest(ManifestItem):
item_type = "wdspec"

def __init__(self, path, manifest=None):
ManifestItem.__init__(self, manifest=manifest)
self.path = path

@property
def id(self):
return self.path

def to_json(self):
return {"path": self.path}

def key(self):
return self.path

@classmethod
def from_json(cls, manifest, obj):
return cls(path=obj["path"])
return cls(obj["path"],
manifest=manifest)
10 changes: 5 additions & 5 deletions tools/manifest/sourcefile.py
Expand Up @@ -221,22 +221,22 @@ def manifest_items(self):
rv = []

elif self.name_is_stub:
rv = [Stub(self.url)]
rv = [Stub(self.rel_path, self.url)]

elif self.name_is_manual:
rv = [ManualTest(self.url)]
rv = [ManualTest(self.rel_path, self.url)]

elif self.name_is_worker:
rv = [TestharnessTest(self.url[:-3])]
rv = [TestharnessTest(self.rel_path, self.url[:-3])]

elif self.name_is_webdriver:
rv = [WebdriverSpecTest(self.rel_path)]

elif self.content_is_testharness:
rv = [TestharnessTest(self.url, timeout=self.timeout)]
rv = [TestharnessTest(self.rel_path, self.url, timeout=self.timeout)]

elif self.content_is_ref_node:
rv = [RefTest(self.url, self.references,
rv = [RefTest(self.rel_path, self.url, self.references,
timeout=self.timeout, is_reference=self.name_is_reference)]

else:
Expand Down
9 changes: 0 additions & 9 deletions tools/manifest/utils.py
Expand Up @@ -12,15 +12,6 @@ def rel_path_to_url(rel_path, url_base="/"):
url_base += "/"
return url_base + rel_path.replace(os.sep, "/")


def url_to_rel_path(url, url_base):
url_path = urlparse.urlsplit(url).path
if not url_path.startswith(url_base):
raise ValueError, url
url_path = url_path[len(url_base):]
return url_path


def is_blacklisted(url):
for item in blacklist:
if item == "/":
Expand Down

0 comments on commit 8d8df6b

Please sign in to comment.