xref: /aosp_15_r20/art/test/dexdump/run-all-tests (revision 795d594fd825385562da6b089ea9b2033f3abf5a)
1*795d594fSAndroid Build Coastguard Worker#!/bin/bash
2*795d594fSAndroid Build Coastguard Worker#
3*795d594fSAndroid Build Coastguard Worker# Copyright (C) 2015 The Android Open Source Project
4*795d594fSAndroid Build Coastguard Worker#
5*795d594fSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
6*795d594fSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
7*795d594fSAndroid Build Coastguard Worker# You may obtain a copy of the License at
8*795d594fSAndroid Build Coastguard Worker#
9*795d594fSAndroid Build Coastguard Worker#     http://www.apache.org/licenses/LICENSE-2.0
10*795d594fSAndroid Build Coastguard Worker#
11*795d594fSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
12*795d594fSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
13*795d594fSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*795d594fSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
15*795d594fSAndroid Build Coastguard Worker# limitations under the License.
16*795d594fSAndroid Build Coastguard Worker
17*795d594fSAndroid Build Coastguard Worker# Set up prog to be the path of this script, including following symlinks,
18*795d594fSAndroid Build Coastguard Worker# and set up progdir to be the fully-qualified pathname of its directory.
19*795d594fSAndroid Build Coastguard Workerprog="$0"
20*795d594fSAndroid Build Coastguard Workerwhile [ -h "${prog}" ]; do
21*795d594fSAndroid Build Coastguard Worker    newProg=`/bin/ls -ld "${prog}"`
22*795d594fSAndroid Build Coastguard Worker    newProg=`expr "${newProg}" : ".* -> \(.*\)$"`
23*795d594fSAndroid Build Coastguard Worker    if expr "x${newProg}" : 'x/' >/dev/null; then
24*795d594fSAndroid Build Coastguard Worker        prog="${newProg}"
25*795d594fSAndroid Build Coastguard Worker    else
26*795d594fSAndroid Build Coastguard Worker        progdir=`dirname "${prog}"`
27*795d594fSAndroid Build Coastguard Worker        prog="${progdir}/${newProg}"
28*795d594fSAndroid Build Coastguard Worker    fi
29*795d594fSAndroid Build Coastguard Workerdone
30*795d594fSAndroid Build Coastguard Workeroldwd=`pwd`
31*795d594fSAndroid Build Coastguard Workerprogdir=`dirname "${prog}"`
32*795d594fSAndroid Build Coastguard Workercd "${progdir}"
33*795d594fSAndroid Build Coastguard Workerprogdir=`pwd`
34*795d594fSAndroid Build Coastguard Workerprog="${progdir}"/`basename "${prog}"`
35*795d594fSAndroid Build Coastguard Worker
36*795d594fSAndroid Build Coastguard Worker# Set up a temp directory for output.
37*795d594fSAndroid Build Coastguard Workertmpdir=/tmp/test-$$
38*795d594fSAndroid Build Coastguard Workermkdir ${tmpdir}
39*795d594fSAndroid Build Coastguard Worker
40*795d594fSAndroid Build Coastguard Worker# Set up tools and commands to run
41*795d594fSAndroid Build Coastguard WorkerDEXDUMP="${ANDROID_HOST_OUT}/bin/dexdump"
42*795d594fSAndroid Build Coastguard WorkerDEXLIST="${ANDROID_HOST_OUT}/bin/dexlist"
43*795d594fSAndroid Build Coastguard Worker
44*795d594fSAndroid Build Coastguard Workerdeclare -A SUFFIX_COMMAND_MAP
45*795d594fSAndroid Build Coastguard WorkerSUFFIX_COMMAND_MAP[txt]="${DEXDUMP} -adfh"
46*795d594fSAndroid Build Coastguard WorkerSUFFIX_COMMAND_MAP[xml]="${DEXDUMP} -e -l xml"
47*795d594fSAndroid Build Coastguard WorkerSUFFIX_COMMAND_MAP[lst]="${DEXLIST}"
48*795d594fSAndroid Build Coastguard Worker
49*795d594fSAndroid Build Coastguard WorkerALL_DEX_FILES_JAR=all-dex-files.jar
50*795d594fSAndroid Build Coastguard Worker
51*795d594fSAndroid Build Coastguard Worker# Parse command-line options
52*795d594fSAndroid Build Coastguard WorkerUPDATE="no"
53*795d594fSAndroid Build Coastguard WorkerUSAGE="no"
54*795d594fSAndroid Build Coastguard Workerwhile [ $# -ne 0 ]; do
55*795d594fSAndroid Build Coastguard Worker  case "$1" in
56*795d594fSAndroid Build Coastguard Worker    --update)
57*795d594fSAndroid Build Coastguard Worker      UPDATE="yes"
58*795d594fSAndroid Build Coastguard Worker      ;;
59*795d594fSAndroid Build Coastguard Worker    *)
60*795d594fSAndroid Build Coastguard Worker      echo "Unknown option $1" 1>&2
61*795d594fSAndroid Build Coastguard Worker      USAGE="yes"
62*795d594fSAndroid Build Coastguard Worker      ;;
63*795d594fSAndroid Build Coastguard Worker  esac
64*795d594fSAndroid Build Coastguard Worker  shift
65*795d594fSAndroid Build Coastguard Workerdone
66*795d594fSAndroid Build Coastguard Worker
67*795d594fSAndroid Build Coastguard Workerif [ "${USAGE}" = "yes" ]; then
68*795d594fSAndroid Build Coastguard Worker  cat 1>&2 <<USAGE_END
69*795d594fSAndroid Build Coastguard WorkerUsage:
70*795d594fSAndroid Build Coastguard Worker  ${prog##*/} [--update]
71*795d594fSAndroid Build Coastguard WorkerOptions:
72*795d594fSAndroid Build Coastguard Worker  --update     Update reference outputs
73*795d594fSAndroid Build Coastguard WorkerUSAGE_END
74*795d594fSAndroid Build Coastguard Worker  exit 1
75*795d594fSAndroid Build Coastguard Workerfi
76*795d594fSAndroid Build Coastguard Worker
77*795d594fSAndroid Build Coastguard Workerif [ "${UPDATE}" = "yes" ]; then
78*795d594fSAndroid Build Coastguard Worker  for dex in *.dex; do
79*795d594fSAndroid Build Coastguard Worker    for suffix in ${!SUFFIX_COMMAND_MAP[@]}; do
80*795d594fSAndroid Build Coastguard Worker      new_output=${dex%%.*}.${suffix}
81*795d594fSAndroid Build Coastguard Worker      ${SUFFIX_COMMAND_MAP[${suffix}]} ${dex} > ${new_output}
82*795d594fSAndroid Build Coastguard Worker      if [ $? -ne 0 ]; then
83*795d594fSAndroid Build Coastguard Worker        echo "Failed running ${SUFFIX_COMMAND_MAP[${suffix}]} ${dex} > ${new_output}" 2>&1
84*795d594fSAndroid Build Coastguard Worker        exit 1
85*795d594fSAndroid Build Coastguard Worker      fi
86*795d594fSAndroid Build Coastguard Worker    done
87*795d594fSAndroid Build Coastguard Worker  done
88*795d594fSAndroid Build Coastguard Worker
89*795d594fSAndroid Build Coastguard Worker  # Create a .jar file containing all dex files, renamed as expected by the runtime.
90*795d594fSAndroid Build Coastguard Worker  count=0
91*795d594fSAndroid Build Coastguard Worker  for i in *.dex; do
92*795d594fSAndroid Build Coastguard Worker    if [ ${count} = 0 ] ; then
93*795d594fSAndroid Build Coastguard Worker      dex_file=classes.dex
94*795d594fSAndroid Build Coastguard Worker      flags="-cf"
95*795d594fSAndroid Build Coastguard Worker    else
96*795d594fSAndroid Build Coastguard Worker      dex_file=classes${count}.dex
97*795d594fSAndroid Build Coastguard Worker      flags="-uf"
98*795d594fSAndroid Build Coastguard Worker    fi
99*795d594fSAndroid Build Coastguard Worker    cp $i ${tmpdir}/${dex_file}
100*795d594fSAndroid Build Coastguard Worker    jar ${flags} ${ALL_DEX_FILES_JAR} -C ${tmpdir} ${dex_file}
101*795d594fSAndroid Build Coastguard Worker    ((count += 1))
102*795d594fSAndroid Build Coastguard Worker    rm ${tmpdir}/${dex_file}
103*795d594fSAndroid Build Coastguard Worker  done
104*795d594fSAndroid Build Coastguard Worker
105*795d594fSAndroid Build Coastguard Worker  prefix=$(basename ${ALL_DEX_FILES_JAR} .jar)
106*795d594fSAndroid Build Coastguard Worker  for suffix in ${!SUFFIX_COMMAND_MAP[@]}; do
107*795d594fSAndroid Build Coastguard Worker    new_output=${prefix}.${suffix}
108*795d594fSAndroid Build Coastguard Worker    ${SUFFIX_COMMAND_MAP[${suffix}]} ${ALL_DEX_FILES_JAR} > ${new_output}
109*795d594fSAndroid Build Coastguard Worker  done
110*795d594fSAndroid Build Coastguard Worker
111*795d594fSAndroid Build Coastguard Worker  exit 0
112*795d594fSAndroid Build Coastguard Workerfi
113*795d594fSAndroid Build Coastguard Worker
114*795d594fSAndroid Build Coastguard Worker# Run the tests.
115*795d594fSAndroid Build Coastguard Workerpassed=0
116*795d594fSAndroid Build Coastguard Workerfailed=0
117*795d594fSAndroid Build Coastguard Workerfor input in *.dex *.jar; do
118*795d594fSAndroid Build Coastguard Worker  echo ${input}
119*795d594fSAndroid Build Coastguard Worker  for suffix in ${!SUFFIX_COMMAND_MAP[@]}; do
120*795d594fSAndroid Build Coastguard Worker    expected_output=${input%%.*}.${suffix}
121*795d594fSAndroid Build Coastguard Worker    actual_output=${tmpdir}/${expected_output}
122*795d594fSAndroid Build Coastguard Worker    cmd="${SUFFIX_COMMAND_MAP[${suffix}]} ${input}"
123*795d594fSAndroid Build Coastguard Worker    ${cmd} > ${actual_output}
124*795d594fSAndroid Build Coastguard Worker    cmp ${expected_output} ${actual_output}
125*795d594fSAndroid Build Coastguard Worker    if [ "$?" = "0" ]; then
126*795d594fSAndroid Build Coastguard Worker      ((passed += 1))
127*795d594fSAndroid Build Coastguard Worker    else
128*795d594fSAndroid Build Coastguard Worker      ((failed += 1))
129*795d594fSAndroid Build Coastguard Worker      echo failed: ${cmd}
130*795d594fSAndroid Build Coastguard Worker    fi
131*795d594fSAndroid Build Coastguard Worker  done
132*795d594fSAndroid Build Coastguard Workerdone
133*795d594fSAndroid Build Coastguard Worker
134*795d594fSAndroid Build Coastguard Worker# Report results.
135*795d594fSAndroid Build Coastguard Workerecho
136*795d594fSAndroid Build Coastguard Workerecho "passed: ${passed} test(s)"
137*795d594fSAndroid Build Coastguard Workerecho "failed: ${failed} test(s)"
138*795d594fSAndroid Build Coastguard Workerecho
139*795d594fSAndroid Build Coastguard Worker
140*795d594fSAndroid Build Coastguard Worker# Clean up, cd back to original dir.
141*795d594fSAndroid Build Coastguard Workerrm -rf ${tmpdir}
142*795d594fSAndroid Build Coastguard Workercd ${oldwd}
143*795d594fSAndroid Build Coastguard Worker
144*795d594fSAndroid Build Coastguard Worker# Return status.
145*795d594fSAndroid Build Coastguard Workerif [ "${failed}" != "0" ]; then
146*795d594fSAndroid Build Coastguard Worker  echo failed
147*795d594fSAndroid Build Coastguard Worker  exit 1
148*795d594fSAndroid Build Coastguard Workerfi
149*795d594fSAndroid Build Coastguard Workerexit 0
150*795d594fSAndroid Build Coastguard Worker
151