170 lines
4.4 KiB
Bash
170 lines
4.4 KiB
Bash
#!/usr/bin/env bats
|
|
load bats-extra
|
|
|
|
# local version: 1.1.0.0
|
|
|
|
# usage: dnd_character.sh modifier n
|
|
# -> output expected modifier
|
|
|
|
# usage: dnd_character.sh generate
|
|
# -> output each characteristic and ability value, one per line
|
|
|
|
|
|
# ability modifier
|
|
|
|
@test "ability modifier for score 3 is -4" {
|
|
#[[ $BATS_RUN_SKIPPED == "true" ]] || skip
|
|
run bash dnd_character.sh modifier 3
|
|
assert_success
|
|
assert_output "-4"
|
|
}
|
|
|
|
@test "ability modifier for score 4 is -3" {
|
|
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
|
|
run bash dnd_character.sh modifier 4
|
|
assert_success
|
|
assert_output "-3"
|
|
}
|
|
|
|
@test "ability modifier for score 5 is -3" {
|
|
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
|
|
run bash dnd_character.sh modifier 5
|
|
assert_success
|
|
assert_output "-3"
|
|
}
|
|
|
|
@test "ability modifier for score 6 is -2" {
|
|
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
|
|
run bash dnd_character.sh modifier 6
|
|
assert_success
|
|
assert_output "-2"
|
|
}
|
|
|
|
@test "ability modifier for score 7 is -2" {
|
|
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
|
|
run bash dnd_character.sh modifier 7
|
|
assert_success
|
|
assert_output "-2"
|
|
}
|
|
|
|
@test "ability modifier for score 8 is -1" {
|
|
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
|
|
run bash dnd_character.sh modifier 8
|
|
assert_success
|
|
assert_output "-1"
|
|
}
|
|
|
|
@test "ability modifier for score 9 is -1" {
|
|
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
|
|
run bash dnd_character.sh modifier 9
|
|
assert_success
|
|
assert_output "-1"
|
|
}
|
|
|
|
@test "ability modifier for score 10 is 0" {
|
|
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
|
|
run bash dnd_character.sh modifier 10
|
|
assert_success
|
|
assert_output "0"
|
|
}
|
|
|
|
@test "ability modifier for score 11 is 0" {
|
|
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
|
|
run bash dnd_character.sh modifier 11
|
|
assert_success
|
|
assert_output "0"
|
|
}
|
|
|
|
@test "ability modifier for score 12 is +1" {
|
|
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
|
|
run bash dnd_character.sh modifier 12
|
|
assert_success
|
|
assert_output "1"
|
|
}
|
|
|
|
@test "ability modifier for score 13 is +1" {
|
|
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
|
|
run bash dnd_character.sh modifier 13
|
|
assert_success
|
|
assert_output "1"
|
|
}
|
|
|
|
@test "ability modifier for score 14 is +2" {
|
|
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
|
|
run bash dnd_character.sh modifier 14
|
|
assert_success
|
|
assert_output "2"
|
|
}
|
|
|
|
@test "ability modifier for score 15 is +2" {
|
|
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
|
|
run bash dnd_character.sh modifier 15
|
|
assert_success
|
|
assert_output "2"
|
|
}
|
|
|
|
@test "ability modifier for score 16 is +3" {
|
|
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
|
|
run bash dnd_character.sh modifier 16
|
|
assert_success
|
|
assert_output "3"
|
|
}
|
|
|
|
@test "ability modifier for score 17 is +3" {
|
|
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
|
|
run bash dnd_character.sh modifier 17
|
|
assert_success
|
|
assert_output "3"
|
|
}
|
|
|
|
@test "ability modifier for score 18 is +4" {
|
|
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
|
|
run bash dnd_character.sh modifier 18
|
|
assert_success
|
|
assert_output "4"
|
|
}
|
|
|
|
|
|
# generate a character, validate expected output
|
|
|
|
@test "generate a character" {
|
|
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
|
|
run bash dnd_character.sh generate
|
|
assert_success
|
|
# these don't have to appear in any particular order
|
|
assert_line --regexp '^strength [[:digit:]]{1,2}$'
|
|
assert_line --regexp '^dexterity [[:digit:]]{1,2}$'
|
|
assert_line --regexp '^constitution [[:digit:]]{1,2}$'
|
|
assert_line --regexp '^intelligence [[:digit:]]{1,2}$'
|
|
assert_line --regexp '^wisdom [[:digit:]]{1,2}$'
|
|
assert_line --regexp '^charisma [[:digit:]]{1,2}$'
|
|
assert_line --regexp '^hitpoints [[:digit:]]{1,2}$'
|
|
# no other output: `run` populates the `lines` array
|
|
assert_equal ${#lines[@]} 7
|
|
}
|
|
|
|
|
|
# Usage: between $val $low $high
|
|
# Value is between low (inclusive) and high (inclusive).
|
|
between() {
|
|
(( $2 <= $1 && $1 <= $3 ))
|
|
}
|
|
|
|
# random ability is within range
|
|
@test "validate ability range and hitpoint value" {
|
|
[[ $BATS_RUN_SKIPPED == "true" ]] || skip
|
|
for i in {1..50}; do
|
|
while read c v; do
|
|
if [[ $c == "hitpoints" ]]; then
|
|
hits=$v
|
|
else
|
|
assert between "$v" 3 18
|
|
[[ $c == "constitution" ]] && const=$v
|
|
fi
|
|
done < <(bash dnd_character.sh generate)
|
|
|
|
const_mod=$(bash dnd_character.sh modifier "$const")
|
|
assert_equal $((10 + const_mod)) "$hits"
|
|
done
|
|
}
|