1#!/bin/bash
2#
3# Copyright (C) 2010 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# The awk fun here tries to cull out all but the salient bits. The aim
18# is to check to see that there are two invoke-static instructions, each
19# followed directly by a move-result-object.
20
21dx --debug --dex --dump-to=- --dump-method=blort.zorch --dump-width=200 \
22    blort.class | awk '
23
24BEGIN {
25    invokeAt = -1;
26    moveAt = -1;
27    invokeCount = 0;
28    failed = 0;
29}
30
31# Note: This has to be done before the test clause below.
32/move-result-object/ {
33    moveAt = NR;
34}
35
36(invokeAt > 0) {
37    if (moveAt != (invokeAt + 1)) {
38        failed = 1;
39    }
40    invokeAt = -1;
41    moveAt = -1;
42}
43
44# Note: This has to be done after the test clause above.
45/invoke-static/ {
46    invokeAt = NR;
47    invokeCount++;
48}
49
50END {
51    printf("total invokes: %d\n", invokeCount);
52    if (failed) {
53        exit 1;
54    }
55}
56'
57
58if [ "$?" = "1" ]; then
59    # The test failed. Be helpful and print the entire method body.
60    dx --debug --dex --dump-to=- --dump-method=blort.zorch --dump-width=200 \
61        blort.class
62fi
63