fix InputCommand throws OutOfBounds while input is empty

This commit is contained in:
A.C.Sukazyo Eyre 2023-11-05 19:47:33 +08:00
parent d5c852e989
commit 81ba776c7d
Signed by: Eyre_S
GPG Key ID: C17CE40291207874
4 changed files with 24 additions and 15 deletions

View File

@ -5,7 +5,7 @@ MORNY_ARCHIVE_NAME = morny-coeur
MORNY_CODE_STORE = https://github.com/Eyre-S/Coeur-Morny-Cono
MORNY_COMMIT_PATH = https://github.com/Eyre-S/Coeur-Morny-Cono/commit/%s
VERSION = 1.2.2-beta1
VERSION = 1.2.2-beta2
USE_DELTA = false
VERSION_DELTA =

View File

@ -16,11 +16,11 @@ class InputCommand private (
object InputCommand {
def apply (input: Array[String]): InputCommand = {
val _ex = input(0) split ("@", 2)
val _ex = if input.nonEmpty then input(0) split ("@", 2) else Array.empty[String]
val _args = input drop 1
new InputCommand(
if _ex.length == 1 then null else _ex(1),
_ex(0),
if _ex.length > 1 then _ex(1) else null,
if _ex.nonEmpty then _ex(0) else "",
_args
)
}

View File

@ -88,7 +88,6 @@ class UniversalCommandTest extends MornyTests with Matchers with TableDrivenProp
Lmd("something error!\\") shouldEqual Array("something", "error!\\")
}
"with multi-line input" - {
whileStrict("should throws IllegalArgumentException") in:
an [IllegalArgumentException] should be thrownBy Cmd("something will\nhave a new line")
@ -96,6 +95,10 @@ class UniversalCommandTest extends MornyTests with Matchers with TableDrivenProp
Lmd("something will\nhave a new line") shouldEqual Array("something", "will\nhave", "a", "new", "line")
}
"empty string input should return empty array" in {
Cmd("") shouldEqual Array.empty[String]
Lmd("") shouldEqual Array.empty[String]
}
val example_special_character = Table(
"char",

View File

@ -16,35 +16,41 @@ class InputCommandTest extends MornyTests with TableDrivenPropertyChecks {
"args"
),
(
"/exit@sukazyo_deving_bot",
"/exit",
"exit@sukazyo_deving_bot",
"exit",
"sukazyo_deving_bot",
Array.empty[String]
),
(
"/test@a@b",
"/test",
"test@a@b",
"test",
"a@b",
Array.empty[String]
),
(
"/test-data@random#user",
"/test-data",
"test-data@random#user",
"test-data",
"random#user",
Array.empty[String]
),
(
"/info@sukazyo_deving_bot stickers.ID_403",
"/info",
"info@sukazyo_deving_bot stickers.ID_403",
"info",
"sukazyo_deving_bot",
Array("stickers.ID_403")
),
(
"/info some extra info",
"/info",
"info some extra info",
"info",
null,
Array("some", "extra", "info")
),
(
"",
"",
null,
Array.empty[String]
)
)
examples forEvery { (source, command, target, args) =>