Skip to content
Snippets Groups Projects
Commit 35e1a537 authored by stratact's avatar stratact Committed by Michael Aaron Murphy
Browse files

Fix for #768 (#769)

* Fix #768

* Add integration test

* Add unit test
parent d168fce2
No related branches found
No related tags found
No related merge requests found
...@@ -3,6 +3,7 @@ echo 1{A{1,2},B{1,2}} ...@@ -3,6 +3,7 @@ echo 1{A{1,2},B{1,2}}
# permutating braces # permutating braces
echo {0,1}abc{2,3,4}def{5,6,7}{g,h,i} echo {0,1}abc{2,3,4}def{5,6,7}{g,h,i}
echo It{{em,alic}iz,erat}e{d,}
# inclusive ranges # inclusive ranges
echo {-1...1} echo {-1...1}
...@@ -34,4 +35,4 @@ echo {a..2..f} ...@@ -34,4 +35,4 @@ echo {a..2..f}
echo {A..2..F} echo {A..2..F}
echo {0..-2..-5} echo {0..-2..-5}
echo {e..-2..a} echo {e..-2..a}
echo {E..-2..A} echo {E..-2..A}
\ No newline at end of file
1A1 1A2 1B1 1B2 1A1 1A2 1B1 1B2
0abc2def5g 0abc2def5h 0abc2def5i 0abc2def6g 0abc2def6h 0abc2def6i 0abc2def7g 0abc2def7h 0abc2def7i 0abc3def5g 0abc3def5h 0abc3def5i 0abc3def6g 0abc3def6h 0abc3def6i 0abc3def7g 0abc3def7h 0abc3def7i 0abc4def5g 0abc4def5h 0abc4def5i 0abc4def6g 0abc4def6h 0abc4def6i 0abc4def7g 0abc4def7h 0abc4def7i 1abc2def5g 1abc2def5h 1abc2def5i 1abc2def6g 1abc2def6h 1abc2def6i 1abc2def7g 1abc2def7h 1abc2def7i 1abc3def5g 1abc3def5h 1abc3def5i 1abc3def6g 1abc3def6h 1abc3def6i 1abc3def7g 1abc3def7h 1abc3def7i 1abc4def5g 1abc4def5h 1abc4def5i 1abc4def6g 1abc4def6h 1abc4def6i 1abc4def7g 1abc4def7h 1abc4def7i 0abc2def5g 0abc2def5h 0abc2def5i 0abc2def6g 0abc2def6h 0abc2def6i 0abc2def7g 0abc2def7h 0abc2def7i 0abc3def5g 0abc3def5h 0abc3def5i 0abc3def6g 0abc3def6h 0abc3def6i 0abc3def7g 0abc3def7h 0abc3def7i 0abc4def5g 0abc4def5h 0abc4def5i 0abc4def6g 0abc4def6h 0abc4def6i 0abc4def7g 0abc4def7h 0abc4def7i 1abc2def5g 1abc2def5h 1abc2def5i 1abc2def6g 1abc2def6h 1abc2def6i 1abc2def7g 1abc2def7h 1abc2def7i 1abc3def5g 1abc3def5h 1abc3def5i 1abc3def6g 1abc3def6h 1abc3def6i 1abc3def7g 1abc3def7h 1abc3def7i 1abc4def5g 1abc4def5h 1abc4def5i 1abc4def6g 1abc4def6h 1abc4def6i 1abc4def7g 1abc4def7h 1abc4def7i
Itemized Itemize Italicized Italicize Iterated Iterate
-1 0 1 -1 0 1
2 1 0 2 1 0
a b c a b c
......
...@@ -198,12 +198,22 @@ pub(crate) fn expand_string<E: Expander>( ...@@ -198,12 +198,22 @@ pub(crate) fn expand_string<E: Expander>(
) -> Array { ) -> Array {
let mut token_buffer = Vec::new(); let mut token_buffer = Vec::new();
let mut contains_brace = false; let mut contains_brace = false;
let mut word_iterator = WordIterator::new(original, expand_func);
for word in WordIterator::new(original, expand_func) { loop {
if let WordToken::Brace(_) = word { match word_iterator.next() {
contains_brace = true; Some(word) => {
if let WordToken::Brace(_) = word {
contains_brace = true;
}
token_buffer.push(word);
}
None if original.is_empty() => {
token_buffer.push(WordToken::Normal("", true, false));
break;
}
None => break,
} }
token_buffer.push(word);
} }
expand_tokens(&token_buffer, expand_func, reverse_quoting, contains_brace) expand_tokens(&token_buffer, expand_func, reverse_quoting, contains_brace)
...@@ -689,6 +699,20 @@ mod test { ...@@ -689,6 +699,20 @@ mod test {
); );
} }
#[test]
fn expand_braces_v2() {
let line = "It{{em,alic}iz,erat}e{d,}";
let expected = "Itemized Itemize Italicized Italicize Iterated Iterate";
let expanded = expand_string(line, &VariableExpander, false);
assert_eq!(
expected
.split_whitespace()
.map(|x| x.to_owned())
.collect::<Array>(),
expanded
);
}
#[test] #[test]
fn expand_variables_with_colons() { fn expand_variables_with_colons() {
let expanded = expand_string("$FOO:$BAR", &VariableExpander, false); let expanded = expand_string("$FOO:$BAR", &VariableExpander, false);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment