1*7594170eSAndroid Build Coastguard Worker# Copyright (C) 2023 The Android Open Source Project 2*7594170eSAndroid Build Coastguard Worker# 3*7594170eSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 4*7594170eSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 5*7594170eSAndroid Build Coastguard Worker# You may obtain a copy of the License at 6*7594170eSAndroid Build Coastguard Worker# 7*7594170eSAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 8*7594170eSAndroid Build Coastguard Worker# 9*7594170eSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 10*7594170eSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 11*7594170eSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*7594170eSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 13*7594170eSAndroid Build Coastguard Worker# limitations under the License. 14*7594170eSAndroid Build Coastguard Workerimport textwrap 15*7594170eSAndroid Build Coastguard Workerimport unittest 16*7594170eSAndroid Build Coastguard Workerfrom io import StringIO 17*7594170eSAndroid Build Coastguard Worker 18*7594170eSAndroid Build Coastguard Workerfrom clone import ModuleName 19*7594170eSAndroid Build Coastguard Workerfrom clone import _extract_templates_helper 20*7594170eSAndroid Build Coastguard Workerfrom clone import module_defs 21*7594170eSAndroid Build Coastguard Workerfrom clone import name_in 22*7594170eSAndroid Build Coastguard Workerfrom clone import type_in 23*7594170eSAndroid Build Coastguard Worker 24*7594170eSAndroid Build Coastguard Worker 25*7594170eSAndroid Build Coastguard Workerclass CloneTest(unittest.TestCase): 26*7594170eSAndroid Build Coastguard Worker def setUp(self) -> None: 27*7594170eSAndroid Build Coastguard Worker self.bp = textwrap.dedent( 28*7594170eSAndroid Build Coastguard Worker """\ 29*7594170eSAndroid Build Coastguard Worker //licence text 30*7594170eSAndroid Build Coastguard Worker alias=blah 31*7594170eSAndroid Build Coastguard Worker cc_library { 32*7594170eSAndroid Build Coastguard Worker out: ["dont"], 33*7594170eSAndroid Build Coastguard Worker name: "a", 34*7594170eSAndroid Build Coastguard Worker other: 45 35*7594170eSAndroid Build Coastguard Worker } 36*7594170eSAndroid Build Coastguard Worker genrule { 37*7594170eSAndroid Build Coastguard Worker name: "b", 38*7594170eSAndroid Build Coastguard Worker out: [ 39*7594170eSAndroid Build Coastguard Worker "oph" 40*7594170eSAndroid Build Coastguard Worker ] 41*7594170eSAndroid Build Coastguard Worker other: { 42*7594170eSAndroid Build Coastguard Worker name: 'not-a-name' 43*7594170eSAndroid Build Coastguard Worker blah: "nested" 44*7594170eSAndroid Build Coastguard Worker } 45*7594170eSAndroid Build Coastguard Worker } 46*7594170eSAndroid Build Coastguard Worker """ 47*7594170eSAndroid Build Coastguard Worker ) 48*7594170eSAndroid Build Coastguard Worker 49*7594170eSAndroid Build Coastguard Worker def test_module_def(self): 50*7594170eSAndroid Build Coastguard Worker defs = list(module_defs(StringIO(self.bp))) 51*7594170eSAndroid Build Coastguard Worker self.assertEqual(len(defs), 2) 52*7594170eSAndroid Build Coastguard Worker name, content = defs[0] 53*7594170eSAndroid Build Coastguard Worker self.assertEqual(name, "cc_library") 54*7594170eSAndroid Build Coastguard Worker self.assertEqual( 55*7594170eSAndroid Build Coastguard Worker content, 56*7594170eSAndroid Build Coastguard Worker textwrap.dedent( 57*7594170eSAndroid Build Coastguard Worker """\ 58*7594170eSAndroid Build Coastguard Worker cc_library { 59*7594170eSAndroid Build Coastguard Worker out: ["dont"], 60*7594170eSAndroid Build Coastguard Worker name: "a", 61*7594170eSAndroid Build Coastguard Worker other: 45 62*7594170eSAndroid Build Coastguard Worker } 63*7594170eSAndroid Build Coastguard Worker """ 64*7594170eSAndroid Build Coastguard Worker ), 65*7594170eSAndroid Build Coastguard Worker ) 66*7594170eSAndroid Build Coastguard Worker name, content = defs[1] 67*7594170eSAndroid Build Coastguard Worker self.assertEqual(name, "genrule") 68*7594170eSAndroid Build Coastguard Worker self.assertEqual( 69*7594170eSAndroid Build Coastguard Worker content, 70*7594170eSAndroid Build Coastguard Worker textwrap.dedent( 71*7594170eSAndroid Build Coastguard Worker """\ 72*7594170eSAndroid Build Coastguard Worker genrule { 73*7594170eSAndroid Build Coastguard Worker name: "b", 74*7594170eSAndroid Build Coastguard Worker out: [ 75*7594170eSAndroid Build Coastguard Worker "oph" 76*7594170eSAndroid Build Coastguard Worker ] 77*7594170eSAndroid Build Coastguard Worker other: { 78*7594170eSAndroid Build Coastguard Worker name: 'not-a-name' 79*7594170eSAndroid Build Coastguard Worker blah: "nested" 80*7594170eSAndroid Build Coastguard Worker } 81*7594170eSAndroid Build Coastguard Worker } 82*7594170eSAndroid Build Coastguard Worker """ 83*7594170eSAndroid Build Coastguard Worker ), 84*7594170eSAndroid Build Coastguard Worker ) 85*7594170eSAndroid Build Coastguard Worker 86*7594170eSAndroid Build Coastguard Worker def test_non_existent(self): 87*7594170eSAndroid Build Coastguard Worker cloners = _extract_templates_helper(StringIO(self.bp), name_in("not-a-name")) 88*7594170eSAndroid Build Coastguard Worker self.assertEqual(len(cloners), 0) 89*7594170eSAndroid Build Coastguard Worker 90*7594170eSAndroid Build Coastguard Worker def test_by_type(self): 91*7594170eSAndroid Build Coastguard Worker cloners = _extract_templates_helper(StringIO(self.bp), type_in("genrule")) 92*7594170eSAndroid Build Coastguard Worker self.assertEqual(len(cloners), 1) 93*7594170eSAndroid Build Coastguard Worker self.assertEqual( 94*7594170eSAndroid Build Coastguard Worker cloners[ModuleName("b")].substitute(suffix="test"), 95*7594170eSAndroid Build Coastguard Worker textwrap.dedent( 96*7594170eSAndroid Build Coastguard Worker """\ 97*7594170eSAndroid Build Coastguard Worker genrule { 98*7594170eSAndroid Build Coastguard Worker name: "b-test", 99*7594170eSAndroid Build Coastguard Worker out: [ 100*7594170eSAndroid Build Coastguard Worker "oph-test" 101*7594170eSAndroid Build Coastguard Worker ] 102*7594170eSAndroid Build Coastguard Worker other: { 103*7594170eSAndroid Build Coastguard Worker name: 'not-a-name' 104*7594170eSAndroid Build Coastguard Worker blah: "nested" 105*7594170eSAndroid Build Coastguard Worker } 106*7594170eSAndroid Build Coastguard Worker } 107*7594170eSAndroid Build Coastguard Worker """ 108*7594170eSAndroid Build Coastguard Worker ), 109*7594170eSAndroid Build Coastguard Worker ) 110*7594170eSAndroid Build Coastguard Worker 111*7594170eSAndroid Build Coastguard Worker def test_by_name(self): 112*7594170eSAndroid Build Coastguard Worker cloners = _extract_templates_helper(StringIO(self.bp), name_in("a", "b")) 113*7594170eSAndroid Build Coastguard Worker self.assertEqual(len(cloners), 2) 114*7594170eSAndroid Build Coastguard Worker self.assertEqual( 115*7594170eSAndroid Build Coastguard Worker cloners[ModuleName("a")].substitute(suffix="test"), 116*7594170eSAndroid Build Coastguard Worker textwrap.dedent( 117*7594170eSAndroid Build Coastguard Worker """\ 118*7594170eSAndroid Build Coastguard Worker cc_library { 119*7594170eSAndroid Build Coastguard Worker out: ["dont"], 120*7594170eSAndroid Build Coastguard Worker name: "a-test", 121*7594170eSAndroid Build Coastguard Worker other: 45 122*7594170eSAndroid Build Coastguard Worker } 123*7594170eSAndroid Build Coastguard Worker """ 124*7594170eSAndroid Build Coastguard Worker ), 125*7594170eSAndroid Build Coastguard Worker ) 126*7594170eSAndroid Build Coastguard Worker 127*7594170eSAndroid Build Coastguard Worker 128*7594170eSAndroid Build Coastguard Workerif __name__ == "__main__": 129*7594170eSAndroid Build Coastguard Worker unittest.main()