Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ffe2c1c3 authored by Nan Zhang's avatar Nan Zhang
Browse files

Change syntax for jacoco filter wildcard params.

originally:
.* -> /**/*.class
now:
.* -> /*.class
.** -> /**/*.class

Also add NinjaAndShellEscape to allow filtering inner classes with $ in
the name.

Test: unittests.
Bug: b/71889972
Merged-In: Ifb8d7daa22bee02346885171edb15180af18f0de
Change-Id: Ifb8d7daa22bee02346885171edb15180af18f0de
(cherry picked from commit c61066684d5c8ddf600af602852c32fce6e6c6f4)
parent ad4692d5
Loading
Loading
Loading
Loading
+15 −5
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import (
	"strings"

	"github.com/google/blueprint"
	"github.com/google/blueprint/proptools"

	"android/soong/android"
)
@@ -105,13 +106,22 @@ func jacocoFiltersToSpecs(filters []string) ([]string, error) {
			return nil, err
		}
	}
	return specs, nil
	return proptools.NinjaAndShellEscape(specs), nil
}

func jacocoFilterToSpec(filter string) (string, error) {
	wildcard := strings.HasSuffix(filter, "*")
	recursiveWildcard := strings.HasSuffix(filter, "**")
	nonRecursiveWildcard := false
	if !recursiveWildcard {
		nonRecursiveWildcard = strings.HasSuffix(filter, "*")
		filter = strings.TrimSuffix(filter, "*")
	recursiveWildcard := wildcard && (strings.HasSuffix(filter, ".") || filter == "")
	} else {
		filter = strings.TrimSuffix(filter, "**")
	}

	if recursiveWildcard && !(strings.HasSuffix(filter, ".") || filter == "") {
		return "", fmt.Errorf("only '**' or '.**' is supported as recursive wildcard in a filter")
	}

	if strings.ContainsRune(filter, '*') {
		return "", fmt.Errorf("'*' is only supported as the last character in a filter")
@@ -121,7 +131,7 @@ func jacocoFilterToSpec(filter string) (string, error) {

	if recursiveWildcard {
		spec += "**/*.class"
	} else if wildcard {
	} else if nonRecursiveWildcard {
		spec += "*.class"
	} else {
		spec += ".class"
+12 −2
Original line number Diff line number Diff line
@@ -33,13 +33,23 @@ func TestJacocoFilterToSpecs(t *testing.T) {
		{
			name: "package wildcard",
			in:   "package.*",
			out:  "package/*.class",
		},
		{
			name: "package recursive wildcard",
			in:   "package.**",
			out:  "package/**/*.class",
		},
		{
			name: "all wildcard",
			in:   "*",
			name: "recursive wildcard only",
			in:   "**",
			out:  "**/*.class",
		},
		{
			name: "single wildcard only",
			in:   "*",
			out:  "*.class",
		},
	}

	for _, testCase := range testCases {