diff options
author | jeffhao <jeffhao@google.com> | 2012-10-01 18:04:49 -0700 |
---|---|---|
committer | jeffhao <jeffhao@google.com> | 2012-10-01 18:18:16 -0700 |
commit | 3e96a16c27c986275f60afe682d0b2a3064f45c9 (patch) | |
tree | 1a43ce4313473535a758906646c46091ff1bfdbf | |
parent | 9b0b188ac610a5e8c00d6d5b06ccc6624f754c50 (diff) | |
download | art-3e96a16c27c986275f60afe682d0b2a3064f45c9.zip art-3e96a16c27c986275f60afe682d0b2a3064f45c9.tar.gz art-3e96a16c27c986275f60afe682d0b2a3064f45c9.tar.bz2 |
Test to ensure duplicate methods are handled properly.
If a dex file has multiple copies of the same method, only the first is
used, and the rest are dropped.
Change-Id: I8085f23c71ab4cf4ddb40a41ca5638207e84f180
-rw-r--r-- | test/097-duplicate-method/build | 25 | ||||
-rw-r--r-- | test/097-duplicate-method/expected.txt | 1 | ||||
-rw-r--r-- | test/097-duplicate-method/info.txt | 2 | ||||
-rw-r--r-- | test/097-duplicate-method/src/Main.java | 28 | ||||
-rw-r--r-- | test/097-duplicate-method/src/Test.j | 29 | ||||
-rw-r--r-- | test/097-duplicate-method/src/Test.java | 24 |
6 files changed, 109 insertions, 0 deletions
diff --git a/test/097-duplicate-method/build b/test/097-duplicate-method/build new file mode 100644 index 0000000..fe5f50d --- /dev/null +++ b/test/097-duplicate-method/build @@ -0,0 +1,25 @@ +#!/bin/bash +# +# Copyright (C) 2012 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 src/*.java +jasmin -d classes src/*.j + +${DX} --debug --dex --dump-to=classes.lst --output=classes.dex classes +zip $TEST_NAME.jar classes.dex diff --git a/test/097-duplicate-method/expected.txt b/test/097-duplicate-method/expected.txt new file mode 100644 index 0000000..f985b46 --- /dev/null +++ b/test/097-duplicate-method/expected.txt @@ -0,0 +1 @@ +Success! diff --git a/test/097-duplicate-method/info.txt b/test/097-duplicate-method/info.txt new file mode 100644 index 0000000..4e7e0ee --- /dev/null +++ b/test/097-duplicate-method/info.txt @@ -0,0 +1,2 @@ +This is a test to verify that duplicate methods in a dex file are handled +properly (all but the first are ignored). diff --git a/test/097-duplicate-method/src/Main.java b/test/097-duplicate-method/src/Main.java new file mode 100644 index 0000000..bb3d36a --- /dev/null +++ b/test/097-duplicate-method/src/Main.java @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2012 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. + */ + +/** + * Certain class files generated by smali can have encoded methods with an + * identical method_idx. In these cases, the behavior should be to only use the + * first one, and to ignore all following duplicates. + */ +public class Main { + public static void main(String args[]) { + if (Test.run() != null) { + System.out.println("Success!"); + } + } +} diff --git a/test/097-duplicate-method/src/Test.j b/test/097-duplicate-method/src/Test.j new file mode 100644 index 0000000..f96a9a3 --- /dev/null +++ b/test/097-duplicate-method/src/Test.j @@ -0,0 +1,29 @@ +; Copyright (C) 2012 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. + +.class Test +.super java/lang/Object + +.method public static run()Ljava/lang/Object; + .limit stack 2 + new java/lang/Object + dup + invokespecial java/lang/Object/<init>()V + areturn +.end method + +.method public static run()Ljava/lang/Object; + aconst_null + areturn +.end method diff --git a/test/097-duplicate-method/src/Test.java b/test/097-duplicate-method/src/Test.java new file mode 100644 index 0000000..7dd61e6 --- /dev/null +++ b/test/097-duplicate-method/src/Test.java @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2012 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. + */ + +/** + * This class and method will be overwritten by smali to return non-null. + */ +public class Test { + public static Object run() { + return null; + } +} |