nushell/crates/nu-command/tests/commands/print.rs
Devyn Cairns 4e205cd9a7
Add --raw switch to print for binary data (#13597)
# Description

Something I meant to add a long time ago. We currently don't have a
convenient way to print raw binary data intentionally. You can pipe it
through `cat` to turn it into an unknown stream, or write it to a file
and read it again, but we can't really just e.g. generate msgpack and
write it to stdout without this. For example:

```nushell
[abc def] | to msgpack | print --raw
```

This is useful for nushell scripts that will be piped into something
else. It also means that `nu_plugin_nu_example` probably doesn't need to
do this anymore, but I haven't adjusted it yet:

```nushell
def tell_nushell_encoding [] {
  print -n "\u{0004}json"
}
```

This happens to work because 0x04 is a valid UTF-8 character, but it
wouldn't be possible if it were something above 0x80.

`--raw` also formats other things without `table`, I figured the two
things kind of go together. The output is kind of like `to text`.
Debatable whether that should share the same flag, but it was easier
that way and seemed reasonable.

# User-Facing Changes
- `print` new flag: `--raw`

# Tests + Formatting
Added tests.

# After Submitting
- [ ] release notes (command modified)
2024-08-12 17:29:25 +08:00

28 lines
615 B
Rust

use nu_test_support::nu;
#[test]
fn print_to_stdout() {
let actual = nu!("print 'hello world'");
assert!(actual.out.contains("hello world"));
assert!(actual.err.is_empty());
}
#[test]
fn print_to_stderr() {
let actual = nu!("print -e 'hello world'");
assert!(actual.out.is_empty());
assert!(actual.err.contains("hello world"));
}
#[test]
fn print_raw() {
let actual = nu!("0x[41 42 43] | print --raw");
assert_eq!(actual.out, "ABC");
}
#[test]
fn print_raw_stream() {
let actual = nu!("[0x[66] 0x[6f 6f]] | bytes collect | print --raw");
assert_eq!(actual.out, "foo");
}