test(tvix/cli): Make the REPL testable

Juggle around the internals of the tvix-cli crate so that we expose the
Repl as a public type with a `send` method, that sends a string to the
repl and *captures all output* so that it can be subsequently asserted
on in tests. Then, demonstrate that this works with a single (for now)
REPL test using expect-test to assert on the output of a single command
sent to the REPL.

As the REPL gets more complicated, this will allow us to make tests that
cover that complex behavior.

Change-Id: I88175bd72d8760c79faade95ebb1d956f08a7b83
Reviewed-on: https://cl.tvl.fyi/c/depot/+/11958
Autosubmit: aspen <root@gws.fyi>
Tested-by: BuildkiteCI
Reviewed-by: flokli <flokli@flokli.de>
This commit is contained in:
Aspen Smith 2024-07-06 09:00:46 -04:00 committed by clbot
parent 3a79f93795
commit 0ad986169d
9 changed files with 522 additions and 346 deletions

View file

@ -2965,6 +2965,16 @@ rec {
}
];
};
"dissimilar" = rec {
crateName = "dissimilar";
version = "1.0.9";
edition = "2018";
sha256 = "0bcn4s99ghigd3yadpd7i3gljv5z2hkr07ijvvxvsxmz3yfygy2r";
authors = [
"David Tolnay <dtolnay@gmail.com>"
];
};
"doc-comment" = rec {
crateName = "doc-comment";
@ -3414,6 +3424,26 @@ rec {
};
resolvedDefaultFeatures = [ "std" ];
};
"expect-test" = rec {
crateName = "expect-test";
version = "1.5.0";
edition = "2018";
sha256 = "1q55nrkgzg345905aqbsdrwlq4sk0gjn4z5bdph1an1kc6jy02wy";
authors = [
"rust-analyzer developers"
];
dependencies = [
{
name = "dissimilar";
packageId = "dissimilar";
}
{
name = "once_cell";
packageId = "once_cell";
}
];
};
"fastcdc" = rec {
crateName = "fastcdc";
version = "3.1.0";
@ -13908,6 +13938,12 @@ rec {
packageId = "wu-manber";
}
];
devDependencies = [
{
name = "expect-test";
packageId = "expect-test";
}
];
features = {
"tracy" = [ "tvix-tracing/tracy" ];
};