blob: ff6b9b971dc357a64496609bdb40aba58490e32e [file] [log] [blame] [edit]
/*
* Copyright 2020 Google LLC
*
* 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
*
* https://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 labels
import (
"testing"
)
var parseLabelTests = []struct {
in string
repo string
pkg string
target string
}{
{"//devtools/buildozer:rule", "", "devtools/buildozer", "rule"},
{"devtools/buildozer:rule", "", "devtools/buildozer", "rule"},
{"//devtools/buildozer", "", "devtools/buildozer", "buildozer"},
{"//base", "", "base", "base"},
{"//base:", "", "base", "base"},
{"@r//devtools/buildozer:rule", "r", "devtools/buildozer", "rule"},
{"@r//devtools/buildozer", "r", "devtools/buildozer", "buildozer"},
{"@r//base", "r", "base", "base"},
{"@r//base:", "r", "base", "base"},
{"@foo", "foo", "", "foo"},
{":label", "", "", "label"},
{"label", "", "", "label"},
{"/abs/path/to/WORKSPACE:rule", "", "/abs/path/to/WORKSPACE", "rule"},
}
func TestParseLabel(t *testing.T) {
for i, tt := range parseLabelTests {
l := Parse(tt.in)
if l.Repository != tt.repo || l.Package != tt.pkg || l.Target != tt.target {
t.Errorf("%d. Parse(%q) => (%q, %q, %q), want (%q, %q, %q)",
i, tt.in, l.Repository, l.Package, l.Target, tt.repo, tt.pkg, tt.target)
}
}
}
var shortenLabelTests = []struct {
in string
pkg string
result string
}{
{"//devtools/buildozer:rule", "devtools/buildozer", ":rule"},
{"@//devtools/buildozer:rule", "devtools/buildozer", ":rule"},
{"//devtools/buildozer:rule", "devtools", "//devtools/buildozer:rule"},
{"//base:rule", "devtools", "//base:rule"},
{"//base:base", "devtools", "//base"},
{"//base", "base", ":base"},
{"//devtools/buildozer:buildozer", "", "//devtools/buildozer"},
{"@r//devtools/buildozer:buildozer", "devtools/buildozer", "@r//devtools/buildozer"},
{"@r//devtools/buildozer", "devtools/buildozer", "@r//devtools/buildozer"},
{"@r//devtools", "devtools", "@r//devtools"},
{"@r:rule", "", "@r:rule"},
{"@r", "", "@r"},
{"@foo//:foo", "", "@foo"},
{"@foo//devtools:foo", "", "@foo//devtools:foo"},
{"@foo//devtools:foo", "devtools", "@foo//devtools:foo"},
{"@foo//foo:foo", "", "@foo//foo"},
{":local", "", ":local"},
{"something else", "", "something else"},
{"/path/to/file", "path/to", "/path/to/file"},
{"\"//baz\"", "", "\"//baz\""},
}
func TestShortenLabel(t *testing.T) {
for i, tt := range shortenLabelTests {
result := Shorten(tt.in, tt.pkg)
if result != tt.result {
t.Errorf("%d. Shorten(%q, %q) => %q, want %q",
i, tt.in, tt.pkg, result, tt.result)
}
}
}
var labelsEqualTests = []struct {
label1 string
label2 string
pkg string
expected bool
}{
{"//devtools/buildozer:rule", "rule", "devtools/buildozer", true},
{"//devtools/buildozer:rule", "rule:jar", "devtools", false},
}
func TestLabelsEqual(t *testing.T) {
for i, tt := range labelsEqualTests {
if got := Equal(tt.label1, tt.label2, tt.pkg); got != tt.expected {
t.Errorf("%d. Equal(%q, %q, %q) => %v, want %v",
i, tt.label1, tt.label2, tt.pkg, got, tt.expected)
}
}
}