| #!/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() |