From ddee48f9780ed716059bded8e539edfc433c2e04 Mon Sep 17 00:00:00 2001 From: Michael Murphy <mmstickman@gmail.com> Date: Sat, 23 Jun 2018 17:19:03 -0600 Subject: [PATCH] Apply rustfmt on workspace members --- members/braces/src/lib.rs | 12 +- members/builtins/src/conditionals.rs | 12 +- members/builtins/src/echo.rs | 2 +- members/builtins/src/test.rs | 169 +++++++++++---- members/lexers/src/lib.rs | 3 +- members/ranges/src/index.rs | 2 +- members/ranges/src/lib.rs | 5 +- members/ranges/src/select.rs | 5 +- members/sys/src/sys/redox/mod.rs | 7 +- members/sys/src/sys/unix/mod.rs | 8 +- rustfmt.toml | 1 - .../parser/{loops/for_grammar.rs => loops.rs} | 0 src/lib/parser/loops/mod.rs | 1 - src/lib/parser/mod.rs | 2 +- src/lib/parser/shell_expand/README.md | 17 -- src/lib/parser/shell_expand/braces.rs | 192 ------------------ 16 files changed, 164 insertions(+), 274 deletions(-) rename src/lib/parser/{loops/for_grammar.rs => loops.rs} (100%) delete mode 100644 src/lib/parser/loops/mod.rs delete mode 100644 src/lib/parser/shell_expand/README.md delete mode 100644 src/lib/parser/shell_expand/braces.rs diff --git a/members/braces/src/lib.rs b/members/braces/src/lib.rs index 16b48149..a3029aba 100644 --- a/members/braces/src/lib.rs +++ b/members/braces/src/lib.rs @@ -20,7 +20,7 @@ pub fn expand<'a>( Box::new(multiple_brace_expand) } else if expanders.len() == 1 { let single_brace_expand = SingleBraceExpand { - elements: expanders[0].iter().map(|element| *element), + elements: expanders[0].iter().map(|element| *element), tokens, loop_count: 0, }; @@ -53,18 +53,18 @@ fn escape_string(output: &mut SmallVec<[u8; 64]>, input: &str) { pub struct MultipleBraceExpand<'a> { permutator: Permutator<'a, str>, tokens: &'a [BraceToken], - buffer: Vec<&'a str> + buffer: Vec<&'a str>, } impl<'a> MultipleBraceExpand<'a> { pub fn new( tokens: &'a [BraceToken], - expanders: &'a [&'a [&'a str]] + expanders: &'a [&'a [&'a str]], ) -> MultipleBraceExpand<'a> { MultipleBraceExpand { permutator: Permutator::new(expanders), tokens, - buffer: vec![""; expanders.len()] + buffer: vec![""; expanders.len()], } } } @@ -170,7 +170,7 @@ mod tests { BraceToken::Normal("GH".to_owned()), ]; assert_eq!( - MultipleBraceExpand ::new(tokens, expanders).collect::<Vec<String>>(), + MultipleBraceExpand::new(tokens, expanders).collect::<Vec<String>>(), vec![ "AB1CD3EF5GH".to_owned(), "AB1CD3EF6GH".to_owned(), @@ -190,7 +190,7 @@ mod tests { let tokens: &[BraceToken] = &[BraceToken::Normal("A=".to_owned()), BraceToken::Expander]; assert_eq!( SingleBraceExpand { - elements: elements.iter().map(|element| *element), + elements: elements.iter().map(|element| *element), tokens, loop_count: 0, }.collect::<Vec<String>>(), diff --git a/members/builtins/src/conditionals.rs b/members/builtins/src/conditionals.rs index e4f5751c..677342c0 100644 --- a/members/builtins/src/conditionals.rs +++ b/members/builtins/src/conditionals.rs @@ -6,8 +6,16 @@ macro_rules! string_function { eprintln!("ion: {}: two arguments must be supplied", args[0]); return 2; } - 3 => if args[1].$method(&args[2]) { 0 } else { 1 }, - _ => if args[2..].iter().any(|arg| args[1].$method(arg)) { 0 } else { 1 } + 3 => if args[1].$method(&args[2]) { + 0 + } else { + 1 + }, + _ => if args[2..].iter().any(|arg| args[1].$method(arg)) { + 0 + } else { + 1 + }, } } }; diff --git a/members/builtins/src/echo.rs b/members/builtins/src/echo.rs index 52a2af0d..2aa8b5c2 100644 --- a/members/builtins/src/echo.rs +++ b/members/builtins/src/echo.rs @@ -1,5 +1,5 @@ -use std::io::{self, BufWriter, Write}; use smallvec::SmallVec; +use std::io::{self, BufWriter, Write}; bitflags! { struct Flags : u8 { diff --git a/members/builtins/src/test.rs b/members/builtins/src/test.rs index 9c034dc8..90dc0f5c 100644 --- a/members/builtins/src/test.rs +++ b/members/builtins/src/test.rs @@ -1,6 +1,9 @@ use smallstring::SmallString; use std::{ - fs, os::unix::fs::{FileTypeExt, MetadataExt, PermissionsExt}, path::Path, time::SystemTime, + fs, + os::unix::fs::{FileTypeExt, MetadataExt, PermissionsExt}, + path::Path, + time::SystemTime, }; pub const MAN_TEST: &str = r#"NAME @@ -372,53 +375,142 @@ fn test_strings() { fn test_empty_str() { let eval = |args: Vec<String>| evaluate_arguments(&args); assert_eq!(eval(vec!["".to_owned()]), Ok(false)); - assert_eq!(eval(vec!["c".to_owned(), "=".to_owned(), "".to_owned()]), Ok(false)); + assert_eq!( + eval(vec!["c".to_owned(), "=".to_owned(), "".to_owned()]), + Ok(false) + ); } #[test] fn test_integers_arguments() { fn vec_string(args: &[&str]) -> Vec<String> { - args.iter().map(|s| (*s).to_owned()).collect::<Vec<String>>() + args.iter() + .map(|s| (*s).to_owned()) + .collect::<Vec<String>>() } // Equal To - assert_eq!(evaluate_arguments(&vec_string(&["10", "-eq", "10"])), Ok(true)); - assert_eq!(evaluate_arguments(&vec_string(&["10", "-eq", "5"])), Ok(false)); - assert_eq!(evaluate_arguments(&vec_string(&["-10", "-eq", "-10"])), Ok(true)); - assert_eq!(evaluate_arguments(&vec_string(&["-10", "-eq", "10"])), Ok(false)); + assert_eq!( + evaluate_arguments(&vec_string(&["10", "-eq", "10"])), + Ok(true) + ); + assert_eq!( + evaluate_arguments(&vec_string(&["10", "-eq", "5"])), + Ok(false) + ); + assert_eq!( + evaluate_arguments(&vec_string(&["-10", "-eq", "-10"])), + Ok(true) + ); + assert_eq!( + evaluate_arguments(&vec_string(&["-10", "-eq", "10"])), + Ok(false) + ); // Greater Than or Equal To - assert_eq!(evaluate_arguments(&vec_string(&["10", "-ge", "10"])), Ok(true)); - assert_eq!(evaluate_arguments(&vec_string(&["10", "-ge", "5"])), Ok(true)); - assert_eq!(evaluate_arguments(&vec_string(&["5", "-ge", "10"])), Ok(false)); - assert_eq!(evaluate_arguments(&vec_string(&["-9", "-ge", "-10"])), Ok(true)); - assert_eq!(evaluate_arguments(&vec_string(&["-10", "-ge", "-10"])), Ok(true)); - assert_eq!(evaluate_arguments(&vec_string(&["-10", "-ge", "10"])), Ok(false)); + assert_eq!( + evaluate_arguments(&vec_string(&["10", "-ge", "10"])), + Ok(true) + ); + assert_eq!( + evaluate_arguments(&vec_string(&["10", "-ge", "5"])), + Ok(true) + ); + assert_eq!( + evaluate_arguments(&vec_string(&["5", "-ge", "10"])), + Ok(false) + ); + assert_eq!( + evaluate_arguments(&vec_string(&["-9", "-ge", "-10"])), + Ok(true) + ); + assert_eq!( + evaluate_arguments(&vec_string(&["-10", "-ge", "-10"])), + Ok(true) + ); + assert_eq!( + evaluate_arguments(&vec_string(&["-10", "-ge", "10"])), + Ok(false) + ); // Less Than or Equal To - assert_eq!(evaluate_arguments(&vec_string(&["5", "-le", "5"])), Ok(true)); - assert_eq!(evaluate_arguments(&vec_string(&["5", "-le", "10"])), Ok(true)); - assert_eq!(evaluate_arguments(&vec_string(&["10", "-le", "5"])), Ok(false)); - assert_eq!(evaluate_arguments(&vec_string(&["-11", "-le", "-10"])), Ok(true)); - assert_eq!(evaluate_arguments(&vec_string(&["-10", "-le", "-10"])), Ok(true)); - assert_eq!(evaluate_arguments(&vec_string(&["10", "-le", "-10"])), Ok(false)); + assert_eq!( + evaluate_arguments(&vec_string(&["5", "-le", "5"])), + Ok(true) + ); + assert_eq!( + evaluate_arguments(&vec_string(&["5", "-le", "10"])), + Ok(true) + ); + assert_eq!( + evaluate_arguments(&vec_string(&["10", "-le", "5"])), + Ok(false) + ); + assert_eq!( + evaluate_arguments(&vec_string(&["-11", "-le", "-10"])), + Ok(true) + ); + assert_eq!( + evaluate_arguments(&vec_string(&["-10", "-le", "-10"])), + Ok(true) + ); + assert_eq!( + evaluate_arguments(&vec_string(&["10", "-le", "-10"])), + Ok(false) + ); // Less Than - assert_eq!(evaluate_arguments(&vec_string(&["5", "-lt", "10"])), Ok(true)); - assert_eq!(evaluate_arguments(&vec_string(&["10", "-lt", "5"])), Ok(false)); - assert_eq!(evaluate_arguments(&vec_string(&["-11", "-lt", "-10"])), Ok(true)); - assert_eq!(evaluate_arguments(&vec_string(&["10", "-lt", "-10"])), Ok(false)); + assert_eq!( + evaluate_arguments(&vec_string(&["5", "-lt", "10"])), + Ok(true) + ); + assert_eq!( + evaluate_arguments(&vec_string(&["10", "-lt", "5"])), + Ok(false) + ); + assert_eq!( + evaluate_arguments(&vec_string(&["-11", "-lt", "-10"])), + Ok(true) + ); + assert_eq!( + evaluate_arguments(&vec_string(&["10", "-lt", "-10"])), + Ok(false) + ); // Greater Than - assert_eq!(evaluate_arguments(&vec_string(&["10", "-gt", "5"])), Ok(true)); - assert_eq!(evaluate_arguments(&vec_string(&["5", "-gt", "10"])), Ok(false)); - assert_eq!(evaluate_arguments(&vec_string(&["-9", "-gt", "-10"])), Ok(true)); - assert_eq!(evaluate_arguments(&vec_string(&["-10", "-gt", "10"])), Ok(false)); + assert_eq!( + evaluate_arguments(&vec_string(&["10", "-gt", "5"])), + Ok(true) + ); + assert_eq!( + evaluate_arguments(&vec_string(&["5", "-gt", "10"])), + Ok(false) + ); + assert_eq!( + evaluate_arguments(&vec_string(&["-9", "-gt", "-10"])), + Ok(true) + ); + assert_eq!( + evaluate_arguments(&vec_string(&["-10", "-gt", "10"])), + Ok(false) + ); // Not Equal To - assert_eq!(evaluate_arguments(&vec_string(&["10", "-ne", "5"])), Ok(true)); - assert_eq!(evaluate_arguments(&vec_string(&["5", "-ne", "5"])), Ok(false)); - assert_eq!(evaluate_arguments(&vec_string(&["-10", "-ne", "-10"])), Ok(false)); - assert_eq!(evaluate_arguments(&vec_string(&["-10", "-ne", "10"])), Ok(true)); + assert_eq!( + evaluate_arguments(&vec_string(&["10", "-ne", "5"])), + Ok(true) + ); + assert_eq!( + evaluate_arguments(&vec_string(&["5", "-ne", "5"])), + Ok(false) + ); + assert_eq!( + evaluate_arguments(&vec_string(&["-10", "-ne", "-10"])), + Ok(false) + ); + assert_eq!( + evaluate_arguments(&vec_string(&["-10", "-ne", "10"])), + Ok(true) + ); } #[test] @@ -447,8 +539,14 @@ fn test_file_is_symlink() { #[test] fn test_file_has_execute_permission() { - assert_eq!(file_has_execute_permission("../../testing/executable_file"), true); - assert_eq!(file_has_execute_permission("../../testing/empty_file"), false); + assert_eq!( + file_has_execute_permission("../../testing/executable_file"), + true + ); + assert_eq!( + file_has_execute_permission("../../testing/empty_file"), + false + ); } #[test] @@ -457,5 +555,8 @@ fn test_file_size_is_greater_than_zero() { file_size_is_greater_than_zero("../../testing/file_with_text"), true ); - assert_eq!(file_size_is_greater_than_zero("../../testing/empty_file"), false); + assert_eq!( + file_size_is_greater_than_zero("../../testing/empty_file"), + false + ); } diff --git a/members/lexers/src/lib.rs b/members/lexers/src/lib.rs index 1b98f502..35638230 100644 --- a/members/lexers/src/lib.rs +++ b/members/lexers/src/lib.rs @@ -4,5 +4,4 @@ extern crate bitflags; pub mod arguments; pub mod designators; -pub use self::arguments::*; -pub use self::designators::*; +pub use self::{arguments::*, designators::*}; diff --git a/members/ranges/src/index.rs b/members/ranges/src/index.rs index 5dc172fe..cb5015a5 100644 --- a/members/ranges/src/index.rs +++ b/members/ranges/src/index.rs @@ -25,7 +25,7 @@ impl Index { /// - A positive value `n` represents `Forward(n)` /// - A negative value `-n` reprents `Backwards(n - 1)` such that: /// ```ignore,rust - /// assert_eq!(Index::new(-1), Index::Backward(0)) + /// assert_eq!(Index::new(-1), Index::Backward(0)) /// ``` pub fn new(input: isize) -> Index { if input < 0 { diff --git a/members/ranges/src/lib.rs b/members/ranges/src/lib.rs index 86d06ae7..c2b5997a 100644 --- a/members/ranges/src/lib.rs +++ b/members/ranges/src/lib.rs @@ -5,10 +5,7 @@ mod parse; mod range; mod select; -pub use self::index::*; -pub use self::parse::*; -pub use self::range::*; -pub use self::select::*; +pub use self::{index::*, parse::*, range::*, select::*}; #[cfg(test)] mod tests { diff --git a/members/ranges/src/select.rs b/members/ranges/src/select.rs index 2a6bad1b..083f1e78 100644 --- a/members/ranges/src/select.rs +++ b/members/ranges/src/select.rs @@ -1,8 +1,9 @@ +use super::{parse_index_range, Index, Range}; use smallstring::SmallString; use std::{ - iter::{empty, FromIterator}, str::FromStr, + iter::{empty, FromIterator}, + str::FromStr, }; -use super::{parse_index_range, Index, Range}; /// Represents a filter on a vector-like object #[derive(Debug, PartialEq, Clone)] diff --git a/members/sys/src/sys/redox/mod.rs b/members/sys/src/sys/redox/mod.rs index 71cc7736..e02527bc 100644 --- a/members/sys/src/sys/redox/mod.rs +++ b/members/sys/src/sys/redox/mod.rs @@ -65,7 +65,8 @@ pub fn waitpid(pid: i32, status: &mut i32, options: i32) -> Result<i32, i32> { } pub fn strerror(errno: i32) -> &'static str { - syscall::error::STR_ERROR.get(errno as usize) + syscall::error::STR_ERROR + .get(errno as usize) .map(|err| *err) .unwrap_or("Unknown Error") } @@ -230,9 +231,7 @@ pub fn tcsetpgrp(tty_fd: RawFd, pgid: u32) -> io::Result<()> { pub fn dup(fd: RawFd) -> io::Result<RawFd> { cvt(syscall::dup(fd, &[])) } -pub fn dup2(old: RawFd, new: RawFd) -> io::Result<RawFd> { - cvt(syscall::dup2(old, new, &[])) -} +pub fn dup2(old: RawFd, new: RawFd) -> io::Result<RawFd> { cvt(syscall::dup2(old, new, &[])) } pub fn close(fd: RawFd) -> io::Result<()> { cvt(syscall::close(fd)).and(Ok(())) } diff --git a/members/sys/src/sys/unix/mod.rs b/members/sys/src/sys/unix/mod.rs index df0f0d71..59d7fa5f 100644 --- a/members/sys/src/sys/unix/mod.rs +++ b/members/sys/src/sys/unix/mod.rs @@ -54,9 +54,7 @@ pub fn strerror(errno: i32) -> &'static str { return "Unknown Error"; } - CStr::from_ptr(ptr) - .to_str() - .unwrap_or("Unknown Error") + CStr::from_ptr(ptr).to_str().unwrap_or("Unknown Error") } } @@ -326,9 +324,7 @@ pub fn tcsetpgrp(fd: RawFd, pgrp: u32) -> io::Result<()> { pub fn dup(fd: RawFd) -> io::Result<RawFd> { cvt(unsafe { libc::dup(fd) }) } -pub fn dup2(old: RawFd, new: RawFd) -> io::Result<RawFd> { - cvt(unsafe { libc::dup2(old, new) }) -} +pub fn dup2(old: RawFd, new: RawFd) -> io::Result<RawFd> { cvt(unsafe { libc::dup2(old, new) }) } pub fn close(fd: RawFd) -> io::Result<()> { cvt(unsafe { libc::close(fd) }).and(Ok(())) } diff --git a/rustfmt.toml b/rustfmt.toml index 9e639d7c..d6df6d66 100644 --- a/rustfmt.toml +++ b/rustfmt.toml @@ -12,5 +12,4 @@ reorder_impl_items = true struct_field_align_threshold = 30 use_field_init_shorthand = true wrap_comments = true -write_mode = "overwrite" merge_imports = true diff --git a/src/lib/parser/loops/for_grammar.rs b/src/lib/parser/loops.rs similarity index 100% rename from src/lib/parser/loops/for_grammar.rs rename to src/lib/parser/loops.rs diff --git a/src/lib/parser/loops/mod.rs b/src/lib/parser/loops/mod.rs deleted file mode 100644 index c6414c5d..00000000 --- a/src/lib/parser/loops/mod.rs +++ /dev/null @@ -1 +0,0 @@ -pub mod for_grammar; diff --git a/src/lib/parser/mod.rs b/src/lib/parser/mod.rs index deb1ad66..936decd0 100644 --- a/src/lib/parser/mod.rs +++ b/src/lib/parser/mod.rs @@ -7,6 +7,6 @@ mod statement; pub use self::{assignments::Primitive, quotes::Terminator}; pub(crate) use self::{ - loops::for_grammar::ForExpression, shell_expand::{expand_string, Expander, Select}, + loops::ForExpression, shell_expand::{expand_string, Expander, Select}, statement::{parse_and_validate, StatementSplitter}, }; diff --git a/src/lib/parser/shell_expand/README.md b/src/lib/parser/shell_expand/README.md deleted file mode 100644 index 66a802cc..00000000 --- a/src/lib/parser/shell_expand/README.md +++ /dev/null @@ -1,17 +0,0 @@ -# Shell Expand Module - -This module reduces statements into a set of word token primitives, and applies expansions to these tokens accordingly. -In order to be modular, the expansion logic is supplied with a structure containing closure references, which are -provided higher up by the shell. - -## Tokenizing Words - -The `words` module contains the `WordIterator` which reduces statments into set of `WordTokens`. The following are -supported word tokens: - -- `Normal(&str)`: Normal words that do not require any expansion at all -- `Whitespace(&str)`: Whitespace between words -- `Variable(&str, bool)`: A variable name and an indication of if it was quoted -- `Process(&str, bool)`: A subshell and an indication of if it was quoted -- `Tilde(&str)`: A tilde expression such as ~ or ~user -- `Brace(Vec<&str>)`: A brace expansion and each of its inner elements diff --git a/src/lib/parser/shell_expand/braces.rs b/src/lib/parser/shell_expand/braces.rs deleted file mode 100644 index c0040d15..00000000 --- a/src/lib/parser/shell_expand/braces.rs +++ /dev/null @@ -1,192 +0,0 @@ -use super::permutate::Permutator; -use smallvec::SmallVec; - -#[derive(Debug)] -/// A token primitive for the `expand_braces` function. -pub(crate) enum BraceToken { - Normal(String), - Expander, -} - -pub(crate) fn expand_braces<'a>( - tokens: &'a [BraceToken], - expanders: &'a [&'a [&'a str]], -) -> Box<Iterator<Item = String> + 'a> { - if expanders.len() > 1 { - let multiple_brace_expand = MultipleBraceExpand::new(tokens, expanders); - Box::new(multiple_brace_expand) - } else if expanders.len() == 1 { - let single_brace_expand = SingleBraceExpand { - elements: expanders[0].iter().map(|element| *element), - tokens, - loop_count: 0, - }; - Box::new(single_brace_expand) - } else { - Box::new(::std::iter::empty()) - } -} - -fn escape_string(output: &mut SmallVec<[u8; 64]>, input: &str) { - let mut backslash = false; - for character in input.bytes() { - if backslash { - match character { - b'{' | b'}' | b',' => output.push(character), - _ => { - output.push(b'\\'); - output.push(character); - } - } - backslash = false; - } else if character == b'\\' { - backslash = true; - } else { - output.push(character); - } - } -} - -pub struct MultipleBraceExpand<'a> { - permutator: Permutator<'a, str>, - tokens: &'a [BraceToken], - buffer: Vec<&'a str> -} - -impl<'a> MultipleBraceExpand<'a> { - pub(crate) fn new( - tokens: &'a [BraceToken], - expanders: &'a [&'a [&'a str]] - ) -> MultipleBraceExpand<'a> { - MultipleBraceExpand { - permutator: Permutator::new(expanders), - tokens, - buffer: vec![""; expanders.len()] - } - } -} - -impl<'a> Iterator for MultipleBraceExpand<'a> { - type Item = String; - - fn next(&mut self) -> Option<Self::Item> { - if self.permutator.next_with_buffer(&mut self.buffer) { - let mut strings = self.buffer.iter(); - let small_vec: SmallVec<[u8; 64]> = self.tokens.iter().fold( - SmallVec::with_capacity(64), - |mut small_vec, token| match *token { - BraceToken::Normal(ref text) => { - escape_string(&mut small_vec, text); - small_vec - } - BraceToken::Expander => { - escape_string(&mut small_vec, strings.next().unwrap()); - small_vec - } - }, - ); - Some(unsafe { String::from_utf8_unchecked(small_vec.to_vec()) }) - } else { - None - } - } -} - -pub struct SingleBraceExpand<'a, 'b, I> -where - I: Iterator<Item = &'a str>, -{ - elements: I, - tokens: &'b [BraceToken], - loop_count: usize, -} - -impl<'a, 'b, I> Iterator for SingleBraceExpand<'a, 'b, I> -where - I: Iterator<Item = &'a str>, -{ - type Item = String; - - fn next(&mut self) -> Option<Self::Item> { - match self.loop_count { - 0 => { - let small_vec: SmallVec<[u8; 64]> = self.tokens.iter().fold( - SmallVec::with_capacity(64), - |mut small_vec, token| match *token { - BraceToken::Normal(ref text) => { - escape_string(&mut small_vec, text); - small_vec - } - BraceToken::Expander => { - escape_string(&mut small_vec, self.elements.next().unwrap()); - small_vec - } - }, - ); - self.loop_count = 1; - Some(unsafe { String::from_utf8_unchecked(small_vec.to_vec()) }) - } - _ => { - if let Some(element) = self.elements.next() { - let small_vec: SmallVec<[u8; 64]> = self.tokens.iter().fold( - SmallVec::with_capacity(64), - |mut small_vec, token| match *token { - BraceToken::Normal(ref text) => { - escape_string(&mut small_vec, text); - small_vec - } - BraceToken::Expander => { - escape_string(&mut small_vec, element); - small_vec - } - }, - ); - Some(unsafe { String::from_utf8_unchecked(small_vec.to_vec()) }) - } else { - None - } - } - } - } -} - -#[test] -fn test_multiple_brace_expand() { - let expanders: &[&[&str]] = &[&["1", "2"][..], &["3", "4"][..], &["5", "6"][..]]; - let tokens: &[BraceToken] = &[ - BraceToken::Normal("AB".to_owned()), - BraceToken::Expander, - BraceToken::Normal("CD".to_owned()), - BraceToken::Expander, - BraceToken::Normal("EF".to_owned()), - BraceToken::Expander, - BraceToken::Normal("GH".to_owned()), - ]; - assert_eq!( - MultipleBraceExpand ::new(tokens, expanders).collect::<Vec<String>>(), - vec![ - "AB1CD3EF5GH".to_owned(), - "AB1CD3EF6GH".to_owned(), - "AB1CD4EF5GH".to_owned(), - "AB1CD4EF6GH".to_owned(), - "AB2CD3EF5GH".to_owned(), - "AB2CD3EF6GH".to_owned(), - "AB2CD4EF5GH".to_owned(), - "AB2CD4EF6GH".to_owned(), - ] - ); -} - -#[test] -fn test_single_brace_expand() { - let elements = &["one", "two", "three"]; - let tokens: &[BraceToken] = &[BraceToken::Normal("A=".to_owned()), BraceToken::Expander]; - assert_eq!( - SingleBraceExpand { - elements: elements.iter().map(|element| *element), - tokens, - loop_count: 0, - }.collect::<Vec<String>>(), - vec!["A=one".to_owned(), "A=two".to_owned(), "A=three".to_owned()] - ); -} -- GitLab