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