xref: /aosp_15_r20/frameworks/base/ravenwood/scripts/update-test-mapping.sh (revision d57664e9bc4670b3ecf6748a746a57c557b6bc9e)
1#!/bin/bash
2# Copyright (C) 2024 The Android Open Source Project
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8#      http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15
16# Update f/b/r/TEST_MAPPING with all the ravenwood tests as presubmit.
17#
18# Note, before running it, make sure module-info.json is up-to-date by running
19# (any) build.
20
21set -e
22
23# Tests that shouldn't be in presubmit.
24EXEMPT='^(SystemUiRavenTests)$'
25
26is_car() {
27    local module="$1"
28
29    # If the module name starts with "Car", then it's a test for "Car".
30    [[ "$module" =~ ^Car ]]
31    return $?
32}
33
34main() {
35    local script_name="${0##*/}"
36    local script_dir="${0%/*}"
37    local test_mapping="$script_dir/../TEST_MAPPING"
38    local test_mapping_bak="$script_dir/../TEST_MAPPING.bak"
39
40    local header="$(sed -ne '1,/AUTO-GENERATED-START/p' "$test_mapping")"
41    local footer="$(sed -ne '/AUTO-GENERATED-END/,$p' "$test_mapping")"
42
43    echo "Getting all tests"
44    local tests=( $("$script_dir/list-ravenwood-tests.sh" | grep -vP "$EXEMPT") )
45
46    local num_tests="${#tests[@]}"
47
48    if (( $num_tests == 0 )) ; then
49        echo "Something went wrong. No ravenwood tests detected." 1>&2
50        return 1
51    fi
52
53    echo "Tests: ${tests[@]}"
54
55    echo "Creating backup at $test_mapping_bak"
56    cp "$test_mapping" "$test_mapping_bak"
57
58    echo "Updating $test_mapping"
59    {
60        echo "$header"
61
62        echo "    // DO NOT MODIFY MANUALLY"
63        echo "    // Use scripts/$script_name to update it."
64
65        local i=0
66        while (( $i < $num_tests )) ; do
67            local comma=","
68            if (( $i == ($num_tests - 1) )); then
69                comma=""
70            fi
71            echo "    {"
72            echo "      \"name\": \"${tests[$i]}\","
73            if is_car "${tests[$i]}"; then
74                echo '      "keywords": ["automotive_code_coverage"],'
75            fi
76
77            echo "      \"host\": true"
78            echo "    }$comma"
79
80            i=$(( $i + 1 ))
81        done
82
83        echo "$footer"
84    } >"$test_mapping"
85
86    if cmp "$test_mapping_bak" "$test_mapping" ; then
87        echo "No change detecetd."
88        return 0
89    fi
90    echo "Updated $test_mapping"
91
92    # `|| true` is needed because of `set -e`.
93    diff -u "$test_mapping_bak" "$test_mapping" || true
94    return 0
95}
96
97main
98