1
1
mirror of https://github.com/casey/just.git synced 2024-11-22 18:34:06 +03:00
just/tests/list.rs

477 lines
7.6 KiB
Rust
Raw Normal View History

use super::*;
#[test]
fn modules_unsorted() {
Test::new()
.write("foo.just", "foo:")
.write("bar.just", "bar:")
.justfile(
"
mod foo
mod bar
",
)
2024-07-15 00:22:03 +03:00
.args(["--list", "--unsorted"])
.stdout(
"
Available recipes:
foo ...
bar ...
",
)
.run();
}
#[test]
fn unsorted_list_order() {
Test::new()
.write("a.just", "a:")
.write("b.just", "b:")
.write("c.just", "c:")
.write("d.just", "d:")
.justfile(
"
import 'a.just'
import 'b.just'
import 'c.just'
import 'd.just'
x:
y:
z:
",
)
.args(["--list", "--unsorted"])
.stdout(
"
Available recipes:
x
y
z
a
b
c
d
",
)
.run();
Test::new()
.write("a.just", "a:")
.write("b.just", "b:")
.write("c.just", "c:")
.write("d.just", "d:")
.justfile(
"
x:
y:
z:
import 'd.just'
import 'c.just'
import 'b.just'
import 'a.just'
",
)
.args(["--list", "--unsorted"])
.stdout(
"
Available recipes:
x
y
z
d
c
b
a
",
)
.run();
Test::new()
.write("a.just", "a:\nimport 'e.just'")
.write("b.just", "b:\nimport 'f.just'")
.write("c.just", "c:\nimport 'g.just'")
.write("d.just", "d:\nimport 'h.just'")
.write("e.just", "e:")
.write("f.just", "f:")
.write("g.just", "g:")
.write("h.just", "h:")
.justfile(
"
x:
y:
z:
import 'd.just'
import 'c.just'
import 'b.just'
import 'a.just'
",
)
.args(["--list", "--unsorted"])
.stdout(
"
Available recipes:
x
y
z
d
h
c
g
b
f
a
e
",
)
.run();
Test::new()
.write("task1.just", "task1:")
.write("task2.just", "task2:")
.justfile(
"
import 'task1.just'
import 'task2.just'
",
)
.args(["--list", "--unsorted"])
.stdout(
"
Available recipes:
task1
task2
",
)
.run();
}
#[test]
fn list_submodule() {
Test::new()
.write("foo.just", "bar:")
.justfile(
"
mod foo
",
)
2024-07-15 00:22:03 +03:00
.args(["--list", "foo"])
.stdout(
"
Available recipes:
bar
",
)
.run();
}
#[test]
fn list_nested_submodule() {
Test::new()
.write("foo.just", "mod bar")
.write("bar.just", "baz:")
.justfile(
"
mod foo
",
)
2024-07-15 00:22:03 +03:00
.args(["--list", "foo", "bar"])
.stdout(
"
Available recipes:
baz
",
)
.run();
Test::new()
.write("foo.just", "mod bar")
.write("bar.just", "baz:")
.justfile(
"
mod foo
",
)
2024-07-15 00:22:03 +03:00
.args(["--list", "foo::bar"])
.stdout(
"
Available recipes:
baz
",
)
.run();
}
#[test]
fn list_invalid_path() {
Test::new()
2024-07-15 00:22:03 +03:00
.args(["--list", "$hello"])
.stderr("error: Invalid module path `$hello`\n")
.status(1)
.run();
}
#[test]
fn list_unknown_submodule() {
Test::new()
2024-07-15 00:22:03 +03:00
.args(["--list", "hello"])
.stderr("error: Justfile does not contain submodule `hello`\n")
.status(1)
.run();
}
#[test]
fn list_with_groups_in_modules() {
Test::new()
.justfile(
"
[group('FOO')]
foo:
mod bar
",
)
.write("bar.just", "[group('BAZ')]\nbaz:")
2024-07-15 00:22:03 +03:00
.args(["--list", "--list-submodules"])
.stdout(
"
Available recipes:
bar:
[BAZ]
baz
[FOO]
foo
",
)
.run();
}
#[test]
fn list_displays_recipes_in_submodules() {
Test::new()
.write("foo.just", "bar:\n @echo FOO")
.justfile(
"
mod foo
",
)
2024-07-15 00:22:03 +03:00
.args(["--list", "--list-submodules"])
.stdout(
"
Available recipes:
foo:
bar
",
)
.run();
}
#[test]
fn modules_are_space_separated_in_output() {
Test::new()
.write("foo.just", "foo:")
.write("bar.just", "bar:")
.justfile(
"
mod foo
mod bar
",
)
2024-07-15 00:22:03 +03:00
.args(["--list", "--list-submodules"])
.stdout(
"
Available recipes:
bar:
bar
foo:
foo
",
)
.run();
}
#[test]
fn module_recipe_list_alignment_ignores_private_recipes() {
Test::new()
.write(
"foo.just",
"
# foos
foo:
@echo FOO
[private]
barbarbar:
@echo BAR
@_bazbazbaz:
@echo BAZ
",
)
.justfile("mod foo")
2024-07-15 00:22:03 +03:00
.args(["--list", "--list-submodules"])
.stdout(
"
Available recipes:
foo:
foo # foos
",
)
.run();
}
#[test]
fn nested_modules_are_properly_indented() {
Test::new()
.write("foo.just", "mod bar")
.write("bar.just", "baz:\n @echo FOO")
.justfile(
"
mod foo
",
)
2024-07-15 00:22:03 +03:00
.args(["--list", "--list-submodules"])
.stdout(
"
Available recipes:
foo:
bar:
baz
",
)
.run();
}
#[test]
fn module_doc_rendered() {
Test::new()
.write("foo.just", "")
.justfile(
"
# Module foo
mod foo
",
)
2024-07-15 00:22:03 +03:00
.args(["--list"])
.stdout(
"
Available recipes:
foo ... # Module foo
",
)
.run();
}
#[test]
fn module_doc_aligned() {
Test::new()
.write("foo.just", "")
.write("bar.just", "")
.justfile(
"
# Module foo
mod foo
# comment
mod very_long_name_for_module \"bar.just\" # comment
# will change your world
recipe:
@echo Hi
",
)
2024-07-15 00:22:03 +03:00
.args(["--list"])
.stdout(
"
Available recipes:
recipe # will change your world
foo ... # Module foo
very_long_name_for_module ... # comment
",
)
.run();
}
#[test]
fn submodules_without_groups() {
Test::new()
.write("foo.just", "")
.justfile(
"
mod foo
[group: 'baz']
bar:
",
)
2024-07-15 00:22:03 +03:00
.args(["--list"])
.stdout(
"
Available recipes:
foo ...
[baz]
bar
",
)
.run();
}
#[test]
fn no_space_before_submodules_not_following_groups() {
Test::new()
.write("foo.just", "")
.justfile(
"
mod foo
",
)
2024-07-15 00:22:03 +03:00
.args(["--list"])
.stdout(
"
Available recipes:
foo ...
",
)
.run();
}
#[test]
fn backticks_highlighted() {
Test::new()
.justfile(
"
# Comment `` `with backticks` and trailing text
recipe:
",
)
.args(["--list", "--color=always"])
.stdout(
"
Available recipes:
recipe \u{1b}[34m#\u{1b}[0m \u{1b}[34mComment \u{1b}[0m\u{1b}[36m``\u{1b}[0m\u{1b}[34m \u{1b}[0m\u{1b}[36m`with backticks`\u{1b}[0m\u{1b}[34m and trailing text\u{1b}[0m
")
.run();
}
#[test]
fn unclosed_backticks() {
Test::new()
.justfile(
"
# Comment `with unclosed backick
recipe:
",
)
.args(["--list", "--color=always"])
.stdout(
"
Available recipes:
recipe \u{1b}[34m#\u{1b}[0m \u{1b}[34mComment \u{1b}[0m\u{1b}[36m`with unclosed backick\u{1b}[0m
")
.run();
}