1#!/usr/bin/python3
2#
3# Copyright (C) 2015 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
17"""
18Generate java test files for test 966.
19"""
20
21import generate_smali as base
22import os
23import sys
24from pathlib import Path
25
26BUILD_TOP = os.getenv("ANDROID_BUILD_TOP")
27if BUILD_TOP is None:
28  print("ANDROID_BUILD_TOP not set. Please run build/envsetup.sh", file=sys.stderr)
29  sys.exit(1)
30
31# Allow us to import mixins.
32sys.path.append(str(Path(BUILD_TOP)/"art"/"test"/"utils"/"python"))
33
34import testgen.mixins as mixins
35
36class JavaConverter(mixins.DumpMixin, mixins.Named, mixins.JavaFileMixin):
37  """
38  A class that can convert a SmaliFile to a JavaFile.
39  """
40  def __init__(self, inner):
41    self.inner = inner
42
43  def get_name(self):
44    return self.inner.get_name()
45
46  def __str__(self):
47    out = ""
48    for line in str(self.inner).splitlines(keepends = True):
49      if line.startswith("#"):
50        out += line[1:]
51    return out
52
53def main(argv):
54  final_java_dir = Path(argv[1])
55  if not final_java_dir.exists() or not final_java_dir.is_dir():
56    print("{} is not a valid java dir".format(final_java_dir), file=sys.stderr)
57    sys.exit(1)
58  initial_java_dir = Path(argv[2])
59  if not initial_java_dir.exists() or not initial_java_dir.is_dir():
60    print("{} is not a valid java dir".format(initial_java_dir), file=sys.stderr)
61    sys.exit(1)
62  expected_txt = Path(argv[3])
63  mainclass, all_files = base.create_all_test_files()
64  with expected_txt.open('w') as out:
65    print(mainclass.get_expected(), file=out)
66  for f in all_files:
67    if f.initial_build_different():
68      JavaConverter(f).dump(final_java_dir)
69      JavaConverter(f.get_initial_build_version()).dump(initial_java_dir)
70    else:
71      JavaConverter(f).dump(initial_java_dir)
72      if isinstance(f, base.TestInterface):
73        JavaConverter(f).dump(final_java_dir)
74
75
76if __name__ == '__main__':
77  main(sys.argv)
78