From 09a46645a0e34ff6ef631b52963f0ab814c04b92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Gronowski?= Date: Fri, 12 Dec 2025 12:39:26 +0100 Subject: [PATCH] image/tree: Add golden test MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Paweł Gronowski --- ...uccess.expanded-view-with-platforms.golden | 5 + ...mixed-tagged-untagged-with-children.golden | 10 + ...and-success.untagged-with-platforms.golden | 5 + ...-success.width-calculation-untagged.golden | 4 + cli/command/image/tree_test.go | 199 ++++++++++++++++++ 5 files changed, 223 insertions(+) create mode 100644 cli/command/image/testdata/tree-command-success.expanded-view-with-platforms.golden create mode 100644 cli/command/image/testdata/tree-command-success.mixed-tagged-untagged-with-children.golden create mode 100644 cli/command/image/testdata/tree-command-success.untagged-with-platforms.golden create mode 100644 cli/command/image/testdata/tree-command-success.width-calculation-untagged.golden diff --git a/cli/command/image/testdata/tree-command-success.expanded-view-with-platforms.golden b/cli/command/image/testdata/tree-command-success.expanded-view-with-platforms.golden new file mode 100644 index 0000000000..2fd950562b --- /dev/null +++ b/cli/command/image/testdata/tree-command-success.expanded-view-with-platforms.golden @@ -0,0 +1,5 @@ +IMAGE ID DISK USAGE CONTENT SIZE EXTRA +multiplatform:latest aaaaaaaaaaaa 25.5 MB 20.2 MB U +├─ linux/amd64 bbbbbbbbbbbb 12.1 MB 10.0 MB +└─ linux/arm64 cccccccccccc 13.4 MB 10.2 MB U + diff --git a/cli/command/image/testdata/tree-command-success.mixed-tagged-untagged-with-children.golden b/cli/command/image/testdata/tree-command-success.mixed-tagged-untagged-with-children.golden new file mode 100644 index 0000000000..ce0b92828c --- /dev/null +++ b/cli/command/image/testdata/tree-command-success.mixed-tagged-untagged-with-children.golden @@ -0,0 +1,10 @@ +IMAGE ID DISK USAGE CONTENT SIZE EXTRA +app:v1 +app:latest 101010101010 30.5 MB 25.2 MB U +└─ linux/amd64 202020202020 15.2 MB 12.6 MB U + + 303030303030 12.3 MB 10.1 MB +└─ linux/arm/v7 404040404040 6.1 MB 5.0 MB + +base:alpine 505050505050 5.5 MB 5.5 MB + diff --git a/cli/command/image/testdata/tree-command-success.untagged-with-platforms.golden b/cli/command/image/testdata/tree-command-success.untagged-with-platforms.golden new file mode 100644 index 0000000000..465b678573 --- /dev/null +++ b/cli/command/image/testdata/tree-command-success.untagged-with-platforms.golden @@ -0,0 +1,5 @@ +IMAGE ID DISK USAGE CONTENT SIZE EXTRA + dddddddddddd 18.5 MB 15.2 MB +├─ linux/amd64 eeeeeeeeeeee 9.2 MB 7.6 MB +└─ linux/arm64 ffffffffffff 9.3 MB 7.6 MB + diff --git a/cli/command/image/testdata/tree-command-success.width-calculation-untagged.golden b/cli/command/image/testdata/tree-command-success.width-calculation-untagged.golden new file mode 100644 index 0000000000..6c58f0aa4b --- /dev/null +++ b/cli/command/image/testdata/tree-command-success.width-calculation-untagged.golden @@ -0,0 +1,4 @@ +IMAGE ID DISK USAGE CONTENT SIZE EXTRA +a:1 111111111111 5.5 MB 2.5 MB + 222222222222 3.2 MB 1.6 MB +short:v1 333333333333 7.1 MB 3.5 MB U diff --git a/cli/command/image/tree_test.go b/cli/command/image/tree_test.go index 8e340cc844..4516c08a1b 100644 --- a/cli/command/image/tree_test.go +++ b/cli/command/image/tree_test.go @@ -1,11 +1,13 @@ package image import ( + "fmt" "strings" "testing" "github.com/docker/cli/internal/test" "gotest.tools/v3/assert" + "gotest.tools/v3/golden" ) func TestPrintImageTreeAnsiTty(t *testing.T) { @@ -154,3 +156,200 @@ func TestPrintImageTreeAnsiTty(t *testing.T) { }) } } + +func TestPrintImageTreeGolden(t *testing.T) { + testCases := []struct { + name string + view treeView + expanded bool + }{ + { + name: "width-calculation-untagged", + expanded: false, + view: treeView{ + images: []topImage{ + { + Names: []string{"a:1"}, + Details: imageDetails{ + ID: "sha256:1111111111111111111111111111111111111111111111111111111111111111", + DiskUsage: "5.5 MB", + InUse: false, + ContentSize: "2.5 MB", + }, + }, + { + // Untagged image name is longer than "a:1" + Names: []string{}, + Details: imageDetails{ + ID: "sha256:2222222222222222222222222222222222222222222222222222222222222222", + DiskUsage: "3.2 MB", + InUse: false, + ContentSize: "1.6 MB", + }, + }, + { + Names: []string{"short:v1"}, + Details: imageDetails{ + ID: "sha256:3333333333333333333333333333333333333333333333333333333333333333", + DiskUsage: "7.1 MB", + InUse: true, + ContentSize: "3.5 MB", + }, + }, + }, + imageSpacing: false, + }, + }, + { + name: "expanded-view-with-platforms", + expanded: false, + view: treeView{ + images: []topImage{ + { + Names: []string{"multiplatform:latest"}, + Details: imageDetails{ + ID: "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + DiskUsage: "25.5 MB", + InUse: true, + ContentSize: "20.2 MB", + }, + Children: []subImage{ + { + Platform: "linux/amd64", + Available: true, + Details: imageDetails{ + ID: "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", + DiskUsage: "12.1 MB", + InUse: false, + ContentSize: "10.0 MB", + }, + }, + { + Platform: "linux/arm64", + Available: true, + Details: imageDetails{ + ID: "sha256:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", + DiskUsage: "13.4 MB", + InUse: true, + ContentSize: "10.2 MB", + }, + }, + }, + }, + }, + imageSpacing: true, + }, + }, + { + name: "untagged-with-platforms", + expanded: false, + view: treeView{ + images: []topImage{ + { + Names: []string{}, + Details: imageDetails{ + ID: "sha256:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd", + DiskUsage: "18.5 MB", + InUse: false, + ContentSize: "15.2 MB", + }, + Children: []subImage{ + { + Platform: "linux/amd64", + Available: true, + Details: imageDetails{ + ID: "sha256:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", + DiskUsage: "9.2 MB", + InUse: false, + ContentSize: "7.6 MB", + }, + }, + { + Platform: "linux/arm64", + Available: false, + Details: imageDetails{ + ID: "sha256:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + DiskUsage: "9.3 MB", + InUse: false, + ContentSize: "7.6 MB", + }, + }, + }, + }, + }, + imageSpacing: true, + }, + }, + { + name: "mixed-tagged-untagged-with-children", + expanded: false, + view: treeView{ + images: []topImage{ + { + Names: []string{"app:v1", "app:latest"}, + Details: imageDetails{ + ID: "sha256:1010101010101010101010101010101010101010101010101010101010101010", + DiskUsage: "30.5 MB", + InUse: true, + ContentSize: "25.2 MB", + }, + Children: []subImage{ + { + Platform: "linux/amd64", + Available: true, + Details: imageDetails{ + ID: "sha256:2020202020202020202020202020202020202020202020202020202020202020", + DiskUsage: "15.2 MB", + InUse: true, + ContentSize: "12.6 MB", + }, + }, + }, + }, + { + Names: []string{}, + Details: imageDetails{ + ID: "sha256:3030303030303030303030303030303030303030303030303030303030303030", + DiskUsage: "12.3 MB", + InUse: false, + ContentSize: "10.1 MB", + }, + Children: []subImage{ + { + Platform: "linux/arm/v7", + Available: true, + Details: imageDetails{ + ID: "sha256:4040404040404040404040404040404040404040404040404040404040404040", + DiskUsage: "6.1 MB", + InUse: false, + ContentSize: "5.0 MB", + }, + }, + }, + }, + { + Names: []string{"base:alpine"}, + Details: imageDetails{ + ID: "sha256:5050505050505050505050505050505050505050505050505050505050505050", + DiskUsage: "5.5 MB", + InUse: false, + ContentSize: "5.5 MB", + }, + }, + }, + imageSpacing: true, + }, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + cli := test.NewFakeCli(nil) + cli.Out().SetIsTerminal(false) + + printImageTree(cli, tc.view) + + golden.Assert(t, cli.OutBuffer().String(), fmt.Sprintf("tree-command-success.%s.golden", tc.name)) + }) + } +}