| package deps_parser |
| |
| import ( |
| "context" |
| "testing" |
| |
| "github.com/go-python/gpython/ast" |
| "github.com/stretchr/testify/require" |
| "go.skia.org/infra/go/deepequal/assertdeep" |
| "go.skia.org/infra/go/gitiles" |
| ) |
| |
| func TestParseDepsRealWorld(t *testing.T) { |
| // Manual test, since it loads data from real APIs. |
| |
| type depsEntryPos struct { |
| *DepsEntry |
| *ast.Pos |
| } |
| ctx := context.Background() |
| |
| // checkDeps loads the DEPS file from the given repo at the given |
| // revision and asserts that it contains the given deps. |
| checkDeps := func(repo string, rev string, expectMap map[string]*depsEntryPos) { |
| contents, err := gitiles.NewRepo(repo, nil).ReadFileAtRef(ctx, "DEPS", rev) |
| require.NoError(t, err) |
| actual, poss, err := parseDeps(string(contents)) |
| require.NoError(t, err) |
| actualMap := make(map[string]*depsEntryPos, len(actual)) |
| for depId, dep := range actual { |
| actualMap[depId] = &depsEntryPos{ |
| DepsEntry: dep, |
| Pos: poss[depId], |
| } |
| } |
| for id, expect := range expectMap { |
| assertdeep.Equal(t, expect, actualMap[id]) |
| } |
| } |
| |
| // Chromium DEPS. We expect this to be the most complex example of a |
| // DEPS file. Check a few example dependencies. |
| checkDeps("https://chromium.googlesource.com/chromium/src.git", "9f0b31d5560995206ce92535935c2989913bd5bd", map[string]*depsEntryPos{ |
| "skia.googlesource.com/skia": { |
| // Skia is a simple (non-dict) dep with a vars lookup. |
| DepsEntry: &DepsEntry{ |
| Id: "skia.googlesource.com/skia", |
| Version: "85755f46a8810b1863493a81887f1dc17c2e49e1", |
| Path: "src/third_party/skia", |
| }, |
| Pos: &ast.Pos{ |
| Lineno: 178, |
| ColOffset: 19, |
| }, |
| }, |
| "infra/tools/luci/swarming": { |
| // Swarming client is a CIPD dep with a vars lookup. |
| DepsEntry: &DepsEntry{ |
| Id: "infra/tools/luci/swarming", |
| Version: "git_revision:de73cf6c4bde86f0a9c8d54151b69b0154a398f1", |
| Path: "src/tools/luci-go", |
| }, |
| Pos: &ast.Pos{ |
| Lineno: 159, |
| ColOffset: 13, |
| }, |
| }, |
| "android.googlesource.com/platform/external/protobuf": { |
| // This is a dict entry whose version is defined in place. |
| DepsEntry: &DepsEntry{ |
| Id: "android.googlesource.com/platform/external/protobuf", |
| Version: "7fca48d8ce97f7ba3ab8eea5c472f1ad3711762f", |
| Path: "src/third_party/android_protobuf/src", |
| }, |
| Pos: &ast.Pos{ |
| Lineno: 640, |
| ColOffset: 76, |
| }, |
| }, |
| }) |
| |
| // ANGLE. This entry caused a problem in the past. |
| checkDeps("https://chromium.googlesource.com/angle/angle.git", "390ef29999bc0b1c1b976c1428b5914718477f4e", map[string]*depsEntryPos{ |
| "chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Tools": { |
| DepsEntry: &DepsEntry{ |
| Id: "chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Tools", |
| Version: "e95fbfb1f509ad7a7fdfb72ac35fe412d72fc4a4", |
| Path: "third_party/spirv-tools/src", |
| }, |
| Pos: &ast.Pos{ |
| Lineno: 49, |
| ColOffset: 26, |
| }, |
| }, |
| }) |
| |
| // This DEPS file has an unpinned entry. |
| checkDeps("https://chromium.googlesource.com/infra/infra.git", "fbd6fe605e30b496eab7a1ddb367cfb24cb86d99", map[string]*depsEntryPos{ |
| "chromium.googlesource.com/chromium/tools/build": { |
| DepsEntry: &DepsEntry{ |
| Id: "chromium.googlesource.com/chromium/tools/build", |
| Version: "", |
| Path: "build", |
| }, |
| Pos: &ast.Pos{ |
| Lineno: 8, |
| ColOffset: 4, |
| }, |
| }, |
| }) |
| } |