diff --git a/e2e/binary/base32/BUILD.bazel b/e2e/binary/base32/BUILD.bazel index 098fc4d912ec0bbb30fa68d6d4133947ebc52ef8..bf8437179c4518102b979b4e45affec740aeea93 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 0000000000000000000000000000000000000000..d650fc7f743adf1306d171b3ec1812d2b8acb873 --- /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 0000000000000000000000000000000000000000..f1e2b2cfb441f50dc964791d21d2dd3d6a488d60 --- /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 0000000000000000000000000000000000000000..af5626b4a114abcb82d63db7c8082c3c4756e51b --- /dev/null +++ b/e2e/binary/base32/fixture.txt @@ -0,0 +1 @@ +Hello, world! diff --git a/e2e/binary/base64/BUILD.bazel b/e2e/binary/base64/BUILD.bazel index 16780ba8a8ab473300cc966b2ce74f9394031bce..962d5e21fb287cc2582be1b63bcf45e8e7ddadf4 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 0000000000000000000000000000000000000000..f945cc691355e4de35e272927e2f50c3eebb83ef --- /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 0000000000000000000000000000000000000000..19ea9ed2776f5028540e4d7419b5d95e503c79a4 --- /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 0000000000000000000000000000000000000000..af5626b4a114abcb82d63db7c8082c3c4756e51b --- /dev/null +++ b/e2e/binary/base64/fixture.txt @@ -0,0 +1 @@ +Hello, world! diff --git a/e2e/binary/basenc/BUILD.bazel b/e2e/binary/basenc/BUILD.bazel index 9dd01ede3e64d4f1e3f68d4202e9be143492df80..c405faac00089f1c07a6cb7a5aedd90f4e0139c4 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 0000000000000000000000000000000000000000..c8c70521921d1c7219b8a04311af60bdd753ee50 --- /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 0000000000000000000000000000000000000000..19ea9ed2776f5028540e4d7419b5d95e503c79a4 --- /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 0000000000000000000000000000000000000000..af5626b4a114abcb82d63db7c8082c3c4756e51b --- /dev/null +++ b/e2e/binary/basenc/fixture.txt @@ -0,0 +1 @@ +Hello, world! diff --git a/e2e/binary/bash/BUILD.bazel b/e2e/binary/bash/BUILD.bazel index 545c018048ede1dca77c7bf45df31a47353bcbc6..472390560592552ece049395669772b2ab5bf467 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 0000000000000000000000000000000000000000..b6cdcc02130c8efa79b296d3789ae82939e8b4ef --- /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 diff --git a/e2e/binary/cat/BUILD.bazel b/e2e/binary/cat/BUILD.bazel index d4f88d08e57783c7a96ec516d101c666ff4c6543..719b092fc90be17aa1f54844af35a35db0a23d6d 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 0000000000000000000000000000000000000000..0ce3792936abb85afbd6ba8f8d91911186843288 --- /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 0000000000000000000000000000000000000000..16e0f8bc031efc9414ceb69534f5e48adc855f83 --- /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 0000000000000000000000000000000000000000..d0c8d8765e9ca9c7e2034b018cb365a39fe1d0d6 --- /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 0000000000000000000000000000000000000000..697152407e400ca883405cb8d49102b762502b7e --- /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! diff --git a/e2e/binary/cksum/BUILD.bazel b/e2e/binary/cksum/BUILD.bazel index 414a82118d5a5b7fdd0a84179062d7f438db22f4..9095567d98fccf27cb195ce11d82b1ba0594f3d9 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 0000000000000000000000000000000000000000..b619b90139fe0bd5ed60dc283c3156d979076da8 --- /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 0000000000000000000000000000000000000000..ae6300c3311451e2f87fca1780d8817243b87a8d --- /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 0000000000000000000000000000000000000000..88797e251d099ccf5393917e2b5ed527fbdb6018 --- /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. diff --git a/e2e/binary/cp/BUILD.bazel b/e2e/binary/cp/BUILD.bazel index 88df7b9aabf7d8cbd961eea1010c2b7f3fd51a00..51c73dc5b15cf4f2f7620105e47f07e5df5cfb7b 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 0000000000000000000000000000000000000000..00c1be49c53798774cac2e8ca08a17d374cbcd8b --- /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 0000000000000000000000000000000000000000..88797e251d099ccf5393917e2b5ed527fbdb6018 --- /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 0000000000000000000000000000000000000000..88797e251d099ccf5393917e2b5ed527fbdb6018 --- /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. diff --git a/e2e/binary/tac/BUILD.bazel b/e2e/binary/tac/BUILD.bazel index 37669403de0674232412414f2eeaf05bb829a9ff..747c4b81d0b736eb55c05380a1f1ab14764796c0 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 0000000000000000000000000000000000000000..0ce3792936abb85afbd6ba8f8d91911186843288 --- /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 0000000000000000000000000000000000000000..16e0f8bc031efc9414ceb69534f5e48adc855f83 --- /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 0000000000000000000000000000000000000000..cf10fad0f75937a917e70cf6beb28f8016bb276c --- /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 0000000000000000000000000000000000000000..c7ef0859271acf037b67b3d1099845ff01da4c67 --- /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!