# Copyright 2016 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import json
import unittest
from blinkpy.common.host_mock import MockHost
from blinkpy.common.path_finder import RELATIVE_WPT_TESTS
from blinkpy.w3c.common import (read_credentials, is_testharness_baseline,
is_disallowed_ini, is_basename_skipped,
is_file_exportable)
class CommonTest(unittest.TestCase):
def setUp(self):
host = MockHost()
self.project_config = host.project_config
def test_get_credentials_empty(self):
host = MockHost()
host.filesystem.write_text_file('/tmp/credentials.json', '{}')
self.assertEqual(read_credentials(host, '/tmp/credentials.json'), {})
def test_get_credentials_none(self):
self.assertEqual(read_credentials(MockHost(), None), {})
def test_get_credentials_gets_values_from_environment(self):
host = MockHost()
host.environ.update({
'GH_USER': 'user-github',
'GH_TOKEN': 'pass-github',
'GERRIT_USER': 'user-gerrit',
'GERRIT_TOKEN': 'pass-gerrit',
'UNUSED_VALUE': 'foo',
})
self.assertEqual(
read_credentials(host, None), {
'GH_USER': 'user-github',
'GH_TOKEN': 'pass-github',
'GERRIT_USER': 'user-gerrit',
'GERRIT_TOKEN': 'pass-gerrit',
})
def test_get_credentials_gets_values_from_file(self):
host = MockHost()
host.filesystem.write_text_file(
'/tmp/credentials.json',
json.dumps({
'GH_USER': 'user-github',
'GH_TOKEN': 'pass-github',
'GERRIT_USER': 'user-gerrit',
'GERRIT_TOKEN': 'pass-gerrit',
}))
self.assertEqual(
read_credentials(host, '/tmp/credentials.json'), {
'GH_USER': 'user-github',
'GH_TOKEN': 'pass-github',
'GERRIT_USER': 'user-gerrit',
'GERRIT_TOKEN': 'pass-gerrit',
})
def test_get_credentials_choose_file_over_environment(self):
host = MockHost()
host.environ.update({
'GH_USER': 'user-github-from-env',
'GH_TOKEN': 'pass-github-from-env',
'GERRIT_USER': 'user-gerrit-from-env',
'GERRIT_TOKEN': 'pass-gerrit-from-env',
})
host.filesystem.write_text_file(
'/tmp/credentials.json',
json.dumps({
'GH_USER': 'user-github-from-json',
'GH_TOKEN': 'pass-github-from-json',
}))
self.assertEqual(
read_credentials(host, '/tmp/credentials.json'), {
'GH_USER': 'user-github-from-json',
'GH_TOKEN': 'pass-github-from-json',
})
def test_is_testharness_baseline(self):
self.assertTrue(is_testharness_baseline('fake-test-expected.txt'))
self.assertTrue(
is_testharness_baseline('external/wpt/fake-test-expected.txt'))
self.assertTrue(
is_testharness_baseline('/tmp/wpt/fake-test-expected.txt'))
self.assertFalse(is_testharness_baseline('fake-test-expected.html'))
self.assertFalse(
is_testharness_baseline('external/wpt/fake-test-expected.html'))
def test_is_basename_skipped(self):
self.assertTrue(is_basename_skipped('MANIFEST.json'))
self.assertTrue(is_basename_skipped('DIR_METADATA'))
self.assertTrue(is_basename_skipped('OWNERS'))
self.assertTrue(is_basename_skipped('reftest.list'))
self.assertTrue(is_basename_skipped('.gitignore'))
self.assertFalse(is_basename_skipped('something.json'))
def test_is_disallowed_ini(self):
self.assertTrue(is_disallowed_ini('test.html.ini'))
self.assertTrue(is_disallowed_ini('__dir__.ini'))
def test_is_basename_skipped_asserts_basename(self):
with self.assertRaises(AssertionError):
is_basename_skipped('third_party/fake/OWNERS')
def test_is_file_exportable(self):
self.assertTrue(
is_file_exportable(RELATIVE_WPT_TESTS + 'html/fake-test.html',
self.project_config))
self.assertFalse(
is_file_exportable(
RELATIVE_WPT_TESTS + 'html/fake-test-expected.txt',
self.project_config))
self.assertFalse(
is_file_exportable(RELATIVE_WPT_TESTS + 'MANIFEST.json',
self.project_config))
self.assertFalse(
is_file_exportable(RELATIVE_WPT_TESTS + 'dom/OWNERS',
self.project_config))
self.assertFalse(
is_file_exportable(RELATIVE_WPT_TESTS + 'dom/DIR_METADATA',
self.project_config))
self.assertFalse(
is_file_exportable(
RELATIVE_WPT_TESTS +
'infrastructure/metadata/infrastructure/expected-fail/timeout.html.ini',
self.project_config))
self.assertFalse(
is_file_exportable(RELATIVE_WPT_TESTS + 'dom/historical.html.ini',
self.project_config))
self.assertFalse(
is_file_exportable(RELATIVE_WPT_TESTS + 'html/tools/PRESUBMIT.py',
self.project_config))
def test_is_file_exportable_asserts_path(self):
# Rejects basenames.
with self.assertRaises(AssertionError):
is_file_exportable('MANIFEST.json', self.project_config)
# Rejects files not in Chromium WPT.
with self.assertRaises(AssertionError):
is_file_exportable('third_party/fake/OWNERS', self.project_config)
# Rejects absolute paths.
with self.assertRaises(AssertionError):
is_file_exportable(
'/mock-checkout/' + RELATIVE_WPT_TESTS + 'OWNERS',
self.project_config)