summaryrefslogtreecommitdiff
path: root/test/utils/python/testgen/utils.py
diff options
context:
space:
mode:
authorAlex Light <allight@google.com>2015-08-31 13:17:42 -0700
committerAlex Light <allight@google.com>2015-10-13 13:09:37 -0700
commiteb7c144a6aff7da673ba53d501c46f00311d4d7f (patch)
treefeec33dd2e711800305477b092970500991a3993 /test/utils/python/testgen/utils.py
parent98ae42010a6e6a0e4c5bcc4d6a357805eef3f4ff (diff)
Add initial default method support to Art
This commit starts the process of adding default methods and their associated pieces to ART. This adds full support for calling default methods using invoke-interface and invoke-virtual on objects implementing the interfaces. Verifier is changed to allow this when the runtime is started with -Xexperimental:default-methods. This also adds support for defining and calling static methods on interface classes with invoke-static. Directly calling overridden default methods using invoke-super is not yet supported. This adds 5 new run-tests for this functionality. Bug: 24618811 Change-Id: I35ca800d99d3329348b277789b70ceeeba6e7f03
Diffstat (limited to 'test/utils/python/testgen/utils.py')
-rw-r--r--test/utils/python/testgen/utils.py80
1 files changed, 80 insertions, 0 deletions
diff --git a/test/utils/python/testgen/utils.py b/test/utils/python/testgen/utils.py
new file mode 100644
index 0000000000..769ad16ebe
--- /dev/null
+++ b/test/utils/python/testgen/utils.py
@@ -0,0 +1,80 @@
+#!/usr/bin/python3
+#
+# Copyright (C) 2015 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.
+
+"""
+Common functions useful for writing test generators in python
+"""
+
+import itertools
+import os
+import string
+from pathlib import Path
+
+BUILD_TOP = os.getenv("ANDROID_BUILD_TOP")
+if BUILD_TOP is None:
+ print("ANDROID_BUILD_TOP not set. Please run build/envsetup.sh", file=sys.stderr)
+ sys.exit(1)
+
+# An iterator which yields strings made from lowercase letters. First yields
+# all 1 length strings, then all 2 and so on. It does this alphabetically.
+NAME_GEN = itertools.chain.from_iterable(
+ map(lambda n: itertools.product(string.ascii_lowercase, repeat=n),
+ itertools.count(1)))
+
+def gensym():
+ """
+ Returns a new, globally unique, identifier name that is a valid Java symbol
+ on each call.
+ """
+ return ''.join(next(NAME_GEN))
+
+def filter_blanks(s):
+ """
+ Takes a string returns the same string sans empty lines
+ """
+ return "\n".join(a for a in s.split("\n") if a.strip() != "")
+
+def get_copyright(filetype = "java"):
+ """
+ Returns the standard copyright header for the given filetype
+ """
+ if filetype == "smali":
+ return "\n".join(map(lambda a: "# " + a, get_copyright("java").split("\n")))
+ else:
+ fname = filetype + ".txt"
+ with (Path(BUILD_TOP)/"development"/"docs"/"copyright-templates"/fname).open() as template:
+ return "".join(template.readlines())
+
+def subtree_sizes(n):
+ """
+ A generator that yields a tuple containing a possible arrangement of subtree
+ nodes for a tree with a total of 'n' leaf nodes.
+ """
+ if n == 0:
+ return
+ elif n == 1:
+ yield (0,)
+ elif n == 2:
+ yield (1, 1)
+ else:
+ for prevt in subtree_sizes(n - 1):
+ prev = list(prevt)
+ yield tuple([1] + prev)
+ for i in range(len(prev)):
+ prev[i] += 1
+ yield tuple(prev)
+ prev[i] -= 1
+