1#!/usr/bin/env python3 2# 3# Copyright (C) 2014 The Android Open Source Project 4# 5# Licensed under the Apache License, Version 2.0 (the "License"); 6# you may not use this file except in compliance with the License. 7# You may obtain a copy of the License at 8# 9# http://www.apache.org/licenses/LICENSE-2.0 10# 11# Unless required by applicable law or agreed to in writing, software 12# distributed under the License is distributed on an "AS IS" BASIS, 13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14# See the License for the specific language governing permissions and 15# limitations under the License. 16 17from common.immutables import ImmutableDict 18from file_format.c1visualizer.parser import parse_c1_visualizer_stream 19from file_format.c1visualizer.struct import C1visualizerFile, C1visualizerPass 20 21import io 22import unittest 23 24 25class C1visualizerParser_Test(unittest.TestCase): 26 27 def create_file(self, data): 28 """ Creates an instance of CheckerFile from provided info. 29 30 Data format: ( [ <isa-feature>, ... ], 31 [ ( <case-name>, [ ( <text>, <assert-variant> ), ... ] ), ... ] 32 ) 33 """ 34 c1_file = C1visualizerFile("<c1_file>") 35 c1_file.instruction_set_features = data[0] 36 for pass_entry in data[1]: 37 pass_name = pass_entry[0] 38 pass_body = pass_entry[1] 39 c1_pass = C1visualizerPass(c1_file, pass_name, pass_body, 0) 40 return c1_file 41 42 def assertParsesTo(self, c1_text, expected_data): 43 expected_file = self.create_file(expected_data) 44 actual_file = parse_c1_visualizer_stream("<c1_file>", io.StringIO(c1_text)) 45 return self.assertEqual(expected_file, actual_file) 46 47 def test_EmptyFile(self): 48 self.assertParsesTo("", (ImmutableDict(), [])) 49 50 def test_SingleGroup(self): 51 self.assertParsesTo( 52 """ 53 begin_compilation 54 method "MyMethod" 55 end_compilation 56 begin_cfg 57 name "pass1" 58 foo 59 bar 60 end_cfg 61 """, 62 (ImmutableDict(), [ 63 ("MyMethod pass1", ["foo", "bar"]) 64 ])) 65 66 def test_MultipleGroups(self): 67 self.assertParsesTo( 68 """ 69 begin_compilation 70 name "xyz1" 71 method "MyMethod1" 72 date 1234 73 end_compilation 74 begin_cfg 75 name "pass1" 76 foo 77 bar 78 end_cfg 79 begin_cfg 80 name "pass2" 81 abc 82 def 83 end_cfg 84 """, 85 (ImmutableDict(), [ 86 ("MyMethod1 pass1", ["foo", "bar"]), 87 ("MyMethod1 pass2", ["abc", "def"]) 88 ])) 89 self.assertParsesTo( 90 """ 91 begin_compilation 92 name "xyz1" 93 method "MyMethod1" 94 date 1234 95 end_compilation 96 begin_cfg 97 name "pass1" 98 foo 99 bar 100 end_cfg 101 begin_compilation 102 name "xyz2" 103 method "MyMethod2" 104 date 5678 105 end_compilation 106 begin_cfg 107 name "pass2" 108 abc 109 def 110 end_cfg 111 """, 112 (ImmutableDict(), [ 113 ("MyMethod1 pass1", ["foo", "bar"]), 114 ("MyMethod2 pass2", ["abc", "def"]) 115 ])) 116 117 def test_InstructionSetFeatures(self): 118 self.assertParsesTo( 119 """ 120 begin_compilation 121 name "isa_features:feature1,-feature2" 122 method "isa_features:feature1,-feature2" 123 date 1234 124 end_compilation 125 """, 126 (ImmutableDict({"feature1": True, "feature2": False}), [])) 127 self.assertParsesTo( 128 """ 129 begin_compilation 130 name "isa_features:feature1,-feature2" 131 method "isa_features:feature1,-feature2" 132 date 1234 133 end_compilation 134 begin_compilation 135 name "xyz1" 136 method "MyMethod1" 137 date 1234 138 end_compilation 139 begin_cfg 140 name "pass1" 141 foo 142 bar 143 end_cfg 144 """, 145 (ImmutableDict({"feature1": True, "feature2": False}), [ 146 ("MyMethod1 pass1", ["foo", "bar"]) 147 ])) 148 self.assertParsesTo( 149 """ 150 begin_compilation 151 name "isa:some_isa isa_features:feature1,-feature2" 152 method "isa:some_isa isa_features:feature1,-feature2" 153 date 1234 154 end_compilation 155 """, 156 (ImmutableDict({"feature1": True, "feature2": False}), [])) 157 self.assertParsesTo( 158 """ 159 begin_compilation 160 name "isa:some_isa isa_features:feature1,-feature2" 161 method "isa:some_isa isa_features:feature1,-feature2" 162 date 1234 163 end_compilation 164 begin_compilation 165 name "xyz1" 166 method "MyMethod1" 167 date 1234 168 end_compilation 169 begin_cfg 170 name "pass1" 171 foo 172 bar 173 end_cfg 174 """, 175 (ImmutableDict({"feature1": True, "feature2": False}), [ 176 ("MyMethod1 pass1", ["foo", "bar"]) 177 ])) 178