blob: 2a0ac1dc8bbee7a40906ec60a510279d7b124b7e [file] [log] [blame]
package deps
import (
"reflect"
"testing"
"github.com/bazelbuild/buildtools/build"
)
func TestRuleParser(t *testing.T) {
exampleRule := `
http_archive(
name = "com_google_absl",
sha256 = "44634eae586a7158dceedda7d8fd5cec6d1ebae08c83399f75dd9ce76324de40", # Last updated 2022-05-18
strip_prefix = "abseil-cpp-3e04aade4e7a53aebbbed1a1268117f1f522bfb0",
urls = ["https://github.com/abseil/abseil-cpp/archive/3e04aade4e7a53aebbbed1a1268117f1f522bfb0.zip"],
)`
file, err := build.ParseWorkspace("WORKSPACE.bazel", []byte(exampleRule))
if err != nil {
t.Fatal(err)
}
rule, ok := HTTPArchiveRule(file.Stmt[0])
if !ok {
t.Fatal("The first rule encountered is not http_archive")
}
deps, err := ParseHTTPArchiveRule(rule)
if err != nil {
t.Fatal(err)
}
expected := Entry{
Name: "com_google_absl",
SHA256: "44634eae586a7158dceedda7d8fd5cec6d1ebae08c83399f75dd9ce76324de40",
Prefix: "abseil-cpp-3e04aade4e7a53aebbbed1a1268117f1f522bfb0",
URL: "https://github.com/abseil/abseil-cpp/archive/3e04aade4e7a53aebbbed1a1268117f1f522bfb0.zip",
LastUpdated: "2022-05-18",
}
if !reflect.DeepEqual(*deps, expected) {
t.Errorf("Parsing returned incorret result, expected:\n %v\n, got:\n %v", expected, *deps)
}
}
func TestMultipleRules(t *testing.T) {
exampleRules := `
http_archive(
name = "com_google_absl",
sha256 = "44634eae586a7158dceedda7d8fd5cec6d1ebae08c83399f75dd9ce76324de40", # Last updated 2022-05-18
strip_prefix = "abseil-cpp-3e04aade4e7a53aebbbed1a1268117f1f522bfb0",
urls = ["https://github.com/abseil/abseil-cpp/archive/3e04aade4e7a53aebbbed1a1268117f1f522bfb0.zip"],
)
irrelevant_call()
http_archive(
name = "com_google_protobuf",
sha256 = "8b28fdd45bab62d15db232ec404248901842e5340299a57765e48abe8a80d930", # Last updated 2022-05-18
strip_prefix = "protobuf-3.20.1",
urls = ["https://github.com/protocolbuffers/protobuf/archive/refs/tags/v3.20.1.tar.gz"],
)
`
rules, err := ParseHTTPArchiveRules([]byte(exampleRules))
if err != nil {
t.Fatal(err)
}
if len(rules) != 2 {
t.Fatalf("Expected 2 rules, got %d", len(rules))
}
if rules[0].Name != "com_google_absl" || rules[1].Name != "com_google_protobuf" {
t.Errorf("Expected the two rules to be com_google_absl and com_google_protobuf, got %s and %s", rules[0].Name, rules[1].Name)
}
}
func TestBazelParseError(t *testing.T) {
exampleRule := `
http_archive(
name = "com_google_absl",
sha256 = "44634eae586a7158dceedda7d8fd5cec6d1ebae08c83399f75dd9ce76324de40", # Last updated 2022-05-18
strip_prefix = "abseil-cpp-3e04aade4e7a53aebbbed1a1268117f1f522bfb0",
urls = ["https://github.com/abseil/abseil-cpp/archive/3e04aade4e7a53aebbbed1a1268117f1f522bfb0.zip"],
`
_, err := ParseHTTPArchiveRules([]byte(exampleRule))
if err == nil {
t.Errorf("Expected parser error")
}
}
func TestMissingField(t *testing.T) {
exampleRule := `
http_archive(
name = "com_google_absl",
strip_prefix = "abseil-cpp-3e04aade4e7a53aebbbed1a1268117f1f522bfb0",
urls = ["https://github.com/abseil/abseil-cpp/archive/3e04aade4e7a53aebbbed1a1268117f1f522bfb0.zip"],
)`
_, err := ParseHTTPArchiveRules([]byte(exampleRule))
if err == nil || err.Error() != "missing the sha256 field" {
t.Errorf("Expected the missing sha256 error, got %v", err)
}
}