| 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) |
| } |
| } |