#!/usr/bin/env bash
function set_up_before_script() {
source bin/git-forgit
}
# Asserts that _forgit_parse_array splits the given input string into exactly
# the expected elements.
#
# Usage: assert_parsed_array [expected_element...]
# the raw string passed to _forgit_parse_array
# [expected_element] zero or more elements the input should split into,
# typically passed by expanding an array: "${expected[@]}"
function assert_parsed_array() {
local -r input="$1"
shift
local -r expected=("$@")
local -a actual=()
_forgit_parse_array actual "$input"
assert_same "${#expected[@]}" "${#actual[@]}"
local i
for i in "${!expected[@]}"; do
assert_same "${expected[i]}" "${actual[i]}"
done
}
function test_forgit_parse_array_splits_space_separated_values() {
local -r input="--foo --bar"
local -r expected=("--foo" "--bar")
assert_parsed_array "$input" "${expected[@]}"
}
function test_forgit_parse_array_keeps_single_value() {
local -r input="--force"
local -r expected=("--force")
assert_parsed_array "$input" "${expected[@]}"
}
function test_forgit_parse_array_empty_string_yields_no_elements() {
local -r input=""
local -r expected=()
assert_parsed_array "$input" "${expected[@]}"
}
function test_forgit_parse_array_ignores_surrounding_newlines() {
local -r input="
--force
"
local -r expected=("--force")
assert_parsed_array "$input" "${expected[@]}"
}
function test_forgit_parse_array_splits_values_across_indented_lines() {
local -r input="
--foo
--bar
"
local -r expected=("--foo" "--bar")
assert_parsed_array "$input" "${expected[@]}"
}
function test_forgit_parse_array_splits_on_tabs() {
local -r input=$'\t--foo\t\t--bar\t'
local -r expected=("--foo" "--bar")
assert_parsed_array "$input" "${expected[@]}"
}
function test_forgit_parse_array_whitespace_only_yields_no_elements() {
local -r input="
"
local -r expected=()
assert_parsed_array "$input" "${expected[@]}"
}