| #!/usr/bin/env vpython3 |
| # Copyright 2026 The Chromium Authors |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| """Unit tests for parse_gerrit_url.py.""" |
| |
| import unittest |
| import parse_gerrit_url |
| |
| |
| class ParseGerritUrlTest(unittest.TestCase): |
| """Tests for parse_gerrit_url.""" |
| |
| def test_standard_url_without_patchset(self): |
| url = 'https://chromium-review.googlesource.com/c/chromium/src/+/7916168' |
| res = parse_gerrit_url.parse_gerrit_url(url) |
| self.assertEqual(res['host'], 'chromium-review.googlesource.com') |
| self.assertEqual(res['project'], 'chromium/src') |
| self.assertEqual(res['change'], 7916168) |
| self.assertEqual(res['patchset'], 1) |
| |
| def test_standard_url_with_patchset(self): |
| url = 'https://chromium-review.googlesource.com/c/chromium/src/+/7916168/3' |
| res = parse_gerrit_url.parse_gerrit_url(url) |
| self.assertEqual(res['host'], 'chromium-review.googlesource.com') |
| self.assertEqual(res['project'], 'chromium/src') |
| self.assertEqual(res['change'], 7916168) |
| self.assertEqual(res['patchset'], 3) |
| |
| def test_url_with_file_path(self): |
| url = 'https://chromium-review.googlesource.com/c/chromium/src/+/7916168/2/chrome/browser/tab.cc' |
| res = parse_gerrit_url.parse_gerrit_url(url) |
| self.assertEqual(res['host'], 'chromium-review.googlesource.com') |
| self.assertEqual(res['project'], 'chromium/src') |
| self.assertEqual(res['change'], 7916168) |
| self.assertEqual(res['patchset'], 2) |
| |
| def test_url_with_query_and_fragment(self): |
| url = 'https://chromium-review.googlesource.com/c/chromium/src/+/7916168/4?tab=checks#message' |
| res = parse_gerrit_url.parse_gerrit_url(url) |
| self.assertEqual(res['host'], 'chromium-review.googlesource.com') |
| self.assertEqual(res['project'], 'chromium/src') |
| self.assertEqual(res['change'], 7916168) |
| self.assertEqual(res['patchset'], 4) |
| |
| def test_url_with_trailing_slash(self): |
| url = 'https://chromium-review.googlesource.com/c/chromium/src/+/7916168/' |
| res = parse_gerrit_url.parse_gerrit_url(url) |
| self.assertEqual(res['host'], 'chromium-review.googlesource.com') |
| self.assertEqual(res['project'], 'chromium/src') |
| self.assertEqual(res['change'], 7916168) |
| self.assertEqual(res['patchset'], 1) |
| |
| def test_different_project_and_host(self): |
| url = 'https://skia-review.googlesource.com/c/skia/+/12345/6' |
| res = parse_gerrit_url.parse_gerrit_url(url) |
| self.assertEqual(res['host'], 'skia-review.googlesource.com') |
| self.assertEqual(res['project'], 'skia') |
| self.assertEqual(res['change'], 12345) |
| self.assertEqual(res['patchset'], 6) |
| |
| def test_invalid_url(self): |
| with self.assertRaises(ValueError): |
| parse_gerrit_url.parse_gerrit_url('https://example.com/invalid') |
| |
| def test_invalid_url_no_c_prefix(self): |
| with self.assertRaises(ValueError): |
| parse_gerrit_url.parse_gerrit_url( |
| 'https://chromium-review.googlesource.com/q/status:open') |
| |
| def test_invalid_url_no_change_number(self): |
| with self.assertRaises(ValueError): |
| parse_gerrit_url.parse_gerrit_url( |
| 'https://chromium-review.googlesource.com/c/chromium/src/+/invalid') |
| |
| def test_invalid_empty_url(self): |
| with self.assertRaises(ValueError): |
| parse_gerrit_url.parse_gerrit_url('') |
| |
| |
| if __name__ == '__main__': |
| unittest.main() |