mirror of
https://github.com/rust-lang/rustlings.git
synced 2025-11-29 22:47:43 +02:00
feat(cli): Improve the list command with options, and then some
1.
`rustlings list` should now display more than just the exercise names.
Information such as file paths and exercises statuses should be displayed.
The `--paths` option limits the displayed fields to only the path names; while the `--names`
option limits the displayed fields to only exercise names.
You can also control which exercises are displayed, by using the `--filter` option, or
the `--solved` or `--unsolved` flags.
Some use cases:
- Fetching pending exercise files with the keyword "conversion" to pass to my editor:
```sh
vim $(rustlings list --filter "conversion" --paths --unsolved)
```
- Fetching exercise names with keyword "conversion" to pass to `rustlings run`:
```sh
for exercise in $(rustlings list --filter "conversion" --names)
do
rustlings run ${exercise}
done
```
2.
This should also fix #465, and will likely fix #585, as well.
That bug mentioned in those issues has to do with the way the `watch` command handler fetches the pending exercises.
Going forward, the least recently updated exercises along with all the other exercises in a pending state are fetched.
This commit is contained in:
@@ -9,3 +9,10 @@ name = "pending_test_exercise"
|
||||
path = "pending_test_exercise.rs"
|
||||
mode = "test"
|
||||
hint = """"""
|
||||
|
||||
[[exercises]]
|
||||
name = "finished_exercise"
|
||||
path = "finished_exercise.rs"
|
||||
mode = "compile"
|
||||
hint = """"""
|
||||
|
||||
|
||||
@@ -181,3 +181,81 @@ fn run_single_test_success_without_output() {
|
||||
.code(0)
|
||||
.stdout(predicates::str::contains("THIS TEST TOO SHALL PAS").not());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn run_rustlings_list() {
|
||||
Command::cargo_bin("rustlings")
|
||||
.unwrap()
|
||||
.args(&["list"])
|
||||
.current_dir("tests/fixture/success")
|
||||
.assert()
|
||||
.success();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn run_rustlings_list_conflicting_display_options() {
|
||||
Command::cargo_bin("rustlings")
|
||||
.unwrap()
|
||||
.args(&["list", "--names", "--paths"])
|
||||
.current_dir("tests/fixture/success")
|
||||
.assert()
|
||||
.failure();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn run_rustlings_list_conflicting_solve_options() {
|
||||
Command::cargo_bin("rustlings")
|
||||
.unwrap()
|
||||
.args(&["list", "--solved", "--unsolved"])
|
||||
.current_dir("tests/fixture/success")
|
||||
.assert()
|
||||
.failure();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn run_rustlings_list_no_pending() {
|
||||
Command::cargo_bin("rustlings")
|
||||
.unwrap()
|
||||
.args(&["list"])
|
||||
.current_dir("tests/fixture/success")
|
||||
.assert()
|
||||
.success()
|
||||
.stdout(predicates::str::contains("Pending").not());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn run_rustlings_list_both_done_and_pending() {
|
||||
Command::cargo_bin("rustlings")
|
||||
.unwrap()
|
||||
.args(&["list"])
|
||||
.current_dir("tests/fixture/state")
|
||||
.assert()
|
||||
.success()
|
||||
.stdout(
|
||||
predicates::str::contains("Done")
|
||||
.and(predicates::str::contains("Pending"))
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn run_rustlings_list_without_pending() {
|
||||
Command::cargo_bin("rustlings")
|
||||
.unwrap()
|
||||
.args(&["list", "--solved"])
|
||||
.current_dir("tests/fixture/state")
|
||||
.assert()
|
||||
.success()
|
||||
.stdout(predicates::str::contains("Pending").not());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn run_rustlings_list_without_done() {
|
||||
Command::cargo_bin("rustlings")
|
||||
.unwrap()
|
||||
.args(&["list", "--unsolved"])
|
||||
.current_dir("tests/fixture/state")
|
||||
.assert()
|
||||
.success()
|
||||
.stdout(predicates::str::contains("Done").not());
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user