1*61c4878aSAndroid Build Coastguard Worker#!/usr/bin/env python3 2*61c4878aSAndroid Build Coastguard Worker# Copyright 2020 The Pigweed Authors 3*61c4878aSAndroid Build Coastguard Worker# 4*61c4878aSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); you may not 5*61c4878aSAndroid Build Coastguard Worker# use this file except in compliance with the License. You may obtain a copy of 6*61c4878aSAndroid Build Coastguard Worker# the License at 7*61c4878aSAndroid Build Coastguard Worker# 8*61c4878aSAndroid Build Coastguard Worker# https://www.apache.org/licenses/LICENSE-2.0 9*61c4878aSAndroid Build Coastguard Worker# 10*61c4878aSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 11*61c4878aSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12*61c4878aSAndroid Build Coastguard Worker# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13*61c4878aSAndroid Build Coastguard Worker# License for the specific language governing permissions and limitations under 14*61c4878aSAndroid Build Coastguard Worker# the License. 15*61c4878aSAndroid Build Coastguard Worker"""Tests for presubmit tools.""" 16*61c4878aSAndroid Build Coastguard Worker 17*61c4878aSAndroid Build Coastguard Workerimport unittest 18*61c4878aSAndroid Build Coastguard Worker 19*61c4878aSAndroid Build Coastguard Workerfrom pw_presubmit import presubmit 20*61c4878aSAndroid Build Coastguard Worker 21*61c4878aSAndroid Build Coastguard Worker 22*61c4878aSAndroid Build Coastguard Workerdef _fake_function_1(_): 23*61c4878aSAndroid Build Coastguard Worker """Fake presubmit function.""" 24*61c4878aSAndroid Build Coastguard Worker 25*61c4878aSAndroid Build Coastguard Worker 26*61c4878aSAndroid Build Coastguard Workerdef _fake_function_2(_): 27*61c4878aSAndroid Build Coastguard Worker """Fake presubmit function.""" 28*61c4878aSAndroid Build Coastguard Worker 29*61c4878aSAndroid Build Coastguard Worker 30*61c4878aSAndroid Build Coastguard Workerdef _all_substeps(program): 31*61c4878aSAndroid Build Coastguard Worker substeps = {} 32*61c4878aSAndroid Build Coastguard Worker for step in program: 33*61c4878aSAndroid Build Coastguard Worker # pylint: disable=protected-access 34*61c4878aSAndroid Build Coastguard Worker for sub in step.substeps(): 35*61c4878aSAndroid Build Coastguard Worker substeps[sub.name or step.name] = sub._func 36*61c4878aSAndroid Build Coastguard Worker # pylint: enable=protected-access 37*61c4878aSAndroid Build Coastguard Worker return substeps 38*61c4878aSAndroid Build Coastguard Worker 39*61c4878aSAndroid Build Coastguard Worker 40*61c4878aSAndroid Build Coastguard Workerclass ProgramsTest(unittest.TestCase): 41*61c4878aSAndroid Build Coastguard Worker """Tests the presubmit Programs abstraction.""" 42*61c4878aSAndroid Build Coastguard Worker 43*61c4878aSAndroid Build Coastguard Worker def setUp(self): 44*61c4878aSAndroid Build Coastguard Worker self._programs = presubmit.Programs( 45*61c4878aSAndroid Build Coastguard Worker first=[_fake_function_1, (), [(_fake_function_2,)]], 46*61c4878aSAndroid Build Coastguard Worker second=[_fake_function_2], 47*61c4878aSAndroid Build Coastguard Worker ) 48*61c4878aSAndroid Build Coastguard Worker 49*61c4878aSAndroid Build Coastguard Worker def test_empty(self): 50*61c4878aSAndroid Build Coastguard Worker self.assertEqual({}, presubmit.Programs()) 51*61c4878aSAndroid Build Coastguard Worker 52*61c4878aSAndroid Build Coastguard Worker def test_access_present_members_first(self): 53*61c4878aSAndroid Build Coastguard Worker self.assertEqual('first', self._programs['first'].name) 54*61c4878aSAndroid Build Coastguard Worker self.assertEqual( 55*61c4878aSAndroid Build Coastguard Worker ('_fake_function_1', '_fake_function_2'), 56*61c4878aSAndroid Build Coastguard Worker tuple(x.name for x in self._programs['first']), 57*61c4878aSAndroid Build Coastguard Worker ) 58*61c4878aSAndroid Build Coastguard Worker 59*61c4878aSAndroid Build Coastguard Worker self.assertEqual(2, len(self._programs['first'])) 60*61c4878aSAndroid Build Coastguard Worker substeps = _all_substeps( 61*61c4878aSAndroid Build Coastguard Worker self._programs['first'] # pylint: disable=protected-access 62*61c4878aSAndroid Build Coastguard Worker ).values() 63*61c4878aSAndroid Build Coastguard Worker self.assertEqual(2, len(substeps)) 64*61c4878aSAndroid Build Coastguard Worker self.assertEqual((_fake_function_1, _fake_function_2), tuple(substeps)) 65*61c4878aSAndroid Build Coastguard Worker 66*61c4878aSAndroid Build Coastguard Worker def test_access_present_members_second(self): 67*61c4878aSAndroid Build Coastguard Worker self.assertEqual('second', self._programs['second'].name) 68*61c4878aSAndroid Build Coastguard Worker self.assertEqual( 69*61c4878aSAndroid Build Coastguard Worker ('_fake_function_2',), 70*61c4878aSAndroid Build Coastguard Worker tuple(x.name for x in self._programs['second']), 71*61c4878aSAndroid Build Coastguard Worker ) 72*61c4878aSAndroid Build Coastguard Worker 73*61c4878aSAndroid Build Coastguard Worker self.assertEqual(1, len(self._programs['second'])) 74*61c4878aSAndroid Build Coastguard Worker substeps = _all_substeps( 75*61c4878aSAndroid Build Coastguard Worker self._programs['second'] # pylint: disable=protected-access 76*61c4878aSAndroid Build Coastguard Worker ).values() 77*61c4878aSAndroid Build Coastguard Worker self.assertEqual(1, len(substeps)) 78*61c4878aSAndroid Build Coastguard Worker self.assertEqual((_fake_function_2,), tuple(substeps)) 79*61c4878aSAndroid Build Coastguard Worker 80*61c4878aSAndroid Build Coastguard Worker def test_access_missing_member(self): 81*61c4878aSAndroid Build Coastguard Worker with self.assertRaises(KeyError): 82*61c4878aSAndroid Build Coastguard Worker _ = self._programs['not_there'] 83*61c4878aSAndroid Build Coastguard Worker 84*61c4878aSAndroid Build Coastguard Worker def test_all_steps(self): 85*61c4878aSAndroid Build Coastguard Worker all_steps = self._programs.all_steps() 86*61c4878aSAndroid Build Coastguard Worker self.assertEqual(len(all_steps), 2) 87*61c4878aSAndroid Build Coastguard Worker all_substeps = _all_substeps(all_steps.values()) 88*61c4878aSAndroid Build Coastguard Worker self.assertEqual(len(all_substeps), 2) 89*61c4878aSAndroid Build Coastguard Worker 90*61c4878aSAndroid Build Coastguard Worker # pylint: disable=protected-access 91*61c4878aSAndroid Build Coastguard Worker self.assertEqual(all_substeps['_fake_function_1'], _fake_function_1) 92*61c4878aSAndroid Build Coastguard Worker self.assertEqual(all_substeps['_fake_function_2'], _fake_function_2) 93*61c4878aSAndroid Build Coastguard Worker # pylint: enable=protected-access 94*61c4878aSAndroid Build Coastguard Worker 95*61c4878aSAndroid Build Coastguard Worker 96*61c4878aSAndroid Build Coastguard Workerif __name__ == '__main__': 97*61c4878aSAndroid Build Coastguard Worker unittest.main() 98