| # Copyright 2019 The ChromiumOS Authors |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| """The matching utils unit tests.""" |
| |
| import os |
| |
| from chromite.lib import cros_test_lib |
| from chromite.utils import matching |
| |
| |
| class GetMostLikelyMatchedObjectTest(cros_test_lib.TestCase): |
| """GetMostLikelyMatchedObject tests.""" |
| |
| def testNoSimilar(self) -> None: |
| """Test no results when no similar items.""" |
| haystack = ["1234", "5678"] |
| needle = "abcd" |
| |
| result = matching.GetMostLikelyMatchedObject(haystack, needle) |
| self.assertFalse(result) |
| |
| def testSimilar(self) -> None: |
| """Test similar items are found.""" |
| haystack = ["abce", "aecd", "1234"] |
| needle = "abcd" |
| |
| result = matching.GetMostLikelyMatchedObject( |
| haystack, needle, matched_score_threshold=0.6 |
| ) |
| self.assertCountEqual(["abce", "aecd"], result) |
| |
| def testSimilarThreshold(self) -> None: |
| """Test the threshold is correctly applied.""" |
| haystack = ["abce", "aecd", "1234"] |
| needle = "abcd" |
| |
| result = matching.GetMostLikelyMatchedObject( |
| haystack, needle, matched_score_threshold=0.8 |
| ) |
| self.assertFalse(result) |
| |
| |
| class FindFilesMatchingTest(cros_test_lib.TempDirTestCase): |
| """FindFilesMatching tests.""" |
| |
| def setUp(self) -> None: |
| D = cros_test_lib.Directory |
| |
| filesystem = ( |
| D( |
| "path", |
| ( |
| D( |
| "to", |
| ( |
| "example.txt", |
| "example.csv", |
| "thing.txt", |
| "another.csv", |
| ), |
| ), |
| D("excluded", ("example.txt",)), |
| ), |
| ), |
| ) |
| cros_test_lib.CreateOnDiskHierarchy(self.tempdir, filesystem) |
| |
| base_path = os.path.join(self.tempdir, "path", "to") |
| another_csv = os.path.join(base_path, "another.csv") |
| example_csv = os.path.join(base_path, "example.csv") |
| example_txt = os.path.join(base_path, "example.txt") |
| thing_txt = os.path.join(base_path, "thing.txt") |
| |
| self.csvs = [another_csv, example_csv] |
| self.txts = [example_txt, thing_txt] |
| |
| self.excluded = os.path.join(self.tempdir, "path", "excluded") |
| |
| def testFindMatching(self) -> None: |
| """Simple find matching.""" |
| result = matching.FindFilesMatching( |
| "*.csv", target=self.tempdir, cwd="/" |
| ) |
| self.assertCountEqual(self.csvs, result) |
| |
| def testExcludeDirs(self) -> None: |
| """Test the excluded directories works.""" |
| result = matching.FindFilesMatching( |
| "*.txt", target=self.tempdir, cwd="/", exclude_dirs=(self.excluded,) |
| ) |
| self.assertCountEqual(self.txts, result) |
| |
| def testCwd(self) -> None: |
| """Test the paths change relative to the cwd.""" |
| result = matching.FindFilesMatching( |
| "*.csv", target="path", cwd=self.tempdir |
| ) |
| # Convert the csv paths to be relative to the tempdir. |
| expected = [os.path.relpath(x, start=self.tempdir) for x in self.csvs] |
| self.assertCountEqual(expected, result) |