1705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light#!/usr/bin/python3 2705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light# 3705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light# Copyright (C) 2015 The Android Open Source Project 4705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light# 5705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light# Licensed under the Apache License, Version 2.0 (the "License"); 6705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light# you may not use this file except in compliance with the License. 7705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light# You may obtain a copy of the License at 8705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light# 9705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light# http://www.apache.org/licenses/LICENSE-2.0 10705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light# 11705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light# Unless required by applicable law or agreed to in writing, software 12705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light# distributed under the License is distributed on an "AS IS" BASIS, 13705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light# See the License for the specific language governing permissions and 15705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light# limitations under the License. 16705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light 17705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light""" 18705ad49f353d3f90d8b63625aca2c2035bacdbefAlex LightGenerate java test files for test 966. 19705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light""" 20705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light 21705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Lightimport generate_smali as base 22705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Lightimport os 23705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Lightimport sys 24705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Lightfrom pathlib import Path 25705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light 26705ad49f353d3f90d8b63625aca2c2035bacdbefAlex LightBUILD_TOP = os.getenv("ANDROID_BUILD_TOP") 27705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Lightif BUILD_TOP is None: 28705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light print("ANDROID_BUILD_TOP not set. Please run build/envsetup.sh", file=sys.stderr) 29705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light sys.exit(1) 30705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light 31705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light# Allow us to import mixins. 32705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Lightsys.path.append(str(Path(BUILD_TOP)/"art"/"test"/"utils"/"python")) 33705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light 34705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Lightimport testgen.mixins as mixins 35705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light 36705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Lightclass JavaConverter(mixins.DumpMixin, mixins.Named, mixins.JavaFileMixin): 37705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light """ 38705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light A class that can convert a SmaliFile to a JavaFile. 39705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light """ 40705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light def __init__(self, inner): 41705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light self.inner = inner 42705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light 43705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light def get_name(self): 44705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light return self.inner.get_name() 45705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light 46705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light def __str__(self): 47705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light out = "" 48705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light for line in str(self.inner).splitlines(keepends = True): 49705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light if line.startswith("#"): 50705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light out += line[1:] 51705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light return out 52705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light 53705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Lightdef main(argv): 54705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light final_java_dir = Path(argv[1]) 55705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light if not final_java_dir.exists() or not final_java_dir.is_dir(): 56705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light print("{} is not a valid java dir".format(final_java_dir), file=sys.stderr) 57705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light sys.exit(1) 58705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light initial_java_dir = Path(argv[2]) 59705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light if not initial_java_dir.exists() or not initial_java_dir.is_dir(): 60705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light print("{} is not a valid java dir".format(initial_java_dir), file=sys.stderr) 61705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light sys.exit(1) 62705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light expected_txt = Path(argv[3]) 63705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light mainclass, all_files = base.create_all_test_files() 64705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light with expected_txt.open('w') as out: 65705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light print(mainclass.get_expected(), file=out) 66705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light for f in all_files: 67705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light if f.initial_build_different(): 68705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light JavaConverter(f).dump(final_java_dir) 69705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light JavaConverter(f.get_initial_build_version()).dump(initial_java_dir) 70705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light else: 71705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light JavaConverter(f).dump(initial_java_dir) 72705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light if isinstance(f, base.TestInterface): 73705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light JavaConverter(f).dump(final_java_dir) 74705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light 75705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light 76705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Lightif __name__ == '__main__': 77705ad49f353d3f90d8b63625aca2c2035bacdbefAlex Light main(sys.argv) 78