blob: f7e063c3ef1d324e9dd1b48e33ee8f300e9f9b3a [file] [log] [blame]
Pierre-Hugues Husson9212e182018-10-30 23:40:10 +01001#!/bin/bash
2
3base="$(dirname "$(readlink -f -- $0)")/.."
4cd $base
5
Pierre-Hugues Husson4e50f102018-11-03 21:06:02 +01006#Usage: fail <file> <message> [ignore string]
7fail() {
8 if [ -z "$3" ] || ! grep -qF "$3" "$1";then
9 echo "F: $1: $2"
10 touch fail
11 else
12 echo "W: $1: $2"
13 fi
14}
15
Pierre-Hugues Husson9212e182018-10-30 23:40:10 +010016#Keep knownKeys
Pierre-Hugues Husson72801462018-11-03 20:55:21 +010017rm -f tests/priorities fail
Pierre-Hugues Husson9212e182018-10-30 23:40:10 +010018touch tests/priorities tests/knownKeys
Pierre-Hugues Husson9212e182018-10-30 23:40:10 +010019find -name AndroidManifest.xml |while read manifest;do
20 folder="$(dirname "$manifest")"
21 #Ensure this overlay doesn't override blacklist-ed properties
22 for b in $(cat tests/blacklist);do
23 if grep -qRF "$b" $folder;then
Pierre-Hugues Husson4e50f102018-11-03 21:06:02 +010024 fail $folder "Overlay $folder is defining $b which is forbidden"
Pierre-Hugues Husson9212e182018-10-30 23:40:10 +010025 fi
26 done
27
28 #Everything after that is specifically for static overlays, targetting framework-res
29 isStatic="$(xmlstarlet sel -t -m '//overlay' -v @android:isStatic -n $manifest)"
30 [ "$isStatic" != "true" ] && continue
31
32 #Ensure priorities unique-ness
33 priority="$(xmlstarlet sel -t -m '//overlay' -v @android:priority -n $manifest)"
34 if grep -qE '^'$priority'$' tests/priorities;then
Pierre-Hugues Husson4e50f102018-11-03 21:06:02 +010035 fail $manifest "priority $priority conflicts with another manifest"
Pierre-Hugues Husson9212e182018-10-30 23:40:10 +010036 fi
37 echo $priority >> tests/priorities
38
39 systemPropertyName="$(xmlstarlet sel -t -m '//overlay' -v @android:requiredSystemPropertyName -n $manifest)"
40 if [ "$systemPropertyName" == "ro.vendor.product.name" ];then
Pierre-Hugues Husson4e50f102018-11-03 21:06:02 +010041 fail "$manifest" "ro.vendor.product.name is deprecated. Please use ro.vendor.build.fingerprint" \
42 'TESTS: Ignore ro.vendor.product.name'
Pierre-Hugues Husson9212e182018-10-30 23:40:10 +010043 fi
44
45 #Ensure the overloaded properties exist in AOSP
46 find "$folder" -name \*.xml |while read xml;do
47 keys="$(xmlstarlet sel -t -m '//resources/*' -v @name -n $xml)"
Pierre-Hugues Husson9212e182018-10-30 23:40:10 +010048 for key in $keys;do
Pierre-Hugues Husson03811922018-10-31 00:08:08 +010049 grep -qE '^'$key'$' tests/knownKeys && continue
Pierre-Hugues Husson3de1d742018-10-30 23:52:01 +010050 #Run the ag only on phh's machine. Assume that knownKeys is full enough.
51 #If it's enough, ask phh to update it
Pierre-Hugues Hussonc598ee62018-11-03 20:57:44 +010052 if [ -d /build/AOSP-9.0 ] && \
53 (ag '"'$key'"' /build/AOSP-9.0/frameworks/base/core/res/res || \
54 ag '"'$key'"' /build/AOSP-8.1/frameworks/base/core/res/res)> /dev/null ;then
Pierre-Hugues Husson9212e182018-10-30 23:40:10 +010055 echo $key >> tests/knownKeys
56 else
Pierre-Hugues Husson4e50f102018-11-03 21:06:02 +010057 fail "$xml" "defines a non-existing attribute $key"
Pierre-Hugues Husson9212e182018-10-30 23:40:10 +010058 fi
59 done
60 done
61done
62rm -f tests/priorities
63
Pierre-Hugues Husson4e50f102018-11-03 21:06:02 +010064find -name \*.xml |xargs dos2unix -ic |while read f;do
65 fail $f "File is DOS type"
66done
Pierre-Hugues Hussonf6418262018-11-03 20:38:36 +010067
Pierre-Hugues Husson72801462018-11-03 20:55:21 +010068if [ -f fail ];then exit 1; fi