178 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			178 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Python
		
	
	
	
#!/usr/bin/env python3
 | 
						|
#
 | 
						|
# Copyright (C) 2014 The Android Open Source Project
 | 
						|
#
 | 
						|
# 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.
 | 
						|
 | 
						|
from common.immutables import ImmutableDict
 | 
						|
from file_format.c1visualizer.parser import parse_c1_visualizer_stream
 | 
						|
from file_format.c1visualizer.struct import C1visualizerFile, C1visualizerPass
 | 
						|
 | 
						|
import io
 | 
						|
import unittest
 | 
						|
 | 
						|
 | 
						|
class C1visualizerParser_Test(unittest.TestCase):
 | 
						|
 | 
						|
  def create_file(self, data):
 | 
						|
    """ Creates an instance of CheckerFile from provided info.
 | 
						|
 | 
						|
    Data format: ( [ <isa-feature>, ... ],
 | 
						|
                   [ ( <case-name>, [ ( <text>, <assert-variant> ), ... ] ), ... ]
 | 
						|
                 )
 | 
						|
    """
 | 
						|
    c1_file = C1visualizerFile("<c1_file>")
 | 
						|
    c1_file.instruction_set_features = data[0]
 | 
						|
    for pass_entry in data[1]:
 | 
						|
      pass_name = pass_entry[0]
 | 
						|
      pass_body = pass_entry[1]
 | 
						|
      c1_pass = C1visualizerPass(c1_file, pass_name, pass_body, 0)
 | 
						|
    return c1_file
 | 
						|
 | 
						|
  def assertParsesTo(self, c1_text, expected_data):
 | 
						|
    expected_file = self.create_file(expected_data)
 | 
						|
    actual_file = parse_c1_visualizer_stream("<c1_file>", io.StringIO(c1_text))
 | 
						|
    return self.assertEqual(expected_file, actual_file)
 | 
						|
 | 
						|
  def test_EmptyFile(self):
 | 
						|
    self.assertParsesTo("", (ImmutableDict(), []))
 | 
						|
 | 
						|
  def test_SingleGroup(self):
 | 
						|
    self.assertParsesTo(
 | 
						|
      """
 | 
						|
        begin_compilation
 | 
						|
          method "MyMethod"
 | 
						|
        end_compilation
 | 
						|
        begin_cfg
 | 
						|
          name "pass1"
 | 
						|
          foo
 | 
						|
          bar
 | 
						|
        end_cfg
 | 
						|
      """,
 | 
						|
      (ImmutableDict(), [
 | 
						|
        ("MyMethod pass1", ["foo", "bar"])
 | 
						|
      ]))
 | 
						|
 | 
						|
  def test_MultipleGroups(self):
 | 
						|
    self.assertParsesTo(
 | 
						|
      """
 | 
						|
        begin_compilation
 | 
						|
          name "xyz1"
 | 
						|
          method "MyMethod1"
 | 
						|
          date 1234
 | 
						|
        end_compilation
 | 
						|
        begin_cfg
 | 
						|
          name "pass1"
 | 
						|
          foo
 | 
						|
          bar
 | 
						|
        end_cfg
 | 
						|
        begin_cfg
 | 
						|
          name "pass2"
 | 
						|
          abc
 | 
						|
          def
 | 
						|
        end_cfg
 | 
						|
      """,
 | 
						|
      (ImmutableDict(), [
 | 
						|
        ("MyMethod1 pass1", ["foo", "bar"]),
 | 
						|
        ("MyMethod1 pass2", ["abc", "def"])
 | 
						|
      ]))
 | 
						|
    self.assertParsesTo(
 | 
						|
      """
 | 
						|
        begin_compilation
 | 
						|
          name "xyz1"
 | 
						|
          method "MyMethod1"
 | 
						|
          date 1234
 | 
						|
        end_compilation
 | 
						|
        begin_cfg
 | 
						|
          name "pass1"
 | 
						|
          foo
 | 
						|
          bar
 | 
						|
        end_cfg
 | 
						|
        begin_compilation
 | 
						|
          name "xyz2"
 | 
						|
          method "MyMethod2"
 | 
						|
          date 5678
 | 
						|
        end_compilation
 | 
						|
        begin_cfg
 | 
						|
          name "pass2"
 | 
						|
          abc
 | 
						|
          def
 | 
						|
        end_cfg
 | 
						|
      """,
 | 
						|
      (ImmutableDict(), [
 | 
						|
        ("MyMethod1 pass1", ["foo", "bar"]),
 | 
						|
        ("MyMethod2 pass2", ["abc", "def"])
 | 
						|
      ]))
 | 
						|
 | 
						|
  def test_InstructionSetFeatures(self):
 | 
						|
    self.assertParsesTo(
 | 
						|
      """
 | 
						|
        begin_compilation
 | 
						|
          name "isa_features:feature1,-feature2"
 | 
						|
          method "isa_features:feature1,-feature2"
 | 
						|
          date 1234
 | 
						|
        end_compilation
 | 
						|
      """,
 | 
						|
      (ImmutableDict({"feature1": True, "feature2": False}), []))
 | 
						|
    self.assertParsesTo(
 | 
						|
      """
 | 
						|
        begin_compilation
 | 
						|
          name "isa_features:feature1,-feature2"
 | 
						|
          method "isa_features:feature1,-feature2"
 | 
						|
          date 1234
 | 
						|
        end_compilation
 | 
						|
        begin_compilation
 | 
						|
          name "xyz1"
 | 
						|
          method "MyMethod1"
 | 
						|
          date 1234
 | 
						|
        end_compilation
 | 
						|
        begin_cfg
 | 
						|
          name "pass1"
 | 
						|
          foo
 | 
						|
          bar
 | 
						|
        end_cfg
 | 
						|
      """,
 | 
						|
      (ImmutableDict({"feature1": True, "feature2": False}), [
 | 
						|
        ("MyMethod1 pass1", ["foo", "bar"])
 | 
						|
      ]))
 | 
						|
    self.assertParsesTo(
 | 
						|
      """
 | 
						|
        begin_compilation
 | 
						|
          name "isa:some_isa isa_features:feature1,-feature2"
 | 
						|
          method "isa:some_isa isa_features:feature1,-feature2"
 | 
						|
          date 1234
 | 
						|
        end_compilation
 | 
						|
      """,
 | 
						|
      (ImmutableDict({"feature1": True, "feature2": False}), []))
 | 
						|
    self.assertParsesTo(
 | 
						|
      """
 | 
						|
        begin_compilation
 | 
						|
          name "isa:some_isa isa_features:feature1,-feature2"
 | 
						|
          method "isa:some_isa isa_features:feature1,-feature2"
 | 
						|
          date 1234
 | 
						|
        end_compilation
 | 
						|
        begin_compilation
 | 
						|
          name "xyz1"
 | 
						|
          method "MyMethod1"
 | 
						|
          date 1234
 | 
						|
        end_compilation
 | 
						|
        begin_cfg
 | 
						|
          name "pass1"
 | 
						|
          foo
 | 
						|
          bar
 | 
						|
        end_cfg
 | 
						|
      """,
 | 
						|
      (ImmutableDict({"feature1": True, "feature2": False}), [
 | 
						|
        ("MyMethod1 pass1", ["foo", "bar"])
 | 
						|
      ]))
 |