| #!/usr/bin/env python |
| # Copyright (c) 2022 Project CHIP Authors |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| import unittest |
| import sys |
| import os |
| |
| sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) |
| from build.target import BuildTarget, TargetPart # noqa: E402 |
| |
| |
| class FakeBuilder: |
| def __init__(self, **kargs): |
| self.kargs = kargs |
| |
| |
| class TestGlobMatcher(unittest.TestCase): |
| |
| def test_one_fixed_target(self): |
| t = BuildTarget('fake', FakeBuilder) |
| t.AppendFixedTargets([ |
| TargetPart('foo', foo=1), |
| TargetPart('bar', bar=2), |
| ]) |
| |
| self.assertEqual(t.HumanString(), "fake-{foo,bar}") |
| |
| self.assertIsNotNone(t.StringIntoTargetParts('fake-foo')) |
| self.assertIsNotNone(t.StringIntoTargetParts('fake-bar')) |
| self.assertIsNone(t.StringIntoTargetParts('fake-baz')) |
| |
| def test_fixed_targets(self): |
| t = BuildTarget('fake', FakeBuilder) |
| t.AppendFixedTargets([ |
| TargetPart('foo', foo=1), |
| TargetPart('bar', bar=2), |
| ]) |
| t.AppendFixedTargets([ |
| TargetPart('1', a=1), |
| TargetPart('2', a=2), |
| TargetPart('3', a=3), |
| ]) |
| t.AppendFixedTargets([ |
| TargetPart('1', b=1), |
| TargetPart('2', b=2), |
| TargetPart('3', b=3), |
| ]) |
| |
| self.assertEqual( |
| t.HumanString(), |
| "fake-{foo,bar}-{1,2,3}-{1,2,3}" |
| ) |
| |
| self.assertIsNotNone(t.StringIntoTargetParts('fake-foo-1-2')) |
| self.assertIsNotNone(t.StringIntoTargetParts('fake-foo-2-3')) |
| self.assertIsNotNone(t.StringIntoTargetParts('fake-bar-3-1')) |
| self.assertIsNone(t.StringIntoTargetParts('fake-bar-1')) |
| self.assertIsNone(t.StringIntoTargetParts('fake-baz-1-2')) |
| self.assertIsNone(t.StringIntoTargetParts('fake-foo-bar')) |
| self.assertIsNone(t.StringIntoTargetParts('fake-1-2')) |
| self.assertIsNone(t.StringIntoTargetParts('fake-foo')) |
| self.assertIsNone(t.StringIntoTargetParts('fake-1-2-3')) |
| |
| def test_modifiers(self): |
| t = BuildTarget('fake', FakeBuilder) |
| t.AppendFixedTargets([ |
| TargetPart('foo', foo=1), |
| TargetPart('bar', bar=2), |
| ]) |
| |
| t.AppendFixedTargets([ |
| TargetPart('one', value=1), |
| TargetPart('two', value=2), |
| ]) |
| |
| t.AppendModifier('m1', m=1).ExceptIfRe('-m2') |
| t.AppendModifier('m2', m=2).ExceptIfRe('-m1') |
| t.AppendModifier('x1', x=1) |
| t.AppendModifier('y1', x=1).OnlyIfRe('-foo-') |
| |
| self.assertEqual( |
| t.HumanString(), |
| "fake-{foo,bar}-{one,two}[-m1][-m2][-x1][-y1]" |
| ) |
| |
| self.assertEqual( |
| set(t.AllVariants()), |
| { |
| 'fake-foo-one', |
| 'fake-foo-one-m1', |
| 'fake-foo-one-m1-x1', |
| 'fake-foo-one-m1-x1-y1', |
| 'fake-foo-one-m1-y1', |
| 'fake-foo-one-m2', |
| 'fake-foo-one-m2-x1', |
| 'fake-foo-one-m2-x1-y1', |
| 'fake-foo-one-m2-y1', |
| 'fake-foo-one-x1', |
| 'fake-foo-one-x1-y1', |
| 'fake-foo-one-y1', |
| 'fake-foo-two', |
| 'fake-foo-two-m1', |
| 'fake-foo-two-m1-x1', |
| 'fake-foo-two-m1-x1-y1', |
| 'fake-foo-two-m1-y1', |
| 'fake-foo-two-m2', |
| 'fake-foo-two-m2-x1', |
| 'fake-foo-two-m2-x1-y1', |
| 'fake-foo-two-m2-y1', |
| 'fake-foo-two-x1', |
| 'fake-foo-two-x1-y1', |
| 'fake-foo-two-y1', |
| 'fake-bar-one', |
| 'fake-bar-one-m1', |
| 'fake-bar-one-m1-x1', |
| 'fake-bar-one-m2', |
| 'fake-bar-one-m2-x1', |
| 'fake-bar-one-x1', |
| 'fake-bar-two', |
| 'fake-bar-two-m1', |
| 'fake-bar-two-m1-x1', |
| 'fake-bar-two-m2', |
| 'fake-bar-two-m2-x1', |
| 'fake-bar-two-x1', |
| } |
| ) |
| |
| self.assertIsNotNone(t.StringIntoTargetParts('fake-foo-one')) |
| self.assertIsNotNone(t.StringIntoTargetParts('fake-bar-one-m1')) |
| self.assertIsNotNone(t.StringIntoTargetParts('fake-foo-one-m2')) |
| self.assertIsNotNone(t.StringIntoTargetParts('fake-bar-one-x1')) |
| self.assertIsNotNone(t.StringIntoTargetParts('fake-foo-one-y1')) |
| self.assertIsNotNone(t.StringIntoTargetParts('fake-foo-one-m1-y1')) |
| |
| self.assertIsNone(t.StringIntoTargetParts('fake-bar-one-m1-y1')) |
| self.assertIsNone(t.StringIntoTargetParts('fake-foo-one-m1-m2')) |
| self.assertIsNone(t.StringIntoTargetParts('fake-bar-m1')) |
| self.assertIsNone(t.StringIntoTargetParts('fake-foo-x1-y1')) |
| |
| |
| if __name__ == '__main__': |
| unittest.main() |