blob: 60d49e65f971093c9ad4d3e2662b142d529bb80f [file] [log] [blame]
#!/usr/bin/env python3
# Copyright 2020 The Chromium OS 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
import stat
import tempfile
import unittest
from coil_urls import fix_line
from coil_urls import find_files
from coil_urls import fix_file
class TestRegex(unittest.TestCase):
def test_url_only(self):
self.assertEqual(fix_line(
'https://chromium.googlesource.com/chromiumos/docs/+/master/developer_guide.md'),
'https://chromium.googlesource.com/chromiumos/docs/+/HEAD/developer_guide.md')
def test_url_with_ref(self):
self.assertEqual(fix_line(
'https://chromium.googlesource.com/chromiumos/docs/+/refs/heads/master/developer_guide.md'),
'https://chromium.googlesource.com/chromiumos/docs/+/HEAD/developer_guide.md')
def test_text_and_url(self):
self.assertEqual(fix_line(
'Some text https://chromium.googlesource.com/chromiumos/docs/+/master/developer_guide.md after'),
'Some text https://chromium.googlesource.com/chromiumos/docs/+/HEAD/developer_guide.md after')
def test_multiple_urls(self):
self.assertEqual(fix_line(
'https://chromium.googlesource.com/chromiumos/docs/+/master/developer_guide.md'
' and https://chromium.googlesource.com/chromiumos/docs/+/master/developer_guide.md'),
'https://chromium.googlesource.com/chromiumos/docs/+/HEAD/developer_guide.md'
' and https://chromium.googlesource.com/chromiumos/docs/+/HEAD/developer_guide.md')
def test_no_url(self):
self.assertEqual(fix_line(
'Some text without a URL.'),
'Some text without a URL.')
def test_github_url(self):
self.assertEqual(fix_line(
'https://github.com/google/googletest/blob/master/googlemock/docs/cook_book.md#delegating-calls-to-a-parent-class'),
'https://github.com/google/googletest/blob/HEAD/googlemock/docs/cook_book.md#delegating-calls-to-a-parent-class')
def test_chromium_source_url(self):
self.assertEqual(fix_line(
'https://source.chromium.org/chromium/chromium/src/+/master:chromeos/services/machine_learning/public/cpp/service_connection.h'),
'https://source.chromium.org/chromium/chromium/src/+/HEAD:chromeos/services/machine_learning/public/cpp/service_connection.h')
def test_chromium_source_alt_url(self):
self.assertEqual(fix_line(
'https://source.chromium.org/chromium/chromium/src/+/refs/heads/master:chromeos/services/machine_learning/public/cpp/service_connection.h'),
'https://source.chromium.org/chromium/chromium/src/+/HEAD:chromeos/services/machine_learning/public/cpp/service_connection.h')
def test_android_url(self):
self.assertEqual(fix_line(
'https://android.googlesource.com/platform/external/qemu/+/master/docs/ANDROID-QEMUD.TXT#158'),
'https://android.googlesource.com/platform/external/qemu/+/HEAD/docs/ANDROID-QEMUD.TXT#158')
def test_chrome_internal_url(self):
self.assertEqual(fix_line(
'https://chrome-internal.googlesource.com/foo/bar/+/master/test.h'),
'https://chrome-internal.googlesource.com/foo/bar/+/HEAD/test.h')
class TestFindFiles(unittest.TestCase):
def test_find_files(self):
self.assertEqual(find_files(), ['coil_urls.py', 'coil_urls_test.py'])
class TestFixFile(unittest.TestCase):
TEST_FILE_TEXT = """
Some text without a URL.
https://chromium.googlesource.com/chromiumos/docs/+/master/developer_guide.md
Some more text.
"""
TEST_FILE_TEXT_EXPECTED = """
Some text without a URL.
https://chromium.googlesource.com/chromiumos/docs/+/HEAD/developer_guide.md
Some more text.
"""
TEST_FILE_NOT_UTF8 = b'\x80abc'
def test_fix_file(self):
tmp_file = tempfile.NamedTemporaryFile()
with open(tmp_file.name, 'w') as test_file:
test_file.write(self.TEST_FILE_TEXT)
fix_file(tmp_file.name)
with open(tmp_file.name) as test_file:
text = test_file.read()
self.assertEqual(text, self.TEST_FILE_TEXT_EXPECTED)
tmp_file.close()
def test_file_not_utf8(self):
tmp_file = tempfile.NamedTemporaryFile()
with open(tmp_file.name, 'wb') as test_file:
test_file.write(self.TEST_FILE_NOT_UTF8)
fix_file(tmp_file.name)
with open(tmp_file.name, 'rb') as test_file:
text = test_file.read()
self.assertEqual(text, self.TEST_FILE_NOT_UTF8)
tmp_file.close()
def test_metadata_not_changed(self):
tmp_file = tempfile.NamedTemporaryFile()
with open(tmp_file.name, 'w') as test_file:
test_file.write(self.TEST_FILE_TEXT)
orig_mode = stat.S_IFREG |\
stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR | \
stat.S_IRGRP | stat.S_IXGRP | \
stat.S_IROTH | stat.S_IXOTH
os.chmod(tmp_file.name, orig_mode)
fix_file(tmp_file.name)
# metadata should be preserved
st = os.stat(tmp_file.name)
self.assertEqual(orig_mode, st.st_mode)
tmp_file.close()
if __name__ == '__main__':
unittest.main()