diff options
author | 2015-12-29 14:13:34 +0600 | |
---|---|---|
committer | 2016-01-14 14:52:04 -0800 | |
commit | 30af8dd6c2a88d9dc7e875e3cac8fe6758582f2f (patch) | |
tree | 8f1d357a83921d4a747c07718fe51f716cb70d60 | |
parent | f8f4511caf5698b9e3da49992ec5309d8309190c (diff) |
Add test for bad linkage of overriden package-private method.
Test for AOT compiler bad linkage of overriden package-private method
with a secondary dex file.
Change-Id: I5d60c409c9912762fbb47ae8aeebb988c9b3cebc
Signed-off-by: Pavel Vyssotski <pavel.n.vyssotski@intel.com>
7 files changed, 142 insertions, 0 deletions
diff --git a/test/091-override-package-private-method/build b/test/091-override-package-private-method/build new file mode 100755 index 0000000000..5a340dcf6d --- /dev/null +++ b/test/091-override-package-private-method/build @@ -0,0 +1,43 @@ +#!/bin/bash +# +# 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. + +# Stop if something fails. +set -e + +mkdir classes +${JAVAC} -d classes `find src -name '*.java'` + +mkdir classes-ex +mv classes/OverridePackagePrivateMethodSuper.class classes-ex + +if [ ${USE_JACK} = "true" ]; then + # Create .jack files from classes generated with javac. + ${JILL} classes --output classes.jack + ${JILL} classes-ex --output classes-ex.jack + + # Create DEX files from .jack files. + ${JACK} --import classes.jack --output-dex . + zip $TEST_NAME.jar classes.dex + ${JACK} --import classes-ex.jack --output-dex . + zip ${TEST_NAME}-ex.jar classes.dex +else + if [ ${NEED_DEX} = "true" ]; then + ${DX} -JXmx256m --debug --dex --dump-to=classes.lst --output=classes.dex --dump-width=1000 classes + zip $TEST_NAME.jar classes.dex + ${DX} -JXmx256m --debug --dex --dump-to=classes-ex.lst --output=classes.dex --dump-width=1000 classes-ex + zip ${TEST_NAME}-ex.jar classes.dex + fi +fi diff --git a/test/091-override-package-private-method/expected.txt b/test/091-override-package-private-method/expected.txt new file mode 100644 index 0000000000..286cfcd274 --- /dev/null +++ b/test/091-override-package-private-method/expected.txt @@ -0,0 +1 @@ +OverridePackagePrivateMethodTest diff --git a/test/091-override-package-private-method/info.txt b/test/091-override-package-private-method/info.txt new file mode 100644 index 0000000000..8e183bfd40 --- /dev/null +++ b/test/091-override-package-private-method/info.txt @@ -0,0 +1,3 @@ +Test features with a secondary dex file. + +- Regression test to ensure AOT compiler correctly manages overriden package-private method. diff --git a/test/091-override-package-private-method/run b/test/091-override-package-private-method/run new file mode 100755 index 0000000000..d8c3c798bf --- /dev/null +++ b/test/091-override-package-private-method/run @@ -0,0 +1,18 @@ +#!/bin/bash +# +# 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. + +# Use secondary switch to add secondary dex file to class path. +exec ${RUN} "${@}" --secondary diff --git a/test/091-override-package-private-method/src/Main.java b/test/091-override-package-private-method/src/Main.java new file mode 100644 index 0000000000..6543c982fd --- /dev/null +++ b/test/091-override-package-private-method/src/Main.java @@ -0,0 +1,28 @@ +/* + * 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. + */ + +/** + * Override package-private method test. + */ +public class Main { + public static void main(String[] args) { + try { + new OverridePackagePrivateMethodTest().test(new Object()); + } catch (Exception e) { + System.out.println("Got unexpected exception " + e); + } + } +} diff --git a/test/091-override-package-private-method/src/OverridePackagePrivateMethodSuper.java b/test/091-override-package-private-method/src/OverridePackagePrivateMethodSuper.java new file mode 100644 index 0000000000..4ad051e537 --- /dev/null +++ b/test/091-override-package-private-method/src/OverridePackagePrivateMethodSuper.java @@ -0,0 +1,21 @@ +/* + * 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. + */ + +public class OverridePackagePrivateMethodSuper { + void print() { + System.out.println("OverridePackagePrivateMethodSuper"); + } +} diff --git a/test/091-override-package-private-method/src/OverridePackagePrivateMethodTest.java b/test/091-override-package-private-method/src/OverridePackagePrivateMethodTest.java new file mode 100644 index 0000000000..2f2b7caa94 --- /dev/null +++ b/test/091-override-package-private-method/src/OverridePackagePrivateMethodTest.java @@ -0,0 +1,28 @@ +/* + * 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. + */ + +public class OverridePackagePrivateMethodTest extends OverridePackagePrivateMethodSuper { + public void test(Object obj) { + if (obj == null) { + throw new NullPointerException("Got null"); + } + print(); + } + + void print() { + System.out.println("OverridePackagePrivateMethodTest"); + } +} |