aboutsummaryrefslogtreecommitdiff
path: root/src/tools/ak/res/naming_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/ak/res/naming_test.go')
-rw-r--r--src/tools/ak/res/naming_test.go341
1 files changed, 341 insertions, 0 deletions
diff --git a/src/tools/ak/res/naming_test.go b/src/tools/ak/res/naming_test.go
new file mode 100644
index 0000000..550251c
--- /dev/null
+++ b/src/tools/ak/res/naming_test.go
@@ -0,0 +1,341 @@
+// Copyright 2018 The Bazel Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package res
+
+import (
+ "reflect"
+ "strings"
+ "testing"
+)
+
+func TestNaming(t *testing.T) {
+ tests := []struct {
+ unparsed string
+ resType Type
+ want FullyQualifiedName
+ wantErrPrefix string
+ }{
+ {
+ "style/InlineProjectStyle",
+ ValueType,
+ FullyQualifiedName{
+ Name: "InlineProjectStyle",
+ Type: Style,
+ Package: "res-auto",
+ },
+ "",
+ },
+ {
+ "android:style/InlineProjectStyle",
+ ValueType,
+ FullyQualifiedName{
+ Name: "InlineProjectStyle",
+ Type: Style,
+ Package: "android",
+ },
+ "",
+ },
+ {
+ "@style/InlineProjectStyle",
+ ValueType,
+ FullyQualifiedName{
+ Name: "InlineProjectStyle",
+ Type: Style,
+ Package: "res-auto",
+ },
+ "",
+ },
+ {
+ "@style/android:InlineProjectStyle",
+ ValueType,
+ FullyQualifiedName{
+ Name: "InlineProjectStyle",
+ Type: Style,
+ Package: "android",
+ },
+ "",
+ },
+ {
+ "?style/InlineProjectStyle",
+ ValueType,
+ FullyQualifiedName{
+ Name: "InlineProjectStyle",
+ Type: Style,
+ Package: "res-auto",
+ },
+ "",
+ },
+ {
+ "?style/android:InlineProjectStyle",
+ ValueType,
+ FullyQualifiedName{
+ Name: "InlineProjectStyle",
+ Type: Style,
+ Package: "android",
+ },
+ "",
+ },
+ {
+ "android:style/Widget.TextView",
+ ValueType,
+ FullyQualifiedName{
+ Name: "Widget.TextView",
+ Type: Style,
+ Package: "android",
+ },
+ "",
+ },
+ {
+ "@android:style/Widget.TextView",
+ ValueType,
+ FullyQualifiedName{
+ Name: "Widget.TextView",
+ Type: Style,
+ Package: "android",
+ },
+ "",
+ },
+ {
+ "?android:style/Widget.TextView",
+ ValueType,
+ FullyQualifiedName{
+ Name: "Widget.TextView",
+ Type: Style,
+ Package: "android",
+ },
+ "",
+ },
+ {
+ "?attr/styleReference",
+ ValueType,
+ FullyQualifiedName{
+ Name: "styleReference",
+ Type: Attr,
+ Package: "res-auto",
+ },
+ "",
+ },
+ {
+ "?android:attr/textAppearance",
+ ValueType,
+ FullyQualifiedName{
+ Name: "textAppearance",
+ Type: Attr,
+ Package: "android",
+ },
+ "",
+ },
+ {
+ "?attr/android:textAppearance",
+ ValueType,
+ FullyQualifiedName{
+ Name: "textAppearance",
+ Type: Attr,
+ Package: "android",
+ },
+ "",
+ },
+ {
+ "@dimen/viewer:progress_bar_height",
+ ValueType,
+ FullyQualifiedName{
+ Name: "progress_bar_height",
+ Type: Dimen,
+ Package: "viewer",
+ },
+ "",
+ },
+ {
+ "drawable/simple",
+ Drawable,
+ FullyQualifiedName{
+ Name: "simple",
+ Type: Drawable,
+ Package: "res-auto",
+ },
+ "",
+ },
+ {
+ "android:fraction/name",
+ ValueType,
+ FullyQualifiedName{
+ Name: "name",
+ Type: Fraction,
+ Package: "android",
+ },
+ "",
+ },
+ {
+ "android:style/foo:with_colon",
+ ValueType,
+ FullyQualifiedName{
+ Name: "foo:with_colon",
+ Type: Style,
+ Package: "android",
+ },
+ "",
+ },
+ {
+ "color/red",
+ ValueType,
+ FullyQualifiedName{
+ Name: "red",
+ Type: Color,
+ Package: "res-auto",
+ },
+ "",
+ },
+ {
+ "style/bright:with_colon",
+ ValueType,
+ FullyQualifiedName{
+ Name: "with_colon",
+ Type: Style,
+ Package: "bright",
+ },
+ "",
+ },
+ {
+ "com.google.android.apps.gmoney:array/available_locales",
+ ValueType,
+ FullyQualifiedName{
+ Name: "available_locales",
+ Type: Array,
+ Package: "com.google.android.apps.gmoney",
+ },
+ "",
+ },
+ {
+ "@android:string/ok",
+ ValueType,
+ FullyQualifiedName{
+ Name: "ok",
+ Type: String,
+ Package: "android",
+ },
+ "",
+ },
+ {
+ "@string/android:ok",
+ ValueType,
+ FullyQualifiedName{
+ Name: "ok",
+ Type: String,
+ Package: "android",
+ },
+ "",
+ },
+ {
+ "name",
+ String,
+ FullyQualifiedName{
+ Package: "res-auto",
+ Type: String,
+ Name: "name",
+ },
+ "",
+ },
+ {
+ "string/name",
+ String,
+ FullyQualifiedName{
+ Package: "res-auto",
+ Type: String,
+ Name: "name",
+ },
+ "",
+ },
+ {
+ "android:Theme.Material.Light",
+ Style,
+ FullyQualifiedName{
+ Package: "android",
+ Type: Style,
+ Name: "Theme.Material.Light",
+ },
+ "",
+ },
+ {
+ "@android:attr/borderlessButtonStyle",
+ Style,
+ FullyQualifiedName{
+ Package: "android",
+ Type: Attr,
+ Name: "borderlessButtonStyle",
+ },
+ "",
+ },
+ {
+ "@id/:packagelessId",
+ Style,
+ FullyQualifiedName{
+ Package: "res-auto",
+ Type: ID,
+ Name: "packagelessId",
+ },
+ "",
+ },
+ {
+ "InlineProjectStyle",
+ UnknownType,
+ FullyQualifiedName{},
+ "cannot determine type",
+ },
+ {
+ "android:InlineProjectStyle",
+ UnknownType,
+ FullyQualifiedName{},
+ "cannot determine type",
+ },
+ {
+ "res-auto:InlineProjectStyle",
+ UnknownType,
+ FullyQualifiedName{},
+ "cannot determine type",
+ },
+ {
+ "style/",
+ ValueType,
+ FullyQualifiedName{},
+ "cannot determine name",
+ },
+ {
+ ":style/InlineProjectStyle",
+ ValueType,
+ FullyQualifiedName{},
+ "malformed name",
+ },
+ {
+ "/InlineProjectStyle",
+ ValueType,
+ FullyQualifiedName{},
+ "malformed name",
+ },
+ }
+
+ for _, tc := range tests {
+ got, gotErr := ParseName(tc.unparsed, tc.resType)
+ if !reflect.DeepEqual(got, tc.want) {
+ t.Errorf("ParseName(%s, %+v): got: %#v want: %#v", tc.unparsed, tc.resType, got, tc.want)
+ }
+
+ if gotErr != nil && ("" == tc.wantErrPrefix || !strings.HasPrefix(gotErr.Error(), tc.wantErrPrefix)) {
+ t.Errorf("ParseName(%s, %+v): %v want prefix: %s", tc.unparsed, tc.resType, gotErr, tc.wantErrPrefix)
+ }
+ if gotErr == nil && "" != tc.wantErrPrefix {
+ t.Errorf("ParseName(%s, %+v): got no err want err prefix: %s", tc.unparsed, tc.resType, tc.wantErrPrefix)
+ }
+ }
+}