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