blob: 8781ffedb310a0b7967792ac38ce75f14d58bf38 [file] [log] [blame]
#!/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)