Remove mojom_fetcher.
* No one uses it (and no one is maintaining it).
* It depends on the old mojom parser.
R=jamesr@chromium.org
Review URL: https://codereview.chromium.org/1709333002 .
diff --git a/mojo/public/tools/mojom_fetcher/build_gn.tmpl b/mojo/public/tools/mojom_fetcher/build_gn.tmpl
deleted file mode 100644
index f14c950..0000000
--- a/mojo/public/tools/mojom_fetcher/build_gn.tmpl
+++ /dev/null
@@ -1,30 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-## This file is automatically generated by mojo/public/tools/mojom_fetcher/mojom_gn.py.
-## Manual changes may be overwritten.
-
-import("//build/module_args/mojo.gni")
-import("$mojo_sdk_root/mojo/public/tools/bindings/mojom.gni")
-
-mojom("{{group_name}}") {
- deps = [{% for mojom in mojoms %}
- ":{{mojom.target_name}}",{% endfor %}
- ]
-}
-{% for mojom in mojoms %}
-mojom("{{mojom.target_name}}") {
- sources = [
- "{{mojom.filename}}",
- ]{% if mojom.import_dirs %}
- import_dirs = [{% for dir in mojom.import_dirs %}
- get_path_info("{{dir}}", "abspath"),{% endfor %}
- ]{% endif %}{% if mojom.mojo_sdk_deps %}
- mojo_sdk_deps = [{% for dep in mojom.mojo_sdk_deps %}
- "{{dep}}",{% endfor %}
- ]{% endif %}{% if mojom.deps %}
- deps = [{% for dep in mojom.deps %}
- "{{dep}}",{% endfor %}
- ]{% endif %}
-}{% endfor %}
diff --git a/mojo/public/tools/mojom_fetcher/mojom_fetcher.py b/mojo/public/tools/mojom_fetcher/mojom_fetcher.py
deleted file mode 100755
index b0283e3..0000000
--- a/mojo/public/tools/mojom_fetcher/mojom_fetcher.py
+++ /dev/null
@@ -1,196 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Tool to manage external mojom interfaces."""
-
-import argparse
-import errno
-import logging
-import os
-import sys
-import urllib2
-
-# Local library
-sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)),
- "pylib"))
-# Bindings library
-sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)),
- "..", "bindings", "pylib"))
-# Requests library
-sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)),
- "..", "..", "..", "..", "third_party",
- "requests", "src"))
-
-import requests
-
-from fetcher.repository import Repository
-from fetcher.dependency import Dependency
-from mojom.parse.parser import Parse, ParseError
-
-
-class UrlRewriterException(Exception):
- """Exception when processing URL rewrite rules."""
- pass
-
-class UrlRewriter(object):
- """UrlRewriter rewrites URLs according to the provided mappings.
-
- Note that mappings are not followed transitively. If mappings contains
- {"a": "b", "b": "c"}, then UrlRewriter.rewrite("a") will return "b", not "c".
- """
-
- def __init__(self, mappings):
- self._mappings = mappings
- for target in self._mappings.values():
- for source in self._mappings.keys():
- if source in target or target in source:
- raise UrlRewriterException(
- "%s and %s share a common subpath" % (source, target))
-
- def rewrite(self, path):
- for origin, destination in self._mappings.items():
- if path.startswith(origin):
- return destination + path[len(origin):]
- return path
-
-
-class MojomFetcher(object):
- def __init__(self, repository, url_rewriter):
- self._repository = repository
- self._url_rewriter = url_rewriter
-
- def _requests_get(self, url):
- return requests.get(url, verify=True)
-
- def _os_makedirs(self, dirs):
- try:
- os.makedirs(dirs)
- except OSError as e:
- # The directory may already exist, we don't care.
- if e.errno != errno.EEXIST:
- raise
-
- def _open(self, f, mode="r"):
- return open(f, mode)
-
- def _download_dependencies(self, dependencies):
- """Takes the list of mojom dependencies and download the external ones.
- Returns the number of successfully downloaded dependencies."""
-
- downloaded = 0
- for dep in dependencies:
- if self._maybe_download_dep(dep):
- downloaded += 1
- return downloaded
-
- def _maybe_download_dep(self, dep):
- if not dep.maybe_is_a_url():
- return False
-
- for candidate in dep.generate_candidate_urls():
- url = self._url_rewriter.rewrite(candidate)
- response = self._requests_get("https://" + url)
- if not response.ok:
- # If we get an error, it just mean that this candidate URL is not
- # correct. We must try the other ones before giving up.
- logging.debug("Error while downloading %s (%s)", candidate, url)
- continue
- # This is an external dependency
- directory = os.path.dirname(candidate)
- full_directory = os.path.join(self._repository.get_external_directory(),
- directory)
- try:
- self._os_makedirs(full_directory)
- except OSError as e:
- # The directory may already exist, we don't care.
- if e.errno != errno.EEXIST:
- raise
- with self._open(os.path.join(self._repository.get_external_directory(),
- candidate), "w") as f:
- data = response.content
- try:
- Parse(data, candidate)
- except ParseError:
- logging.warn("File at %s is not a mojom", url)
- break
- f.write(data)
- return True
- return False
-
- def discover(self):
- """Discover missing .mojom dependencies and download them."""
- while True:
- missing_deps = self._repository.get_missing_dependencies()
- downloaded = self._download_dependencies(missing_deps)
- if downloaded == 0:
- return 0
-
- def get(self, dep):
- dependency = Dependency(self._repository, ".", dep)
- downloaded = self._download_dependencies([dependency])
- if downloaded != 0:
- return self.discover()
- else:
- return -1
-
- def update(self):
- dependencies = [Dependency(self._repository, ".", f)
- for f in self._repository.get_external_urls()]
- # TODO(etiennej): We may want to suggest to the user to delete
- # un-downloadable dependencies.
- downloaded = self._download_dependencies(dependencies)
- if downloaded != 0:
- return self.discover()
- else:
- return -1
-
-def _main(args):
- if args.prefix_rewrite:
- rewrite_rules = dict([x.split(':', 1) for x in args.prefix_rewrite])
- else:
- rewrite_rules = {}
- rewriter = UrlRewriter(rewrite_rules)
- repository_path = os.path.abspath(args.repository_path)
- repository = Repository(repository_path, args.external_dir)
- fetcher = MojomFetcher(repository, rewriter)
- if args.action == 'discover':
- return fetcher.discover()
- elif args.action == 'get':
- return fetcher.get(args.url)
- elif args.action == 'update':
- return fetcher.update()
- else:
- logging.error("No matching action %s", args.action[0])
- return -1
-
-def main():
- logging.basicConfig(level=logging.ERROR)
- parser = argparse.ArgumentParser(description='Download mojom dependencies.')
- parser.add_argument('--repository-path', type=str, action='store',
- default='.', help='The path to the client repository.')
- parser.add_argument('--external-dir', type=str, action='store',
- default='external',
- help='Directory for external interfaces')
- parser.add_argument('--prefix-rewrite', type=str, action='append',
- help='If present, "origin:destination" pairs. "origin" '
- 'prefixes will be rewritten as "destination". May be '
- 'used several times. Rewrites are not transitive.')
-
- subparsers = parser.add_subparsers(dest='action', help='action')
- parser_get = subparsers.add_parser(
- 'get', help='Get the specified URL and all its transitive dependencies')
- parser_get.add_argument('url', type=str, nargs=1,
- help='URL to download for get action')
- subparsers.add_parser(
- 'discover',
- help='Recursively discover and download new external dependencies')
- subparsers.add_parser('update', help='Update all external dependencies')
-
- args = parser.parse_args()
- return _main(args)
-
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/mojo/public/tools/mojom_fetcher/mojom_gn.py b/mojo/public/tools/mojom_fetcher/mojom_gn.py
deleted file mode 100755
index 7f812e6..0000000
--- a/mojo/public/tools/mojom_fetcher/mojom_gn.py
+++ /dev/null
@@ -1,79 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""BUILD file generator for mojoms."""
-
-import argparse
-import errno
-import imp
-import logging
-import os
-import sys
-import urllib2
-
-# Local library
-sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)),
- "pylib"))
-# Bindings library
-sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)),
- "..", "bindings", "pylib"))
-# Jinja2 library
-sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)),
- "..", "..", "third_party"))
-import jinja2
-
-from fetcher.repository import Repository
-
-
-class BuildGNGenerator(object):
- def __init__(self, repository, template_dir):
- self._repository = repository
- self._import_dirs = []
- self.environment = jinja2.Environment(
- loader=jinja2.FileSystemLoader(template_dir))
-
- def generate(self):
- build_gn_tmpl = self.environment.get_template('build_gn.tmpl')
- directories = self._repository.get_all_external_mojom_directories()
- for directory in directories:
- logging.debug("Generating %s", directory.get_build_gn_path())
- params = directory.get_jinja_parameters(self._import_dirs)
- f = self._open(directory.get_build_gn_path(), "w")
- f.write(build_gn_tmpl.render(**params))
-
- def add_import_dirs(self, import_dirs):
- self._import_dirs.extend(import_dirs)
-
- def _open(self, filename, mode):
- return open(filename, mode)
-
-
-def _main(args):
- repository_path = os.path.abspath(args.repository_path)
- repository = Repository(repository_path, args.external_dir)
- gn_generator = BuildGNGenerator(
- repository, os.path.dirname(os.path.abspath(__file__)))
- if args.extra_import_dirs:
- gn_generator.add_import_dirs(args.extra_import_dirs)
- gn_generator.generate()
-
-
-def main():
- logging.basicConfig(level=logging.WARNING)
- parser = argparse.ArgumentParser(
- description='Generate BUILD.gn files for mojoms.')
- parser.add_argument('--repository-path', type=str, default='.',
- help='The path to the client repository.')
- parser.add_argument('--external-dir', type=str, default='external',
- help='Directory for external interfaces')
- parser.add_argument(
- '--extra-import-dirs', type=str, action='append',
- help='Additional directories to search for imported mojoms.')
- args = parser.parse_args()
- return _main(args)
-
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/mojo/public/tools/mojom_fetcher/pylib/fetcher/__init__.py b/mojo/public/tools/mojom_fetcher/pylib/fetcher/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/mojo/public/tools/mojom_fetcher/pylib/fetcher/__init__.py
+++ /dev/null
diff --git a/mojo/public/tools/mojom_fetcher/pylib/fetcher/dependency.py b/mojo/public/tools/mojom_fetcher/pylib/fetcher/dependency.py
deleted file mode 100644
index ea299b3..0000000
--- a/mojo/public/tools/mojom_fetcher/pylib/fetcher/dependency.py
+++ /dev/null
@@ -1,180 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-
-
-class DuplicateDependencyFoundException(Exception):
- """Two potentially matching files have been found that could satisfy this
- dependency, so the right one cannot be selected automatically."""
- pass
-
-
-class DependencyNotFoundException(Exception):
- """The dependency hasn't been found on the local filesystem."""
- pass
-
-
-class Dependency(object):
- """Dependency represents an import request from one mojom file to another.
- """
- def __init__(self, repository, importer, imported):
- self._repository = repository
- self._importer_filename = os.path.normpath(importer)
- self._imported_filename = os.path.normpath(imported)
-
- def __str__(self):
- return str(self.__dict__)
-
- def __eq__(self, other):
- return self.__dict__ == other.__dict__
-
- def get_importer(self):
- """Returns the name and full path of the file doing the import."""
- return self._importer_filename
-
- def get_imported(self):
- """Returns the imported file (filename and path)."""
- return self._imported_filename
-
- def is_sdk_dep(self):
- """Returns whether this dependency is from the mojo SDK."""
- return (self._imported_filename.startswith("mojo/public/") or
- self._imported_filename.startswith("//mojo/public/"))
-
- def _is_in_external(self):
- """Returns whether this dependency is under the external directory."""
- common = os.path.commonprefix((self._repository.get_external_directory(),
- self._importer_filename))
- return common == self._repository.get_external_directory()
-
- def maybe_is_a_url(self):
- """Returns whether this dependency may be pointing to a downloadable
- ressource."""
- if self._is_in_external() and not self.is_sdk_dep():
- # External dependencies may refer to other dependencies by relative path,
- # so they can always be URLs.
- return True
-
- base, _ = self._imported_filename.split(os.path.sep, 1)
- if not '.' in base:
- # There is no dot separator in the first part of the path; it cannot be a
- # URL.
- return False
- return True
-
- def generate_candidate_urls(self):
- """Generates possible paths where to download this dependency. It is
- expected that at most one of them should work."""
- candidates = []
-
- base, _ = self._imported_filename.split(os.path.sep, 1)
- if '.' in base and not base.startswith('.'):
- # This import may be an absolute URL path (without scheme).
- candidates.append(self._imported_filename)
-
- # External dependencies may refer to other dependencies by relative path.
- if self._is_in_external():
- directory = os.path.relpath(os.path.dirname(self._importer_filename),
- self._repository.get_external_directory())
-
- # This is to handle the case where external dependencies use
- # imports relative to a directory upper in the directory structure. As we
- # don't know which directory, we need to go through all of them.
- while len(directory) > 0:
- candidates.append(os.path.join(directory, self._imported_filename))
- directory = os.path.dirname(directory)
- return candidates
-
- def get_search_path_for_dependency(self):
- """Return all possible search paths for this dependency."""
-
- # Root directory and external directory are always included.
- search_paths = set([self._repository.get_repo_root_directory(),
- self._repository.get_external_directory()])
- # Local import paths
- search_paths.add(os.path.dirname(self._importer_filename))
-
- if self._is_in_external():
- directory = os.path.dirname(self._importer_filename)
-
- # This is to handle the case where external dependencies use
- # imports relative to a directory upper in the directory structure. As we
- # don't know which directory, we need to go through all of them.
- while self._repository.get_external_directory() in directory:
- search_paths.add(directory)
- directory = os.path.dirname(directory)
- return search_paths
-
- def is_sdk_dep(self):
- """Returns whether this dependency is from the mojo SDK."""
- return self._imported_filename.startswith("mojo/public/")
-
- def _os_path_exists(self, path):
- return os.path.exists(path)
-
- def get_target_and_import(self, extra_import_dirs):
- """Returns a tuple (target, import_directory) for this dependency.
- import_directory may be Null. extra_import_dirs lists directories that
- should be searched for this dependency in addition to the ones directly
- above the importing file.
- """
- directory = os.path.dirname(self.get_importer())
- if self.is_sdk_dep():
- return (os.path.dirname(self.get_imported()), None)
-
- # We need to determine if it is a relative path or not
- if self._os_path_exists(os.path.join(directory, self.get_imported())):
- # This is a relative import path
- dependency_path = os.path.normpath(os.path.join(directory,
- self.get_imported()))
- return (target_from_path(os.path.relpath(dependency_path, directory)),
- None)
-
- if self._os_path_exists(
- os.path.join(self._repository.get_external_directory(),
- self.get_imported())):
- # This is an "absolute" external dependency, specified by full path
- # relative to the external directory.
- return (target_from_path(
- "//" + os.path.join(self._repository.get_external_suffix(),
- self.get_imported())), None)
-
- # We assume that the dependency is specified relative to a directory
- # above this one, so we search all of them for a correspondence. If we
- # find one, we return an import directory.
- result = None
- for import_dir_candidate in (list(self.get_search_path_for_dependency())
- + extra_import_dirs):
- dep_mojom_path = os.path.join(
- import_dir_candidate, self.get_imported())
- if self._os_path_exists(dep_mojom_path):
- if result != None:
- raise DuplicateDependencyFoundException(self.get_imported())
- import_dir = os.path.relpath(import_dir_candidate, directory)
- result = (target_from_path(os.path.relpath(
- dep_mojom_path, directory)), import_dir)
- if result == None:
- raise DependencyNotFoundException(self.get_imported())
- return result
-
-
-def group_target_name(directory):
- """Returns the name of the group target for a given directory."""
- return os.path.basename(directory)
-
-def _target_dir_from_path(path):
- directory, filename = os.path.split(path)
- target, _ = os.path.splitext(filename)
- if target == group_target_name(directory):
- target = target + "_mojom"
- return directory, target
-
-def target_name_from_path(path):
- return _target_dir_from_path(path)[1]
-
-
-def target_from_path(path):
- return ':'.join(_target_dir_from_path(path))
-
diff --git a/mojo/public/tools/mojom_fetcher/pylib/fetcher/mojom_directory.py b/mojo/public/tools/mojom_fetcher/pylib/fetcher/mojom_directory.py
deleted file mode 100644
index 15fe34d..0000000
--- a/mojo/public/tools/mojom_fetcher/pylib/fetcher/mojom_directory.py
+++ /dev/null
@@ -1,30 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-
-from fetcher.dependency import group_target_name
-
-class MojomDirectory(object):
- """This class represents a directory that directly holds mojom files, in the
- external directory structure."""
- def __init__(self, path):
- self.path = path
- self.mojoms = []
-
- def add_mojom(self, mojom):
- self.mojoms.append(mojom)
-
- def get_jinja_parameters(self, include_dirs):
- """Get the Jinja parameters to construct the BUILD.gn file of this
- directory."""
- params = {}
- params["group_name"] = group_target_name(self.path)
- params["mojoms"] = []
- for mojom in self.mojoms:
- params["mojoms"].append(mojom.get_jinja_parameters(include_dirs))
- return params
-
- def get_build_gn_path(self):
- return os.path.join(self.path, "BUILD.gn")
diff --git a/mojo/public/tools/mojom_fetcher/pylib/fetcher/mojom_file.py b/mojo/public/tools/mojom_fetcher/pylib/fetcher/mojom_file.py
deleted file mode 100644
index d8dbea4..0000000
--- a/mojo/public/tools/mojom_fetcher/pylib/fetcher/mojom_file.py
+++ /dev/null
@@ -1,51 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-
-from fetcher.dependency import Dependency, target_name_from_path
-
-
-class MojomFile(object):
- """Mojom represents an interface file at a given location in the
- repository."""
- def __init__(self, repository, name):
- self.name = name
- self._repository = repository
- self.deps = []
-
- def add_dependency(self, dependency):
- """Declare a new dependency of this mojom."""
- self.deps.append(Dependency(self._repository, self.name, dependency))
-
- def get_jinja_parameters(self, include_dirs):
- """Get the Jinja parameters to construct the BUILD.gn target of this
- mojom."""
- params = {}
- params["filename"] = os.path.basename(self.name)
- params["target_name"] = target_name_from_path(self.name)
- params["deps"] = []
- params["mojo_sdk_deps"] = []
- params["import_dirs"] = set()
-
- for dep in self.deps:
- # Mojo SDK dependencies have special treatment.
- if dep.is_sdk_dep():
- target, _ = dep.get_target_and_import(include_dirs)
- params["mojo_sdk_deps"].append(target)
- else:
- target, import_dir = dep.get_target_and_import(include_dirs)
- if import_dir != None:
- params["import_dirs"].add(import_dir)
- params["deps"].append(target)
-
- if len(params["import_dirs"]) != 0:
- params["import_dirs"] = list(params["import_dirs"])
- else:
- del params["import_dirs"]
- return params
-
- def _os_path_exists(self, path):
- return os.path.exists(path)
-
diff --git a/mojo/public/tools/mojom_fetcher/pylib/fetcher/repository.py b/mojo/public/tools/mojom_fetcher/pylib/fetcher/repository.py
deleted file mode 100644
index 8d9f051..0000000
--- a/mojo/public/tools/mojom_fetcher/pylib/fetcher/repository.py
+++ /dev/null
@@ -1,115 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-
-from fetcher.dependency import Dependency
-from fetcher.mojom_directory import MojomDirectory
-from fetcher.mojom_file import MojomFile
-from mojom.parse.parser import Parse
-
-
-class Repository(object):
- """Repository represents a code repository on the local disc."""
- def __init__(self, root_dir, external_dir):
- """root_dir represents the root of the repository;
- external_dir is the relative path of the external directory within the
- repository (so, relative to root_dir)
- """
- self._root_dir = os.path.normpath(root_dir)
- self._external_dir = external_dir
-
- def get_repo_root_directory(self):
- return self._root_dir
-
- def get_external_directory(self):
- return os.path.join(self._root_dir, self._external_dir)
-
- def get_external_suffix(self):
- return self._external_dir
-
- def _os_walk(self, root_directory):
- # This method is included for dependency injection
- return os.walk(root_directory)
-
- def _open(self, filename):
- # This method is included for dependency injection
- return open(filename)
-
- def _get_all_mojom_in_directory(self, root_directory):
- mojoms = []
- for dirname, _, files in self._os_walk(root_directory):
- for f in files:
- if f.endswith(".mojom"):
- mojoms.append(os.path.join(dirname,f))
- return mojoms
-
- def _resolve_dependencies(self, dependencies, mojoms):
- """Resolve dependencies between discovered mojoms, so we know which are the
- missing ones."""
- missing = []
- for dependency in dependencies:
- found = False
- for search_path in dependency.get_search_path_for_dependency():
- if os.path.normpath(
- os.path.join(search_path,
- dependency.get_imported())) in mojoms:
- found = True
- break
- if not found:
- missing.append(dependency)
- return missing
-
- def get_missing_dependencies(self):
- """get_missing_dependencies returns a set of dependencies that are required
- by mojoms in this repository but not available.
- """
- # Update the list of available mojoms in this repository.
- mojoms = set(self._get_all_mojom_in_directory(self._root_dir))
-
- # Find all declared dependencies
- needed_deps = set([])
- for mojom in mojoms:
- with self._open(mojom) as f:
- source = f.read()
- tree = Parse(source, mojom)
- for dep in tree.import_list:
- needed_deps.add(Dependency(self, dep.filename, dep.import_filename))
-
- missing_deps = self._resolve_dependencies(needed_deps, mojoms)
-
- return missing_deps
-
- def get_external_urls(self):
- """Get all external mojom files in this repository, by urls (without
- scheme)."""
- mojoms = set(self._get_all_mojom_in_directory(
- self.get_external_directory()))
- urls = []
- for mojom in mojoms:
- urls.append(os.path.relpath(mojom, self.get_external_directory()))
- return urls
-
- def get_all_external_mojom_directories(self):
- """Get all external directories populated with their mojom files."""
- mojoms = self._get_all_mojom_in_directory(self.get_external_directory())
- directories = {}
- for mojom_path in mojoms:
- directory_path = os.path.dirname(mojom_path)
- directory = directories.setdefault(
- directory_path, MojomDirectory(directory_path))
- with self._open(mojom_path) as f:
- source = f.read()
- tree = Parse(source, mojom_path)
- mojom = MojomFile(self, mojom_path)
- directory.add_mojom(mojom)
- for dep in tree.import_list:
- mojom.add_dependency(dep.import_filename)
- return directories.values()
-
-
-
-
-
-
diff --git a/mojo/tools/get_test_list.py b/mojo/tools/get_test_list.py
index 11c416d..73c7d3f 100755
--- a/mojo/tools/get_test_list.py
+++ b/mojo/tools/get_test_list.py
@@ -155,13 +155,6 @@
"run_mojom_translator_python_tests.py"),
"--build-dir=" + build_dir])
- # mojo tools unit tests:
- if ShouldRunTest(Config.TEST_TYPE_DEFAULT, Config.TEST_TYPE_UNIT, "tools"):
- AddEntry("Mojo tools unit tests",
- ["python", os.path.join("mojo", "tools", "testing",
- "mojom_fetcher",
- "mojom_fetcher_tests.py")])
-
# Observatory tests (Linux-only):
if target_os == Config.OS_LINUX and ShouldRunTest(Config.TEST_TYPE_DEFAULT):
AddEntry("Dart Observatory tests",
diff --git a/mojo/tools/testing/mojom_fetcher/dependency_tests.py b/mojo/tools/testing/mojom_fetcher/dependency_tests.py
deleted file mode 100644
index 68f0ed8..0000000
--- a/mojo/tools/testing/mojom_fetcher/dependency_tests.py
+++ /dev/null
@@ -1,110 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import unittest
-
-from fetcher.dependency import Dependency
-
-class FakeRepository(object):
- def get_repo_root_directory(self):
- return "/base/repo"
-
- def get_external_directory(self):
- return "/base/repo/third_party/external"
-
-class TestDependency(unittest.TestCase):
- def test_importer_imported(self):
- dep = Dependency(FakeRepository(),
- "/base/repo/services/foo/../bar/bar.mojom",
- "mojo/public/./../public/baz.mojom")
-
- self.assertEqual("/base/repo/services/bar/bar.mojom", dep.get_importer())
- self.assertEqual("mojo/public/baz.mojom", dep.get_imported())
-
- def test_is_sdk_dep(self):
- # Not in SDK
- dep = Dependency(FakeRepository(),
- "/base/repo/services/bar/bar.mojom",
- "mojo/public/../foo/baz.mojom")
- self.assertFalse(dep.is_sdk_dep())
-
- # In SDK
- dep = Dependency(FakeRepository(),
- "/base/repo/services/bar/bar.mojom",
- "mojo/public/baz.mojom")
- self.assertTrue(dep.is_sdk_dep())
-
- def test_maybe_is_a_url(self):
- # Not a URL
- dep = Dependency(FakeRepository(),
- "/base/repo/services/bar/bar.mojom",
- "mojo/foo/baz.mojom")
- self.assertFalse(dep.maybe_is_a_url())
-
- # URL import from non-external mojom
- dep = Dependency(FakeRepository(),
- "/base/repo/services/bar/bar.mojom",
- "foo.bar.com/foo/baz.mojom")
- self.assertTrue(dep.maybe_is_a_url())
-
- # URL import from an external mojom
- dep = Dependency(FakeRepository(),
- "/base/repo/third_party/external/" +
- "services.bar.com/bar/bar.mojom",
- "foo.bar.com/foo/baz.mojom")
- self.assertTrue(dep.maybe_is_a_url())
-
- # relative import from an external mojom
- dep = Dependency(
- FakeRepository(),
- "/base/repo/third_party/external/services.bar.com/bar/bar.mojom",
- "foo/baz.mojom")
- self.assertTrue(dep.maybe_is_a_url())
-
- # external mojom importing SDK dep
- dep = Dependency(
- FakeRepository(),
- "/base/repo/third_party/external/services.bar.com/bar/bar.mojom",
- "mojo/public/foo/baz.mojom")
- self.assertFalse(dep.maybe_is_a_url())
-
- def test_generate_candidate_urls_relative(self):
- dep = Dependency(
- FakeRepository(),
- "/base/repo/third_party/external/" +
- "services.bar.com/bar/interfaces/bar.mojom",
- "foo/baz.mojom")
- self.assertTrue(dep.maybe_is_a_url())
- candidate_urls = dep.generate_candidate_urls()
- self.assertEqual(["services.bar.com/bar/interfaces/foo/baz.mojom",
- "services.bar.com/bar/foo/baz.mojom",
- "services.bar.com/foo/baz.mojom"], candidate_urls)
-
- def test_generate_candidate_urls_absolute(self):
- dep = Dependency(FakeRepository(),
- "/base/repo/services/bar/interfaces/bar.mojom",
- "services.foo.com/foo/baz.mojom")
- self.assertTrue(dep.maybe_is_a_url())
- candidate_urls = dep.generate_candidate_urls()
- self.assertEqual(["services.foo.com/foo/baz.mojom"], candidate_urls)
-
- def test_get_search_path_for_dependency(self):
- # Absolute
- dep = Dependency(FakeRepository(),
- "/base/repo/services/bar/interfaces/bar.mojom",
- "services.foo.com/foo/baz.mojom")
- self.assertEqual(set(["/base/repo/services/bar/interfaces",
- "/base/repo", "/base/repo/third_party/external"]),
- dep.get_search_path_for_dependency())
-
- # Relative
- dep = Dependency(
- FakeRepository(),
- "/base/repo/third_party/external/services.foo.com/bar/bar.mojom",
- "baz/baz.mojom")
- self.assertEqual(set([
- "/base/repo", "/base/repo/third_party/external",
- "/base/repo/third_party/external/services.foo.com/bar",
- "/base/repo/third_party/external/services.foo.com"]),
- dep.get_search_path_for_dependency())
diff --git a/mojo/tools/testing/mojom_fetcher/fakes.py b/mojo/tools/testing/mojom_fetcher/fakes.py
deleted file mode 100644
index 699d306..0000000
--- a/mojo/tools/testing/mojom_fetcher/fakes.py
+++ /dev/null
@@ -1,113 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import io
-import os.path
-
-from fetcher.dependency import Dependency
-from fetcher.mojom_file import MojomFile
-from fetcher.repository import Repository
-
-class FakeRepository(Repository):
- data1 = """module test;
-import "bar/baz.mojom";
-interface Foo {};"""
- data2 = """module test;
-import "services.domokit.org/foo/fiz.mojom";
-interface Baz {};"""
- data3 = """module test;
-import "services.fiz.org/foo/bar.mojom";
-interface Fiz {};"""
- data4 = """module test;
-interface SomeInterface {};"""
-
- def __init__(self, *args, **kwargs):
- self.files_opened = []
- self.directories_walked = []
- self.all_files_available = False
-
- Repository.__init__(self, *args, **kwargs)
-
- def get_walk_base(self, directory):
- data_base = [
- (directory, ["foo", "third_party"], []),
- (os.path.join(directory, "foo"), ["bar"], ["foo.mojom"]),
- (os.path.join(directory, "foo/bar"), [], ["baz.mojom"]),
- (os.path.join(directory, "third_party"), ["external"], []),
- (os.path.join(directory, "third_party/external"),
- ["services.domokit.org"], []),
- (os.path.join(directory,
- "third_party/external/services.domokit.org"),
- ["foo"], []),
- (os.path.join(directory,
- "third_party/external/services.domokit.org/foo"),
- [], ["fiz.mojom"])]
- if self.all_files_available:
- data_base.extend([
- (os.path.join(directory,
- "third_party/external/services.fiz.org"),
- ["foo"], []),
- (os.path.join(directory,
- "third_party/external/services.fiz.org/foo"),
- [], ["bar.mojom"])])
- return data_base
-
- def get_walk_external(self, directory):
- data_external = [
- (directory, ["services.domokit.org"], []),
- (os.path.join(directory, "services.domokit.org"),
- ["foo"], []),
- (os.path.join(directory, "services.domokit.org/foo"),
- [], ["fiz.mojom"])]
- if self.all_files_available:
- data_external.extend([
- (os.path.join(directory, "services.fiz.org"),
- ["foo"], []),
- (os.path.join(directory, "services.fiz.org/foo"),
- [], ["bar.mojom"])])
- return data_external
-
-
- def _open(self, f):
- self.files_opened.append(f)
-
- if "foo.mojom" in f:
- val = io.BytesIO(self.data1)
- elif "baz.mojom" in f:
- val = io.BytesIO(self.data2)
- elif "fiz.mojom" in f:
- val = io.BytesIO(self.data3)
- else:
- val = io.BytesIO(self.data4)
- return val
-
- def _os_walk(self, directory):
- self.directories_walked.append(directory)
- if directory == self._root_dir:
- return iter(self.get_walk_base(directory))
- else:
- return iter(self.get_walk_external(directory))
-
-
-class FakeDependency(Dependency):
- IN_FILESYSTEM = [
- "/base/repo/third_party/external/example.com/dir/example.mojom",
- "/base/repo/third_party/external/example.com/dir/dir.mojom",
- "/base/repo/third_party/external/domokit.org/bar/baz/buzz.mojom",
- "/base/repo/third_party/external/domokit.org/bar/foo/bar.mojom",
- ]
-
- def _os_path_exists(self, path):
- if path in self.IN_FILESYSTEM:
- return True
- elif os.path.join("/base/repo", path) in self.IN_FILESYSTEM:
- return True
- else:
- return False
-
-
-class FakeMojomFile(MojomFile):
- def add_dependency(self, dependency):
- """Declare a new dependency of this mojom."""
- self.deps.append(FakeDependency(self._repository, self.name, dependency))
diff --git a/mojo/tools/testing/mojom_fetcher/mojom_directory_tests.py b/mojo/tools/testing/mojom_fetcher/mojom_directory_tests.py
deleted file mode 100644
index 0b2f5dd..0000000
--- a/mojo/tools/testing/mojom_fetcher/mojom_directory_tests.py
+++ /dev/null
@@ -1,50 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os.path
-import unittest
-
-from fakes import FakeMojomFile
-from fetcher.dependency import Dependency
-from fetcher.mojom_directory import MojomDirectory
-from fetcher.mojom_file import MojomFile
-from fetcher.repository import Repository
-
-
-class TestMojomDirectory(unittest.TestCase):
- def test_build_gn_path(self):
- directory = MojomDirectory(
- "/base/repo/third_party/external/domokit.org/bar/baz")
- self.assertEquals(
- "/base/repo/third_party/external/domokit.org/bar/baz/BUILD.gn",
- directory.get_build_gn_path())
-
- def test_jinja_parameters(self):
- mojom = FakeMojomFile(
- Repository("/base/repo", "third_party/external"),
- "/base/repo/third_party/external/domokit.org/bar/baz/foo.mojom")
- mojom.add_dependency("example.com/dir/example.mojom")
- mojom.add_dependency("example.com/dir/dir.mojom")
- mojom.add_dependency("buzz.mojom")
- mojom.add_dependency("foo/bar.mojom")
- mojom.add_dependency(
- "mojo/public/interfaces/application/shell.mojom")
- directory = MojomDirectory(
- "/base/repo/third_party/external/domokit.org/bar/baz")
- directory.add_mojom(mojom)
- params = directory.get_jinja_parameters([])
- self.assertEquals(
- {"group_name": "baz",
- "mojoms": [{
- "target_name": "foo",
- "filename": "foo.mojom",
- "import_dirs": [".."],
- "mojo_sdk_deps": ["mojo/public/interfaces/application"],
- "deps": [
- '//third_party/external/example.com/dir:example',
- '//third_party/external/example.com/dir:dir_mojom',
- ':buzz',
- '../foo:bar']
- }]}, params)
-
diff --git a/mojo/tools/testing/mojom_fetcher/mojom_fetcher_tests.py b/mojo/tools/testing/mojom_fetcher/mojom_fetcher_tests.py
deleted file mode 100755
index 8781ffe..0000000
--- a/mojo/tools/testing/mojom_fetcher/mojom_fetcher_tests.py
+++ /dev/null
@@ -1,109 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import io
-import os
-import sys
-import unittest
-
-sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)),
- "..", "..", "..", "public", "tools",
- "mojom_fetcher"))
-sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)),
- "..", "..", "..", "public", "tools",
- "mojom_fetcher", "pylib"))
-sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)),
- "..", "..", "..", "public", "tools",
- "bindings", "pylib"))
-
-from mojom_fetcher import UrlRewriter, UrlRewriterException, MojomFetcher
-
-# Fake repository for testing
-from fakes import FakeRepository
-
-
-class TestUrlRewriter(unittest.TestCase):
- def test_no_transitive(self):
- rules = {"foo.com": "bar.com/foo", "bar.com": "baz.com"}
- try:
- UrlRewriter(rules)
- self.fail()
- except UrlRewriterException:
- # This is expected
- pass
-
- def test_rewrite(self):
- rules = {"foo.com": "bar.com/foo", "baz.com": "bar.com/baz"}
- rewriter = UrlRewriter(rules)
- self.assertEquals("bar.com/foo/foo_file",
- rewriter.rewrite("foo.com/foo_file"))
- self.assertEquals("bar.com/baz/foo_file",
- rewriter.rewrite("baz.com/foo_file"))
- self.assertEquals("example.com/file",
- rewriter.rewrite("example.com/file"))
-
-
-class FakeRequest(object):
- def __init__(self, content, ok):
- self.content = content
- self.ok = ok
-
-
-class FakeMojomFetcher(MojomFetcher):
- data = """module test;
-interface Fiz {};"""
-
- def __init__(self, repository, rewriter):
- self.count = 1
- self.opened_files = {}
- self.downloaded_urls = []
- MojomFetcher.__init__(self, repository, rewriter)
-
- def _requests_get(self, url):
- self.downloaded_urls.append(url)
- return FakeRequest(self.data, True)
-
- def _os_makedirs(self, _):
- return
-
- def _open(self, f, _):
- fake_file = io.BytesIO()
- self.opened_files[f] = fake_file
- if "services.fiz.org/foo/bar.mojom" in f:
- self._repository.all_files_available = True
- return fake_file
-
-
-class TestMojomFetcher(unittest.TestCase):
- def setUp(self):
- self.rules = {"foo.com": "bar.com/foo", "baz.com": "bar.com/baz"}
- self.rewriter = UrlRewriter(self.rules)
- self.repository = FakeRepository("/path/to/repo", "third_party/external")
- self.fetcher = FakeMojomFetcher(self.repository, self.rewriter)
-
- def test_get(self):
- self.fetcher.get("foo.com/bar.mojom")
- self.assertEquals(["https://bar.com/foo/bar.mojom",
- "https://services.fiz.org/foo/bar.mojom"],
- self.fetcher.downloaded_urls)
-
- def test_update(self):
- self.fetcher.update()
- self.assertEquals(["https://services.domokit.org/foo/fiz.mojom",
- "https://services.fiz.org/foo/bar.mojom"],
- self.fetcher.downloaded_urls)
-
- def test_discover(self):
- self.fetcher.update()
- self.assertEquals(["https://services.domokit.org/foo/fiz.mojom",
- "https://services.fiz.org/foo/bar.mojom"],
- self.fetcher.downloaded_urls)
-
-if __name__ == '__main__':
- loader = unittest.defaultTestLoader
- runner = unittest.TextTestRunner()
- directory = os.path.dirname(os.path.abspath(__file__))
- suite = loader.discover(directory, '*_tests.py')
- runner.run(suite)
diff --git a/mojo/tools/testing/mojom_fetcher/mojom_file_tests.py b/mojo/tools/testing/mojom_fetcher/mojom_file_tests.py
deleted file mode 100644
index cb5558d..0000000
--- a/mojo/tools/testing/mojom_fetcher/mojom_file_tests.py
+++ /dev/null
@@ -1,44 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os.path
-import unittest
-
-from fetcher.mojom_file import MojomFile
-from fetcher.dependency import Dependency
-from fetcher.repository import Repository
-from fakes import FakeDependency, FakeMojomFile
-
-
-class TestMojomFile(unittest.TestCase):
- def test_add_dependency(self):
- mojom = MojomFile(Repository("/base/repo", "third_party/external"),
- "mojom_name")
- mojom.add_dependency("dependency_name")
- self.assertEqual(1, len(mojom.deps))
- self.assertEqual("mojom_name", mojom.deps[0].get_importer())
- self.assertEqual("dependency_name", mojom.deps[0].get_imported())
-
- def test_jinja_parameters(self):
- mojom = FakeMojomFile(
- Repository("/base/repo", "third_party/external"),
- "/base/repo/third_party/external/domokit.org/bar/baz/foo.mojom")
- mojom.add_dependency("example.com/dir/example.mojom")
- mojom.add_dependency("example.com/dir/dir.mojom")
- mojom.add_dependency("buzz.mojom")
- mojom.add_dependency("foo/bar.mojom")
- mojom.add_dependency(
- "mojo/public/interfaces/application/shell.mojom")
- params = mojom.get_jinja_parameters([])
- self.assertEquals({
- "target_name": "foo",
- "filename": "foo.mojom",
- "import_dirs": [".."],
- "mojo_sdk_deps": ["mojo/public/interfaces/application"],
- "deps": [
- '//third_party/external/example.com/dir:example',
- '//third_party/external/example.com/dir:dir_mojom',
- ':buzz',
- '../foo:bar']
- }, params)
diff --git a/mojo/tools/testing/mojom_fetcher/mojom_gn_tests.py b/mojo/tools/testing/mojom_fetcher/mojom_gn_tests.py
deleted file mode 100644
index 11e61b3..0000000
--- a/mojo/tools/testing/mojom_fetcher/mojom_gn_tests.py
+++ /dev/null
@@ -1,88 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import io
-import os.path
-import unittest
-
-from fakes import FakeMojomFile
-from fetcher.mojom_directory import MojomDirectory
-from fetcher.repository import Repository
-from mojom_gn import BuildGNGenerator
-
-class FakeRepository(Repository):
- def get_all_external_mojom_directories(self):
- mojom = FakeMojomFile(
- self, os.path.join(self.get_external_directory(),
- "domokit.org/bar/baz/foo.mojom"))
- mojom.add_dependency("example.com/dir/example.mojom")
- mojom.add_dependency("example.com/dir/dir.mojom")
- mojom.add_dependency("buzz.mojom")
- mojom.add_dependency("foo/bar.mojom")
- mojom.add_dependency(
- "mojo/public/interfaces/application/shell.mojom")
- directory = MojomDirectory(
- os.path.join(self.get_external_directory(),
- "domokit.org/bar/baz"))
- directory.add_mojom(mojom)
- return [directory]
-
-
-class FakeBuildGNGenerator(BuildGNGenerator):
- def __init__(self, *args, **kwargs):
- self.opened_files = {}
- BuildGNGenerator.__init__(self, *args, **kwargs)
-
- def _open(self, filepath, mode):
- if mode != "w":
- raise Exception("Invalid mode " + str(mode))
- self.opened_files[filepath] = io.StringIO()
- return self.opened_files[filepath]
-
-
-class TestBuildGNGenerator(unittest.TestCase):
- BAZ_BUILD_GN = u"""import("//build/module_args/mojo.gni")
-import("$mojo_sdk_root/mojo/public/tools/bindings/mojom.gni")
-
-mojom("baz") {
- deps = [
- ":foo",
- ]
-}
-
-mojom("foo") {
- sources = [
- "foo.mojom",
- ]
- import_dirs = [
- get_path_info("..", "abspath"),
- ]
- mojo_sdk_deps = [
- "mojo/public/interfaces/application",
- ]
- deps = [
- "//third_party/external/example.com/dir:example",
- "//third_party/external/example.com/dir:dir_mojom",
- ":buzz",
- "../foo:bar",
- ]
-}"""
- def test_generate(self):
- self.maxDiff = None
- repository = FakeRepository("/base/repo", "third_party/external")
- gn_generator = FakeBuildGNGenerator(repository, os.path.abspath(
- os.path.join(os.path.dirname(__file__),
- "../../../public/tools/mojom_fetcher")))
- gn_generator.generate()
- output_stream = gn_generator.opened_files[
- "/base/repo/third_party/external/domokit.org/bar/baz/BUILD.gn"]
- self.assertEquals(prepare_string(self.BAZ_BUILD_GN),
- prepare_string(output_stream.getvalue()))
-
-def prepare_string(value):
- lines = value.split("\n")
- lines = map(lambda l: l.strip().replace(" ", ""), lines)
- lines = filter(lambda l: not l.startswith("#"), lines)
- return ''.join(lines)
-
diff --git a/mojo/tools/testing/mojom_fetcher/repository_tests.py b/mojo/tools/testing/mojom_fetcher/repository_tests.py
deleted file mode 100644
index 46724d1..0000000
--- a/mojo/tools/testing/mojom_fetcher/repository_tests.py
+++ /dev/null
@@ -1,43 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import io
-import os.path
-import unittest
-
-from fetcher.dependency import Dependency
-
-# Fake repository for testing
-from fakes import FakeRepository
-
-
-class TestRepository(unittest.TestCase):
- def test_init(self):
- repository = FakeRepository("/path/to/repo", "third_party/external")
- self.assertEqual("/path/to/repo", repository.get_repo_root_directory())
- self.assertEqual("/path/to/repo/third_party/external",
- repository.get_external_directory())
-
- def test_get_missing_dependencies(self):
- repository = FakeRepository("/path/to/repo", "third_party/external")
- missing_deps = repository.get_missing_dependencies()
- self.assertEquals(["/path/to/repo"], repository.directories_walked)
- # Order is not important
- self.assertIn("/path/to/repo/foo/foo.mojom", repository.files_opened)
- self.assertIn("/path/to/repo/foo/bar/baz.mojom", repository.files_opened)
- self.assertIn(
- "/path/to/repo/third_party/external/services.domokit.org/foo/fiz.mojom",
- repository.files_opened)
- self.assertEquals(3, len(repository.files_opened))
-
- self.assertEquals([Dependency(repository,
- "/path/to/repo/third_party/external/services.domokit.org/foo/fiz.mojom",
- "services.fiz.org/foo/bar.mojom")], missing_deps)
-
- def test_get_external_urls(self):
- repository = FakeRepository("/path/to/repo", "third_party/external")
- urls = repository.get_external_urls()
- self.assertEquals(["/path/to/repo/third_party/external"],
- repository.directories_walked)
- self.assertEquals(["services.domokit.org/foo/fiz.mojom"], urls)