From 67ddf73525e888799fffbb584fe1ab85c41e25d0 Mon Sep 17 00:00:00 2001 From: Matt Clarkson Date: Wed, 12 Feb 2025 13:37:24 +0000 Subject: [PATCH 1/8] test(cat): add version and concatenate test --- e2e/binary/cat/BUILD.bazel | 34 ++++++++++++++++++++++++++++------ e2e/binary/cat/a.txt | 5 +++++ e2e/binary/cat/b.txt | 5 +++++ e2e/binary/cat/concatenate.py | 19 +++++++++++++++++++ e2e/binary/cat/expected.txt | 10 ++++++++++ 5 files changed, 67 insertions(+), 6 deletions(-) create mode 100644 e2e/binary/cat/a.txt create mode 100644 e2e/binary/cat/b.txt create mode 100644 e2e/binary/cat/concatenate.py create mode 100644 e2e/binary/cat/expected.txt diff --git a/e2e/binary/cat/BUILD.bazel b/e2e/binary/cat/BUILD.bazel index d4f88d08..719b092f 100644 --- a/e2e/binary/cat/BUILD.bazel +++ b/e2e/binary/cat/BUILD.bazel @@ -1,11 +1,33 @@ -load("@bazel_skylib//rules:build_test.bzl", "build_test") +load("@rules_python_pytest//python_pytest:defs.bzl", "py_pytest_test") +load("@bazel_skylib//rules:native_binary.bzl", "native_test") -# TODO: write an _actual_ test for `cat` +py_pytest_test( + name = "pytest", + size = "small", + srcs = ["concatenate.py"], + data = [ + "a.txt", + "b.txt", + "expected.txt", + "@ape//ape:cat", + ], + deps = [ + "//binary:pytest", + ], +) -build_test( - name = "cat", +native_test( + name = "version", size = "small", - tags = ["stub"], - targets = ["@ape//ape:cat"], + src = "@ape//ape:cat", + args = ["--version"], +) + +test_suite( + name = "cat", + tests = [ + "pytest", + "version", + ], visibility = ["//:__subpackages__"], ) diff --git a/e2e/binary/cat/a.txt b/e2e/binary/cat/a.txt new file mode 100644 index 00000000..0ce37929 --- /dev/null +++ b/e2e/binary/cat/a.txt @@ -0,0 +1,5 @@ +This is the start of the first file! + +Hello, world! + +This is the end of the first file! diff --git a/e2e/binary/cat/b.txt b/e2e/binary/cat/b.txt new file mode 100644 index 00000000..16e0f8bc --- /dev/null +++ b/e2e/binary/cat/b.txt @@ -0,0 +1,5 @@ +This is the start of the second file! + +Hello, universe! + +This is the end of the second file! diff --git a/e2e/binary/cat/concatenate.py b/e2e/binary/cat/concatenate.py new file mode 100644 index 00000000..d0c8d876 --- /dev/null +++ b/e2e/binary/cat/concatenate.py @@ -0,0 +1,19 @@ +from __future__ import annotations + +from pathlib import Path +from subprocess import run + +from binary import Diff, Relative, Tool + + +def test_concatenate(tool: Tool, relative: Relative, tmp_path: Path) -> None: + binary = tool("cat") + a = relative("a.txt") + b = relative("b.txt") + expected = relative("expected.txt") + output = tmp_path / "output.txt" + + cmd = (binary, a, b) + with open(output, "w") as stream: + run(cmd, check=True, timeout=30, stdout=stream) + assert Diff(expected) == Diff(output) diff --git a/e2e/binary/cat/expected.txt b/e2e/binary/cat/expected.txt new file mode 100644 index 00000000..69715240 --- /dev/null +++ b/e2e/binary/cat/expected.txt @@ -0,0 +1,10 @@ +This is the start of the first file! + +Hello, world! + +This is the end of the first file! +This is the start of the second file! + +Hello, universe! + +This is the end of the second file! -- GitLab From 15fbe37c42d2725ff68a1d21b2712ec99a16f11b Mon Sep 17 00:00:00 2001 From: Matt Clarkson Date: Wed, 12 Feb 2025 13:39:02 +0000 Subject: [PATCH 2/8] test(tac): add version and concatenate test --- e2e/binary/tac/BUILD.bazel | 34 ++++++++++++++++++++++++++++------ e2e/binary/tac/a.txt | 5 +++++ e2e/binary/tac/b.txt | 5 +++++ e2e/binary/tac/concatenate.py | 19 +++++++++++++++++++ e2e/binary/tac/expected.txt | 10 ++++++++++ 5 files changed, 67 insertions(+), 6 deletions(-) create mode 100644 e2e/binary/tac/a.txt create mode 100644 e2e/binary/tac/b.txt create mode 100644 e2e/binary/tac/concatenate.py create mode 100644 e2e/binary/tac/expected.txt diff --git a/e2e/binary/tac/BUILD.bazel b/e2e/binary/tac/BUILD.bazel index 37669403..747c4b81 100644 --- a/e2e/binary/tac/BUILD.bazel +++ b/e2e/binary/tac/BUILD.bazel @@ -1,11 +1,33 @@ -load("@bazel_skylib//rules:build_test.bzl", "build_test") +load("@rules_python_pytest//python_pytest:defs.bzl", "py_pytest_test") +load("@bazel_skylib//rules:native_binary.bzl", "native_test") -# TODO: write an _actual_ test for `tac` +py_pytest_test( + name = "pytest", + size = "small", + srcs = ["concatenate.py"], + data = [ + "a.txt", + "b.txt", + "expected.txt", + "@ape//ape:tac", + ], + deps = [ + "//binary:pytest", + ], +) -build_test( - name = "tac", +native_test( + name = "version", size = "small", - tags = ["stub"], - targets = ["@ape//ape:tac"], + src = "@ape//ape:tac", + args = ["--version"], +) + +test_suite( + name = "tac", + tests = [ + "pytest", + "version", + ], visibility = ["//:__subpackages__"], ) diff --git a/e2e/binary/tac/a.txt b/e2e/binary/tac/a.txt new file mode 100644 index 00000000..0ce37929 --- /dev/null +++ b/e2e/binary/tac/a.txt @@ -0,0 +1,5 @@ +This is the start of the first file! + +Hello, world! + +This is the end of the first file! diff --git a/e2e/binary/tac/b.txt b/e2e/binary/tac/b.txt new file mode 100644 index 00000000..16e0f8bc --- /dev/null +++ b/e2e/binary/tac/b.txt @@ -0,0 +1,5 @@ +This is the start of the second file! + +Hello, universe! + +This is the end of the second file! diff --git a/e2e/binary/tac/concatenate.py b/e2e/binary/tac/concatenate.py new file mode 100644 index 00000000..cf10fad0 --- /dev/null +++ b/e2e/binary/tac/concatenate.py @@ -0,0 +1,19 @@ +from __future__ import annotations + +from pathlib import Path +from subprocess import run + +from binary import Diff, Relative, Tool + + +def test_concatenate(tool: Tool, relative: Relative, tmp_path: Path) -> None: + binary = tool("tac") + a = relative("a.txt") + b = relative("b.txt") + expected = relative("expected.txt") + output = tmp_path / "output.txt" + + cmd = (binary, a, b) + with open(output, "w") as stream: + run(cmd, check=True, timeout=30, stdout=stream) + assert Diff(expected) == Diff(output) diff --git a/e2e/binary/tac/expected.txt b/e2e/binary/tac/expected.txt new file mode 100644 index 00000000..c7ef0859 --- /dev/null +++ b/e2e/binary/tac/expected.txt @@ -0,0 +1,10 @@ +This is the end of the first file! + +Hello, world! + +This is the start of the first file! +This is the end of the second file! + +Hello, universe! + +This is the start of the second file! -- GitLab From da491bf2e5b49952313d18fcf244020da1907913 Mon Sep 17 00:00:00 2001 From: Matt Clarkson Date: Wed, 12 Feb 2025 13:41:15 +0000 Subject: [PATCH 3/8] test(cp): add version and copy test --- e2e/binary/cp/BUILD.bazel | 33 +++++++++++++++++++++++++++------ e2e/binary/cp/copy.py | 17 +++++++++++++++++ e2e/binary/cp/expected.txt | 19 +++++++++++++++++++ e2e/binary/cp/fixture.txt | 19 +++++++++++++++++++ 4 files changed, 82 insertions(+), 6 deletions(-) create mode 100644 e2e/binary/cp/copy.py create mode 100644 e2e/binary/cp/expected.txt create mode 100644 e2e/binary/cp/fixture.txt diff --git a/e2e/binary/cp/BUILD.bazel b/e2e/binary/cp/BUILD.bazel index 88df7b9a..51c73dc5 100644 --- a/e2e/binary/cp/BUILD.bazel +++ b/e2e/binary/cp/BUILD.bazel @@ -1,11 +1,32 @@ -load("@bazel_skylib//rules:build_test.bzl", "build_test") +load("@rules_python_pytest//python_pytest:defs.bzl", "py_pytest_test") +load("@bazel_skylib//rules:native_binary.bzl", "native_test") -# TODO: write an _actual_ test for `cp` +py_pytest_test( + name = "pytest", + size = "small", + srcs = ["copy.py"], + data = [ + "expected.txt", + "fixture.txt", + "@ape//ape:cp", + ], + deps = [ + "//binary:pytest", + ], +) -build_test( - name = "cp", +native_test( + name = "version", size = "small", - tags = ["stub"], - targets = ["@ape//ape:cp"], + src = "@ape//ape:cp", + args = ["--version"], +) + +test_suite( + name = "cp", + tests = [ + "pytest", + "version", + ], visibility = ["//:__subpackages__"], ) diff --git a/e2e/binary/cp/copy.py b/e2e/binary/cp/copy.py new file mode 100644 index 00000000..00c1be49 --- /dev/null +++ b/e2e/binary/cp/copy.py @@ -0,0 +1,17 @@ +from __future__ import annotations + +from pathlib import Path +from subprocess import run + +from binary import Diff, Relative, Tool + + +def test_copy(tool: Tool, relative: Relative, tmp_path: Path) -> None: + binary = tool("cp") + fixture = relative("fixture.txt") + expected = relative("expected.txt") + output = tmp_path / "output.txt" + + cmd = (binary, fixture, output) + run(cmd, check=True, timeout=30) + assert Diff(expected) == Diff(output) diff --git a/e2e/binary/cp/expected.txt b/e2e/binary/cp/expected.txt new file mode 100644 index 00000000..88797e25 --- /dev/null +++ b/e2e/binary/cp/expected.txt @@ -0,0 +1,19 @@ +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum placerat at risus a sagittis. Suspendisse potenti. Ut efficitur metus eu leo condimentum, sit amet efficitur mi tempus. Duis sit amet efficitur elit. Duis a ultrices massa. In hac habitasse platea dictumst. Integer vitae nibh tristique, tempus quam eget, sodales sem. + +Maecenas dapibus diam turpis, non tempor tellus facilisis a. Suspendisse congue tortor ut nisl egestas, et cursus mauris congue. Nullam vitae metus ultricies, rhoncus nibh a, hendrerit neque. Integer ut dictum tortor. Vivamus ligula sem, viverra nec laoreet rutrum, tempor quis felis. Sed eu ex tempus, consectetur tellus id, facilisis quam. Ut at libero vel diam imperdiet mollis. Vestibulum at dolor nec magna consequat porta. Integer ornare metus sit amet sem hendrerit semper. Duis convallis magna vitae ullamcorper auctor. Donec eu massa eget erat pulvinar scelerisque. Ut feugiat lectus non neque suscipit, a mollis dolor ornare. + +Mauris mi est, feugiat eget ante quis, cursus ultricies ante. Nunc sed magna magna. Quisque vitae mattis diam, vel eleifend nisi. Ut ultrices tincidunt mi sit amet vulputate. Fusce at aliquam justo. Nam a maximus felis, eget viverra arcu. Sed sapien odio, dapibus nec justo ut, maximus dignissim dui. Nam accumsan vitae urna imperdiet maximus. Nam gravida, ante id facilisis placerat, augue sem tincidunt dolor, at eleifend dui tortor ut nunc. In vestibulum lorem elit, at dignissim urna hendrerit vel. Nulla nisl erat, lobortis at neque in, ultrices lacinia tortor. Sed id faucibus ex. Vivamus ultrices magna non metus pretium, ut dapibus felis tristique. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Integer sollicitudin elit sit amet lectus maximus consequat id sit amet massa. Vivamus iaculis arcu sit amet metus gravida finibus. + +Maecenas orci odio, posuere eu consequat ut, posuere in dui. Pellentesque tincidunt ex lorem, non dignissim nibh elementum et. Nullam non finibus est. Nunc sed nisi eu tellus pulvinar auctor a in tortor. Ut risus tellus, pharetra in turpis vel, pretium laoreet quam. Donec sagittis leo sed porttitor lacinia. Sed ullamcorper laoreet metus, non feugiat metus consectetur at. In molestie congue lacus, quis tristique lacus vulputate sit amet. Vestibulum pharetra bibendum dui eget laoreet. Duis at felis consectetur, suscipit sapien consectetur, congue nibh. Aliquam egestas sagittis tortor, nec eleifend lectus pretium eget. Fusce nec nisl nec augue egestas aliquam ac finibus augue. Vestibulum a lectus et ex lobortis auctor. Donec quis tempus turpis, cursus ultrices arcu. Integer vel dui vehicula, consequat massa eget, feugiat eros. + +Fusce sollicitudin feugiat quam nec tincidunt. Sed non mattis tortor. Curabitur et leo nec neque mollis facilisis ac pellentesque dolor. Praesent faucibus odio ac condimentum facilisis. Pellentesque accumsan a nisi vitae maximus. Praesent pharetra vel nibh nec accumsan. Nam sit amet interdum tellus. Mauris euismod aliquet eros sed sollicitudin. Suspendisse fermentum urna et tempus bibendum. Praesent euismod dui ut efficitur aliquam. Cras eu fringilla tortor. + +Integer aliquet a nibh a rutrum. Sed ornare nisi magna, vitae fringilla massa sollicitudin eget. Ut hendrerit interdum vestibulum. Aenean ut felis consequat odio dapibus sagittis. Ut quis mauris lorem. Duis sollicitudin posuere mi, non suscipit erat. Nunc libero enim, finibus sit amet erat id, interdum semper eros. Aliquam eget ligula dui. Proin feugiat diam neque, sit amet pellentesque odio finibus eget. Phasellus feugiat nisl erat, non porttitor elit suscipit eget. Aenean luctus tortor arcu, vitae tempus enim feugiat non. Praesent feugiat dapibus est. Ut ullamcorper justo eleifend diam pretium, ultricies sagittis neque dapibus. Aliquam ut massa dolor. + +Vestibulum quis rutrum lacus. In hac habitasse platea dictumst. Proin porttitor risus et dapibus facilisis. Vestibulum ac dolor quis orci tempus molestie sit amet in mi. Aenean nisl urna, volutpat id purus a, pellentesque pretium metus. Maecenas convallis eros eget est rhoncus, non gravida justo feugiat. Sed bibendum elit a lacus ultrices blandit. Cras vel dui nibh. Ut gravida id erat quis posuere. Mauris condimentum eget ante et semper. Integer ornare egestas purus, quis efficitur ex. Nam dignissim diam orci. Cras dapibus scelerisque sapien, molestie gravida orci congue in. Mauris sed vulputate nisl, non fringilla lacus. Nam venenatis dui bibendum placerat finibus. Integer id lectus sit amet metus hendrerit rutrum a ac lorem. + +Aenean at lectus vel libero tristique rhoncus nec ut lorem. Aliquam eget massa nec nibh ornare facilisis in vitae libero. Cras rhoncus porttitor elementum. Ut quam ipsum, pellentesque sit amet hendrerit non, scelerisque sit amet nibh. Cras ultrices, erat sed tristique aliquet, mi felis vulputate mauris, eu mattis neque felis non diam. Nulla dapibus turpis vitae gravida euismod. Donec non tempus augue. Etiam lacinia ex sit amet sapien tempor lobortis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce molestie ante rhoncus fringilla convallis. Nullam tristique id lectus a egestas. In bibendum molestie ultricies. Suspendisse quis auctor enim. Morbi pellentesque rhoncus lacinia. + +Fusce consectetur velit at nisl accumsan laoreet. Etiam convallis dignissim ligula at congue. Nunc varius dui consectetur, aliquam urna non, bibendum felis. In a convallis enim. Nullam leo dolor, pretium id tristique ut, posuere sed sem. Proin vehicula, orci ut imperdiet pellentesque, velit magna accumsan purus, id viverra orci tellus eu tortor. Nullam rhoncus id odio ut elementum. Nullam condimentum eget mi quis aliquam. + +Ut posuere dolor vitae eros tempus, at varius dolor vestibulum. Cras venenatis odio gravida nisl viverra, nec imperdiet libero lobortis. Suspendisse potenti. Aenean varius, sapien et mollis sagittis, massa justo placerat nisi, id feugiat nunc nunc sit amet nisi. Nullam in sem id nisl vehicula tincidunt non vitae risus. Vestibulum dapibus, enim sed lacinia laoreet, lorem massa fermentum urna, et ornare nunc nibh ut sem. Fusce nisi arcu, feugiat eget erat vitae, fermentum porta ligula. Aenean in felis at ex vulputate dapibus id quis magna. Suspendisse semper rutrum eleifend. Donec mi felis, scelerisque id justo et, semper interdum libero. Proin sit amet tempor velit. Suspendisse eget dui orci. Sed accumsan tortor at nunc scelerisque dignissim. Mauris vestibulum, massa sit amet interdum egestas, erat sapien hendrerit nisi, quis sagittis ex ipsum pellentesque est. Duis sapien ante, finibus in nisi in, vestibulum semper libero. diff --git a/e2e/binary/cp/fixture.txt b/e2e/binary/cp/fixture.txt new file mode 100644 index 00000000..88797e25 --- /dev/null +++ b/e2e/binary/cp/fixture.txt @@ -0,0 +1,19 @@ +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum placerat at risus a sagittis. Suspendisse potenti. Ut efficitur metus eu leo condimentum, sit amet efficitur mi tempus. Duis sit amet efficitur elit. Duis a ultrices massa. In hac habitasse platea dictumst. Integer vitae nibh tristique, tempus quam eget, sodales sem. + +Maecenas dapibus diam turpis, non tempor tellus facilisis a. Suspendisse congue tortor ut nisl egestas, et cursus mauris congue. Nullam vitae metus ultricies, rhoncus nibh a, hendrerit neque. Integer ut dictum tortor. Vivamus ligula sem, viverra nec laoreet rutrum, tempor quis felis. Sed eu ex tempus, consectetur tellus id, facilisis quam. Ut at libero vel diam imperdiet mollis. Vestibulum at dolor nec magna consequat porta. Integer ornare metus sit amet sem hendrerit semper. Duis convallis magna vitae ullamcorper auctor. Donec eu massa eget erat pulvinar scelerisque. Ut feugiat lectus non neque suscipit, a mollis dolor ornare. + +Mauris mi est, feugiat eget ante quis, cursus ultricies ante. Nunc sed magna magna. Quisque vitae mattis diam, vel eleifend nisi. Ut ultrices tincidunt mi sit amet vulputate. Fusce at aliquam justo. Nam a maximus felis, eget viverra arcu. Sed sapien odio, dapibus nec justo ut, maximus dignissim dui. Nam accumsan vitae urna imperdiet maximus. Nam gravida, ante id facilisis placerat, augue sem tincidunt dolor, at eleifend dui tortor ut nunc. In vestibulum lorem elit, at dignissim urna hendrerit vel. Nulla nisl erat, lobortis at neque in, ultrices lacinia tortor. Sed id faucibus ex. Vivamus ultrices magna non metus pretium, ut dapibus felis tristique. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Integer sollicitudin elit sit amet lectus maximus consequat id sit amet massa. Vivamus iaculis arcu sit amet metus gravida finibus. + +Maecenas orci odio, posuere eu consequat ut, posuere in dui. Pellentesque tincidunt ex lorem, non dignissim nibh elementum et. Nullam non finibus est. Nunc sed nisi eu tellus pulvinar auctor a in tortor. Ut risus tellus, pharetra in turpis vel, pretium laoreet quam. Donec sagittis leo sed porttitor lacinia. Sed ullamcorper laoreet metus, non feugiat metus consectetur at. In molestie congue lacus, quis tristique lacus vulputate sit amet. Vestibulum pharetra bibendum dui eget laoreet. Duis at felis consectetur, suscipit sapien consectetur, congue nibh. Aliquam egestas sagittis tortor, nec eleifend lectus pretium eget. Fusce nec nisl nec augue egestas aliquam ac finibus augue. Vestibulum a lectus et ex lobortis auctor. Donec quis tempus turpis, cursus ultrices arcu. Integer vel dui vehicula, consequat massa eget, feugiat eros. + +Fusce sollicitudin feugiat quam nec tincidunt. Sed non mattis tortor. Curabitur et leo nec neque mollis facilisis ac pellentesque dolor. Praesent faucibus odio ac condimentum facilisis. Pellentesque accumsan a nisi vitae maximus. Praesent pharetra vel nibh nec accumsan. Nam sit amet interdum tellus. Mauris euismod aliquet eros sed sollicitudin. Suspendisse fermentum urna et tempus bibendum. Praesent euismod dui ut efficitur aliquam. Cras eu fringilla tortor. + +Integer aliquet a nibh a rutrum. Sed ornare nisi magna, vitae fringilla massa sollicitudin eget. Ut hendrerit interdum vestibulum. Aenean ut felis consequat odio dapibus sagittis. Ut quis mauris lorem. Duis sollicitudin posuere mi, non suscipit erat. Nunc libero enim, finibus sit amet erat id, interdum semper eros. Aliquam eget ligula dui. Proin feugiat diam neque, sit amet pellentesque odio finibus eget. Phasellus feugiat nisl erat, non porttitor elit suscipit eget. Aenean luctus tortor arcu, vitae tempus enim feugiat non. Praesent feugiat dapibus est. Ut ullamcorper justo eleifend diam pretium, ultricies sagittis neque dapibus. Aliquam ut massa dolor. + +Vestibulum quis rutrum lacus. In hac habitasse platea dictumst. Proin porttitor risus et dapibus facilisis. Vestibulum ac dolor quis orci tempus molestie sit amet in mi. Aenean nisl urna, volutpat id purus a, pellentesque pretium metus. Maecenas convallis eros eget est rhoncus, non gravida justo feugiat. Sed bibendum elit a lacus ultrices blandit. Cras vel dui nibh. Ut gravida id erat quis posuere. Mauris condimentum eget ante et semper. Integer ornare egestas purus, quis efficitur ex. Nam dignissim diam orci. Cras dapibus scelerisque sapien, molestie gravida orci congue in. Mauris sed vulputate nisl, non fringilla lacus. Nam venenatis dui bibendum placerat finibus. Integer id lectus sit amet metus hendrerit rutrum a ac lorem. + +Aenean at lectus vel libero tristique rhoncus nec ut lorem. Aliquam eget massa nec nibh ornare facilisis in vitae libero. Cras rhoncus porttitor elementum. Ut quam ipsum, pellentesque sit amet hendrerit non, scelerisque sit amet nibh. Cras ultrices, erat sed tristique aliquet, mi felis vulputate mauris, eu mattis neque felis non diam. Nulla dapibus turpis vitae gravida euismod. Donec non tempus augue. Etiam lacinia ex sit amet sapien tempor lobortis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce molestie ante rhoncus fringilla convallis. Nullam tristique id lectus a egestas. In bibendum molestie ultricies. Suspendisse quis auctor enim. Morbi pellentesque rhoncus lacinia. + +Fusce consectetur velit at nisl accumsan laoreet. Etiam convallis dignissim ligula at congue. Nunc varius dui consectetur, aliquam urna non, bibendum felis. In a convallis enim. Nullam leo dolor, pretium id tristique ut, posuere sed sem. Proin vehicula, orci ut imperdiet pellentesque, velit magna accumsan purus, id viverra orci tellus eu tortor. Nullam rhoncus id odio ut elementum. Nullam condimentum eget mi quis aliquam. + +Ut posuere dolor vitae eros tempus, at varius dolor vestibulum. Cras venenatis odio gravida nisl viverra, nec imperdiet libero lobortis. Suspendisse potenti. Aenean varius, sapien et mollis sagittis, massa justo placerat nisi, id feugiat nunc nunc sit amet nisi. Nullam in sem id nisl vehicula tincidunt non vitae risus. Vestibulum dapibus, enim sed lacinia laoreet, lorem massa fermentum urna, et ornare nunc nibh ut sem. Fusce nisi arcu, feugiat eget erat vitae, fermentum porta ligula. Aenean in felis at ex vulputate dapibus id quis magna. Suspendisse semper rutrum eleifend. Donec mi felis, scelerisque id justo et, semper interdum libero. Proin sit amet tempor velit. Suspendisse eget dui orci. Sed accumsan tortor at nunc scelerisque dignissim. Mauris vestibulum, massa sit amet interdum egestas, erat sapien hendrerit nisi, quis sagittis ex ipsum pellentesque est. Duis sapien ante, finibus in nisi in, vestibulum semper libero. -- GitLab From a1ece0382c75ba23d6c74d28bfe8af6f10f90971 Mon Sep 17 00:00:00 2001 From: Matt Clarkson Date: Wed, 12 Feb 2025 13:43:31 +0000 Subject: [PATCH 4/8] test(cksum): add version and digest test --- e2e/binary/cksum/BUILD.bazel | 33 +++++++++++++++++++++++++++------ e2e/binary/cksum/digest.py | 18 ++++++++++++++++++ e2e/binary/cksum/expected.txt | 1 + e2e/binary/cksum/fixture.txt | 19 +++++++++++++++++++ 4 files changed, 65 insertions(+), 6 deletions(-) create mode 100644 e2e/binary/cksum/digest.py create mode 100644 e2e/binary/cksum/expected.txt create mode 100644 e2e/binary/cksum/fixture.txt diff --git a/e2e/binary/cksum/BUILD.bazel b/e2e/binary/cksum/BUILD.bazel index 414a8211..9095567d 100644 --- a/e2e/binary/cksum/BUILD.bazel +++ b/e2e/binary/cksum/BUILD.bazel @@ -1,11 +1,32 @@ -load("@bazel_skylib//rules:build_test.bzl", "build_test") +load("@rules_python_pytest//python_pytest:defs.bzl", "py_pytest_test") +load("@bazel_skylib//rules:native_binary.bzl", "native_test") -# TODO: write an _actual_ test for `cksum` +py_pytest_test( + name = "pytest", + size = "small", + srcs = ["digest.py"], + data = [ + "expected.txt", + "fixture.txt", + "@ape//ape:cksum", + ], + deps = [ + "//binary:pytest", + ], +) -build_test( - name = "cksum", +native_test( + name = "version", size = "small", - tags = ["stub"], - targets = ["@ape//ape:cksum"], + src = "@ape//ape:cksum", + args = ["--version"], +) + +test_suite( + name = "cksum", + tests = [ + "pytest", + "version", + ], visibility = ["//:__subpackages__"], ) diff --git a/e2e/binary/cksum/digest.py b/e2e/binary/cksum/digest.py new file mode 100644 index 00000000..b619b901 --- /dev/null +++ b/e2e/binary/cksum/digest.py @@ -0,0 +1,18 @@ +from __future__ import annotations + +from pathlib import Path +from subprocess import run + +from binary import Diff, Relative, Tool + + +def test_digest(tool: Tool, relative: Relative, tmp_path: Path) -> None: + binary = tool("cksum") + fixture = relative("fixture.txt") + expected = relative("expected.txt") + output = tmp_path / "output.txt" + + cmd = (binary, fixture) + with open(output, "w") as stream: + run(cmd, check=True, timeout=30, stdout=stream) + assert Diff(expected) == Diff(output) diff --git a/e2e/binary/cksum/expected.txt b/e2e/binary/cksum/expected.txt new file mode 100644 index 00000000..ae6300c3 --- /dev/null +++ b/e2e/binary/cksum/expected.txt @@ -0,0 +1 @@ +2575863747 6621 binary/cksum/fixture.txt diff --git a/e2e/binary/cksum/fixture.txt b/e2e/binary/cksum/fixture.txt new file mode 100644 index 00000000..88797e25 --- /dev/null +++ b/e2e/binary/cksum/fixture.txt @@ -0,0 +1,19 @@ +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum placerat at risus a sagittis. Suspendisse potenti. Ut efficitur metus eu leo condimentum, sit amet efficitur mi tempus. Duis sit amet efficitur elit. Duis a ultrices massa. In hac habitasse platea dictumst. Integer vitae nibh tristique, tempus quam eget, sodales sem. + +Maecenas dapibus diam turpis, non tempor tellus facilisis a. Suspendisse congue tortor ut nisl egestas, et cursus mauris congue. Nullam vitae metus ultricies, rhoncus nibh a, hendrerit neque. Integer ut dictum tortor. Vivamus ligula sem, viverra nec laoreet rutrum, tempor quis felis. Sed eu ex tempus, consectetur tellus id, facilisis quam. Ut at libero vel diam imperdiet mollis. Vestibulum at dolor nec magna consequat porta. Integer ornare metus sit amet sem hendrerit semper. Duis convallis magna vitae ullamcorper auctor. Donec eu massa eget erat pulvinar scelerisque. Ut feugiat lectus non neque suscipit, a mollis dolor ornare. + +Mauris mi est, feugiat eget ante quis, cursus ultricies ante. Nunc sed magna magna. Quisque vitae mattis diam, vel eleifend nisi. Ut ultrices tincidunt mi sit amet vulputate. Fusce at aliquam justo. Nam a maximus felis, eget viverra arcu. Sed sapien odio, dapibus nec justo ut, maximus dignissim dui. Nam accumsan vitae urna imperdiet maximus. Nam gravida, ante id facilisis placerat, augue sem tincidunt dolor, at eleifend dui tortor ut nunc. In vestibulum lorem elit, at dignissim urna hendrerit vel. Nulla nisl erat, lobortis at neque in, ultrices lacinia tortor. Sed id faucibus ex. Vivamus ultrices magna non metus pretium, ut dapibus felis tristique. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Integer sollicitudin elit sit amet lectus maximus consequat id sit amet massa. Vivamus iaculis arcu sit amet metus gravida finibus. + +Maecenas orci odio, posuere eu consequat ut, posuere in dui. Pellentesque tincidunt ex lorem, non dignissim nibh elementum et. Nullam non finibus est. Nunc sed nisi eu tellus pulvinar auctor a in tortor. Ut risus tellus, pharetra in turpis vel, pretium laoreet quam. Donec sagittis leo sed porttitor lacinia. Sed ullamcorper laoreet metus, non feugiat metus consectetur at. In molestie congue lacus, quis tristique lacus vulputate sit amet. Vestibulum pharetra bibendum dui eget laoreet. Duis at felis consectetur, suscipit sapien consectetur, congue nibh. Aliquam egestas sagittis tortor, nec eleifend lectus pretium eget. Fusce nec nisl nec augue egestas aliquam ac finibus augue. Vestibulum a lectus et ex lobortis auctor. Donec quis tempus turpis, cursus ultrices arcu. Integer vel dui vehicula, consequat massa eget, feugiat eros. + +Fusce sollicitudin feugiat quam nec tincidunt. Sed non mattis tortor. Curabitur et leo nec neque mollis facilisis ac pellentesque dolor. Praesent faucibus odio ac condimentum facilisis. Pellentesque accumsan a nisi vitae maximus. Praesent pharetra vel nibh nec accumsan. Nam sit amet interdum tellus. Mauris euismod aliquet eros sed sollicitudin. Suspendisse fermentum urna et tempus bibendum. Praesent euismod dui ut efficitur aliquam. Cras eu fringilla tortor. + +Integer aliquet a nibh a rutrum. Sed ornare nisi magna, vitae fringilla massa sollicitudin eget. Ut hendrerit interdum vestibulum. Aenean ut felis consequat odio dapibus sagittis. Ut quis mauris lorem. Duis sollicitudin posuere mi, non suscipit erat. Nunc libero enim, finibus sit amet erat id, interdum semper eros. Aliquam eget ligula dui. Proin feugiat diam neque, sit amet pellentesque odio finibus eget. Phasellus feugiat nisl erat, non porttitor elit suscipit eget. Aenean luctus tortor arcu, vitae tempus enim feugiat non. Praesent feugiat dapibus est. Ut ullamcorper justo eleifend diam pretium, ultricies sagittis neque dapibus. Aliquam ut massa dolor. + +Vestibulum quis rutrum lacus. In hac habitasse platea dictumst. Proin porttitor risus et dapibus facilisis. Vestibulum ac dolor quis orci tempus molestie sit amet in mi. Aenean nisl urna, volutpat id purus a, pellentesque pretium metus. Maecenas convallis eros eget est rhoncus, non gravida justo feugiat. Sed bibendum elit a lacus ultrices blandit. Cras vel dui nibh. Ut gravida id erat quis posuere. Mauris condimentum eget ante et semper. Integer ornare egestas purus, quis efficitur ex. Nam dignissim diam orci. Cras dapibus scelerisque sapien, molestie gravida orci congue in. Mauris sed vulputate nisl, non fringilla lacus. Nam venenatis dui bibendum placerat finibus. Integer id lectus sit amet metus hendrerit rutrum a ac lorem. + +Aenean at lectus vel libero tristique rhoncus nec ut lorem. Aliquam eget massa nec nibh ornare facilisis in vitae libero. Cras rhoncus porttitor elementum. Ut quam ipsum, pellentesque sit amet hendrerit non, scelerisque sit amet nibh. Cras ultrices, erat sed tristique aliquet, mi felis vulputate mauris, eu mattis neque felis non diam. Nulla dapibus turpis vitae gravida euismod. Donec non tempus augue. Etiam lacinia ex sit amet sapien tempor lobortis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce molestie ante rhoncus fringilla convallis. Nullam tristique id lectus a egestas. In bibendum molestie ultricies. Suspendisse quis auctor enim. Morbi pellentesque rhoncus lacinia. + +Fusce consectetur velit at nisl accumsan laoreet. Etiam convallis dignissim ligula at congue. Nunc varius dui consectetur, aliquam urna non, bibendum felis. In a convallis enim. Nullam leo dolor, pretium id tristique ut, posuere sed sem. Proin vehicula, orci ut imperdiet pellentesque, velit magna accumsan purus, id viverra orci tellus eu tortor. Nullam rhoncus id odio ut elementum. Nullam condimentum eget mi quis aliquam. + +Ut posuere dolor vitae eros tempus, at varius dolor vestibulum. Cras venenatis odio gravida nisl viverra, nec imperdiet libero lobortis. Suspendisse potenti. Aenean varius, sapien et mollis sagittis, massa justo placerat nisi, id feugiat nunc nunc sit amet nisi. Nullam in sem id nisl vehicula tincidunt non vitae risus. Vestibulum dapibus, enim sed lacinia laoreet, lorem massa fermentum urna, et ornare nunc nibh ut sem. Fusce nisi arcu, feugiat eget erat vitae, fermentum porta ligula. Aenean in felis at ex vulputate dapibus id quis magna. Suspendisse semper rutrum eleifend. Donec mi felis, scelerisque id justo et, semper interdum libero. Proin sit amet tempor velit. Suspendisse eget dui orci. Sed accumsan tortor at nunc scelerisque dignissim. Mauris vestibulum, massa sit amet interdum egestas, erat sapien hendrerit nisi, quis sagittis ex ipsum pellentesque est. Duis sapien ante, finibus in nisi in, vestibulum semper libero. -- GitLab From d7d2100ba68014c60fd478dc530cba17e196e1f7 Mon Sep 17 00:00:00 2001 From: Matt Clarkson Date: Wed, 12 Feb 2025 13:48:08 +0000 Subject: [PATCH 5/8] test(basenc): add version and digest test --- e2e/binary/basenc/BUILD.bazel | 33 +++++++++++++++++++++++++++------ e2e/binary/basenc/digest.py | 18 ++++++++++++++++++ e2e/binary/basenc/expected.txt | 1 + e2e/binary/basenc/fixture.txt | 1 + 4 files changed, 47 insertions(+), 6 deletions(-) create mode 100644 e2e/binary/basenc/digest.py create mode 100644 e2e/binary/basenc/expected.txt create mode 100644 e2e/binary/basenc/fixture.txt diff --git a/e2e/binary/basenc/BUILD.bazel b/e2e/binary/basenc/BUILD.bazel index 9dd01ede..c405faac 100644 --- a/e2e/binary/basenc/BUILD.bazel +++ b/e2e/binary/basenc/BUILD.bazel @@ -1,11 +1,32 @@ -load("@bazel_skylib//rules:build_test.bzl", "build_test") +load("@rules_python_pytest//python_pytest:defs.bzl", "py_pytest_test") +load("@bazel_skylib//rules:native_binary.bzl", "native_test") -# TODO: write an _actual_ test for `basenc` +py_pytest_test( + name = "pytest", + size = "small", + srcs = ["digest.py"], + data = [ + "expected.txt", + "fixture.txt", + "@ape//ape:basenc", + ], + deps = [ + "//binary:pytest", + ], +) -build_test( - name = "basenc", +native_test( + name = "version", size = "small", - tags = ["stub"], - targets = ["@ape//ape:basenc"], + src = "@ape//ape:basenc", + args = ["--version"], +) + +test_suite( + name = "basenc", + tests = [ + "pytest", + "version", + ], visibility = ["//:__subpackages__"], ) diff --git a/e2e/binary/basenc/digest.py b/e2e/binary/basenc/digest.py new file mode 100644 index 00000000..c8c70521 --- /dev/null +++ b/e2e/binary/basenc/digest.py @@ -0,0 +1,18 @@ +from __future__ import annotations + +from pathlib import Path +from subprocess import run + +from binary import Diff, Relative, Tool + + +def test_digest(tool: Tool, relative: Relative, tmp_path: Path) -> None: + binary = tool("basenc") + fixture = relative("fixture.txt") + expected = relative("expected.txt") + output = tmp_path / "output.txt" + + cmd = (binary, "--base64") + with open(fixture) as src, open(output, "w") as dst: + run(cmd, check=True, timeout=30, stdin=src, stdout=dst) + assert Diff(expected) == Diff(output) diff --git a/e2e/binary/basenc/expected.txt b/e2e/binary/basenc/expected.txt new file mode 100644 index 00000000..19ea9ed2 --- /dev/null +++ b/e2e/binary/basenc/expected.txt @@ -0,0 +1 @@ +SGVsbG8sIHdvcmxkIQo= diff --git a/e2e/binary/basenc/fixture.txt b/e2e/binary/basenc/fixture.txt new file mode 100644 index 00000000..af5626b4 --- /dev/null +++ b/e2e/binary/basenc/fixture.txt @@ -0,0 +1 @@ +Hello, world! -- GitLab From 6c636127cc6f985b803a8606d953f208d9b71522 Mon Sep 17 00:00:00 2001 From: Matt Clarkson Date: Wed, 12 Feb 2025 13:49:12 +0000 Subject: [PATCH 6/8] test(base64): add version and digest test --- e2e/binary/base64/BUILD.bazel | 33 +++++++++++++++++++++++++++------ e2e/binary/base64/digest.py | 18 ++++++++++++++++++ e2e/binary/base64/expected.txt | 1 + e2e/binary/base64/fixture.txt | 1 + 4 files changed, 47 insertions(+), 6 deletions(-) create mode 100644 e2e/binary/base64/digest.py create mode 100644 e2e/binary/base64/expected.txt create mode 100644 e2e/binary/base64/fixture.txt diff --git a/e2e/binary/base64/BUILD.bazel b/e2e/binary/base64/BUILD.bazel index 16780ba8..962d5e21 100644 --- a/e2e/binary/base64/BUILD.bazel +++ b/e2e/binary/base64/BUILD.bazel @@ -1,11 +1,32 @@ -load("@bazel_skylib//rules:build_test.bzl", "build_test") +load("@rules_python_pytest//python_pytest:defs.bzl", "py_pytest_test") +load("@bazel_skylib//rules:native_binary.bzl", "native_test") -# TODO: write an _actual_ test for `base64` +py_pytest_test( + name = "pytest", + size = "small", + srcs = ["digest.py"], + data = [ + "expected.txt", + "fixture.txt", + "@ape//ape:base64", + ], + deps = [ + "//binary:pytest", + ], +) -build_test( - name = "base64", +native_test( + name = "version", size = "small", - tags = ["stub"], - targets = ["@ape//ape:base64"], + src = "@ape//ape:base64", + args = ["--version"], +) + +test_suite( + name = "base64", + tests = [ + "pytest", + "version", + ], visibility = ["//:__subpackages__"], ) diff --git a/e2e/binary/base64/digest.py b/e2e/binary/base64/digest.py new file mode 100644 index 00000000..f945cc69 --- /dev/null +++ b/e2e/binary/base64/digest.py @@ -0,0 +1,18 @@ +from __future__ import annotations + +from pathlib import Path +from subprocess import run + +from binary import Diff, Relative, Tool + + +def test_digest(tool: Tool, relative: Relative, tmp_path: Path) -> None: + binary = tool("base64") + fixture = relative("fixture.txt") + expected = relative("expected.txt") + output = tmp_path / "output.txt" + + cmd = (binary,) + with open(fixture) as src, open(output, "w") as dst: + run(cmd, check=True, timeout=30, stdin=src, stdout=dst) + assert Diff(expected) == Diff(output) diff --git a/e2e/binary/base64/expected.txt b/e2e/binary/base64/expected.txt new file mode 100644 index 00000000..19ea9ed2 --- /dev/null +++ b/e2e/binary/base64/expected.txt @@ -0,0 +1 @@ +SGVsbG8sIHdvcmxkIQo= diff --git a/e2e/binary/base64/fixture.txt b/e2e/binary/base64/fixture.txt new file mode 100644 index 00000000..af5626b4 --- /dev/null +++ b/e2e/binary/base64/fixture.txt @@ -0,0 +1 @@ +Hello, world! -- GitLab From 56a056eb9d9283ef241ae21bcc219b648a63995b Mon Sep 17 00:00:00 2001 From: Matt Clarkson Date: Wed, 12 Feb 2025 13:51:25 +0000 Subject: [PATCH 7/8] test(base32): add version and digest test --- e2e/binary/base32/BUILD.bazel | 33 +++++++++++++++++++++++++++------ e2e/binary/base32/digest.py | 18 ++++++++++++++++++ e2e/binary/base32/expected.txt | 1 + e2e/binary/base32/fixture.txt | 1 + 4 files changed, 47 insertions(+), 6 deletions(-) create mode 100644 e2e/binary/base32/digest.py create mode 100644 e2e/binary/base32/expected.txt create mode 100644 e2e/binary/base32/fixture.txt diff --git a/e2e/binary/base32/BUILD.bazel b/e2e/binary/base32/BUILD.bazel index 098fc4d9..bf843717 100644 --- a/e2e/binary/base32/BUILD.bazel +++ b/e2e/binary/base32/BUILD.bazel @@ -1,11 +1,32 @@ -load("@bazel_skylib//rules:build_test.bzl", "build_test") +load("@rules_python_pytest//python_pytest:defs.bzl", "py_pytest_test") +load("@bazel_skylib//rules:native_binary.bzl", "native_test") -# TODO: write an _actual_ test for `base32` +py_pytest_test( + name = "pytest", + size = "small", + srcs = ["digest.py"], + data = [ + "expected.txt", + "fixture.txt", + "@ape//ape:base32", + ], + deps = [ + "//binary:pytest", + ], +) -build_test( - name = "base32", +native_test( + name = "version", size = "small", - tags = ["stub"], - targets = ["@ape//ape:base32"], + src = "@ape//ape:base32", + args = ["--version"], +) + +test_suite( + name = "base32", + tests = [ + "pytest", + "version", + ], visibility = ["//:__subpackages__"], ) diff --git a/e2e/binary/base32/digest.py b/e2e/binary/base32/digest.py new file mode 100644 index 00000000..d650fc7f --- /dev/null +++ b/e2e/binary/base32/digest.py @@ -0,0 +1,18 @@ +from __future__ import annotations + +from pathlib import Path +from subprocess import run + +from binary import Diff, Relative, Tool + + +def test_digest(tool: Tool, relative: Relative, tmp_path: Path) -> None: + binary = tool("base32") + fixture = relative("fixture.txt") + expected = relative("expected.txt") + output = tmp_path / "output.txt" + + cmd = (binary,) + with open(fixture) as src, open(output, "w") as dst: + run(cmd, check=True, timeout=30, stdin=src, stdout=dst) + assert Diff(expected) == Diff(output) diff --git a/e2e/binary/base32/expected.txt b/e2e/binary/base32/expected.txt new file mode 100644 index 00000000..f1e2b2cf --- /dev/null +++ b/e2e/binary/base32/expected.txt @@ -0,0 +1 @@ +JBSWY3DPFQQHO33SNRSCCCQ= diff --git a/e2e/binary/base32/fixture.txt b/e2e/binary/base32/fixture.txt new file mode 100644 index 00000000..af5626b4 --- /dev/null +++ b/e2e/binary/base32/fixture.txt @@ -0,0 +1 @@ +Hello, world! -- GitLab From 2681f50992ee5314343b64dabf63d016742091bd Mon Sep 17 00:00:00 2001 From: Matt Clarkson Date: Wed, 12 Feb 2025 13:58:21 +0000 Subject: [PATCH 8/8] test(bash): add version and print test --- e2e/binary/bash/BUILD.bazel | 31 +++++++++++++++++++++++++------ e2e/binary/bash/print.py | 13 +++++++++++++ 2 files changed, 38 insertions(+), 6 deletions(-) create mode 100644 e2e/binary/bash/print.py diff --git a/e2e/binary/bash/BUILD.bazel b/e2e/binary/bash/BUILD.bazel index 545c0180..47239056 100644 --- a/e2e/binary/bash/BUILD.bazel +++ b/e2e/binary/bash/BUILD.bazel @@ -1,11 +1,30 @@ -load("@bazel_skylib//rules:build_test.bzl", "build_test") +load("@rules_python_pytest//python_pytest:defs.bzl", "py_pytest_test") +load("@bazel_skylib//rules:native_binary.bzl", "native_test") -# TODO: write an _actual_ test for `bash` +py_pytest_test( + name = "pytest", + size = "small", + srcs = ["print.py"], + data = [ + "@ape//ape:bash", + ], + deps = [ + "//binary:pytest", + ], +) -build_test( - name = "bash", +native_test( + name = "version", size = "small", - tags = ["stub"], - targets = ["@ape//ape:bash"], + src = "@ape//ape:bash", + args = ["--version"], +) + +test_suite( + name = "bash", + tests = [ + "pytest", + "version", + ], visibility = ["//:__subpackages__"], ) diff --git a/e2e/binary/bash/print.py b/e2e/binary/bash/print.py new file mode 100644 index 00000000..b6cdcc02 --- /dev/null +++ b/e2e/binary/bash/print.py @@ -0,0 +1,13 @@ +from __future__ import annotations + +from subprocess import run + +from binary.tool import Tool + + +def test_print(tool: Tool) -> None: + binary = tool("bash") + + cmd = (binary, "-c", "echo 'Hello, world!'") + result = run(cmd, check=True, timeout=30, capture_output=True, text=True) + assert "Hello, world!\n" == result.stdout -- GitLab