| #!/usr/bin/env python3 |
| # Copyright 2023 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 os |
| import sys |
| import unittest |
| |
| _THIS_DIR = os.path.abspath(os.path.dirname(__file__)) |
| # The repo's root directory. |
| _ROOT_DIR = os.path.abspath(os.path.join(_THIS_DIR, "..", "..")) |
| |
| # Add the repo's root directory for clearer imports. |
| sys.path.insert(0, _ROOT_DIR) |
| |
| import gclient_utils |
| import metadata.validate |
| |
| # Common paths for tests. |
| _SOURCE_FILE_DIR = os.path.join(_THIS_DIR, "data") |
| _VALID_METADATA_FILEPATH = os.path.join(_THIS_DIR, "data", |
| "README.chromium.test.multi-valid") |
| _INVALID_METADATA_FILEPATH = os.path.join(_THIS_DIR, "data", |
| "README.chromium.test.multi-invalid") |
| |
| |
| class ValidateContentTest(unittest.TestCase): |
| """Tests for the validate_content function.""" |
| def test_empty(self): |
| # Validate empty content (should result in a validation error). |
| results = metadata.validate.validate_content( |
| content="", |
| source_file_dir=_SOURCE_FILE_DIR, |
| repo_root_dir=_THIS_DIR, |
| ) |
| self.assertEqual(len(results), 1) |
| self.assertTrue(results[0].is_fatal()) |
| |
| def test_valid(self): |
| # Validate valid file content (no errors or warnings). |
| results = metadata.validate.validate_content( |
| content=gclient_utils.FileRead(_VALID_METADATA_FILEPATH), |
| source_file_dir=_SOURCE_FILE_DIR, |
| repo_root_dir=_THIS_DIR, |
| ) |
| self.assertEqual(len(results), 0) |
| |
| def test_invalid(self): |
| # Validate invalid file content (both errors and warnings). |
| results = metadata.validate.validate_content( |
| content=gclient_utils.FileRead(_INVALID_METADATA_FILEPATH), |
| source_file_dir=_SOURCE_FILE_DIR, |
| repo_root_dir=_THIS_DIR, |
| ) |
| self.assertEqual(len(results), 9) |
| error_count = 0 |
| warning_count = 0 |
| for result in results: |
| if result.is_fatal(): |
| error_count += 1 |
| else: |
| warning_count += 1 |
| self.assertEqual(error_count, 7) |
| self.assertEqual(warning_count, 2) |
| |
| |
| class ValidateFileTest(unittest.TestCase): |
| """Tests for the validate_file function.""" |
| def test_missing(self): |
| # Validate a file that does not exist. |
| results = metadata.validate.validate_file( |
| filepath=os.path.join(_THIS_DIR, "data", "MISSING.chromium"), |
| repo_root_dir=_THIS_DIR, |
| ) |
| # There should be exactly 1 error returned. |
| self.assertEqual(len(results), 1) |
| self.assertTrue(results[0].is_fatal()) |
| |
| def test_valid(self): |
| # Validate a valid file (no errors or warnings). |
| results = metadata.validate.validate_file( |
| filepath=_VALID_METADATA_FILEPATH, |
| repo_root_dir=_THIS_DIR, |
| ) |
| self.assertEqual(len(results), 0) |
| |
| def test_invalid(self): |
| # Validate an invalid file (both errors and warnings). |
| results = metadata.validate.validate_file( |
| filepath=_INVALID_METADATA_FILEPATH, |
| repo_root_dir=_THIS_DIR, |
| ) |
| self.assertEqual(len(results), 9) |
| error_count = 0 |
| warning_count = 0 |
| for result in results: |
| if result.is_fatal(): |
| error_count += 1 |
| else: |
| warning_count += 1 |
| self.assertEqual(error_count, 7) |
| self.assertEqual(warning_count, 2) |
| |
| |
| class CheckFileTest(unittest.TestCase): |
| """Tests for the check_file function.""" |
| def test_missing(self): |
| # Check a file that does not exist. |
| errors, warnings = metadata.validate.check_file( |
| filepath=os.path.join(_THIS_DIR, "data", "MISSING.chromium"), |
| repo_root_dir=_THIS_DIR, |
| ) |
| # TODO(aredulla): update this test once validation errors can be |
| # returned as errors. Bug: b/285453019. |
| # self.assertEqual(len(errors), 1) |
| # self.assertEqual(len(warnings), 0) |
| self.assertEqual(len(errors), 0) |
| self.assertEqual(len(warnings), 1) |
| |
| def test_valid(self): |
| # Check file with valid content (no errors or warnings). |
| errors, warnings = metadata.validate.check_file( |
| filepath=_VALID_METADATA_FILEPATH, |
| repo_root_dir=_THIS_DIR, |
| ) |
| self.assertEqual(len(errors), 0) |
| self.assertEqual(len(warnings), 0) |
| |
| def test_invalid(self): |
| # Check file with invalid content (both errors and warnings). |
| errors, warnings = metadata.validate.check_file( |
| filepath=_INVALID_METADATA_FILEPATH, |
| repo_root_dir=_THIS_DIR, |
| ) |
| # TODO(aredulla): update this test once validation errors can be |
| # returned as errors. Bug: b/285453019. |
| # self.assertEqual(len(errors), 7) |
| # self.assertEqual(len(warnings), 2) |
| self.assertEqual(len(errors), 0) |
| self.assertEqual(len(warnings), 9) |
| |
| |
| if __name__ == "__main__": |
| unittest.main() |