test_that("is_long_flag() identifies long flags", {
	expect_true(is_long_flag("--verbose"))
	expect_false(is_long_flag("--"))
	expect_false(is_long_flag("-v"))
	expect_false(is_long_flag("foo"))
})

test_that("is_short_flag() identifies short flags", {
	expect_true(is_short_flag("-v"))
	expect_true(is_short_flag("-3"))
	expect_false(is_short_flag("--verbose"))
	expect_false(is_short_flag("-3.14"))
	expect_false(is_short_flag("foo"))
})

test_that("normalize_opt() splits short flag clusters", {
	# fmt: skip
	spec <- as_spec(matrix(c(
		"s"      , "s", 0, "logical",
		"b"      , "b", 0, "logical",
		"g"      , "g", 0, "logical",
		"verbose", "v", 0, "logical"
	), ncol = 4, byrow = TRUE))
	expect_equal(normalize_opt(c("-sbg", "--verbose"), spec), c("-s", "-b", "-g", "--verbose"))
})

test_that("normalize_opt() treats negative-number-like bundles as arguments when preceding flag takes an argument", {
	# fmt: skip
	spec <- as_spec(matrix(c(
		"mean"   , "m", "store", "double",
		"verbose", "v", "store_true", "logical"
	), ncol = 4, byrow = TRUE))
	expect_equal(normalize_opt(c("-m", "-3.14"), spec), c("-m", "-3.14"))
	expect_equal(normalize_opt(c("--mean", "-1e5"), spec), c("--mean", "-1e5"))
	expect_equal(normalize_opt(c("-v", "-1e5"), spec), c("-v", "-1", "-e", "-5"))
	expect_equal(normalize_opt(c("-1e5"), spec), c("-1", "-e", "-5"))
})

test_that("get_Rscript_filename() ignores --file= after --args", {
	local_mocked_bindings(
		command_args = function() c("Rscript", "--file=script.R", "--args", "--file=fake.R")
	)
	expect_equal(get_Rscript_filename(), "script.R")
})

test_that("get_Rscript_filename() works with no --args", {
	local_mocked_bindings(
		command_args = function() c("Rscript", "--file=script.R")
	)
	expect_equal(get_Rscript_filename(), "script.R")
})

test_that("get_Rscript_filename() returns NA when no --file=", {
	local_mocked_bindings(
		command_args = function() character(0)
	)
	expect_equal(get_Rscript_filename(), NA_character_)
})

test_that("get_Rscript_filename() returns NA when no --file= before --args", {
	local_mocked_bindings(
		command_args = function() c("R", "--args", "--file=boo.r")
	)
	expect_equal(get_Rscript_filename(), NA_character_)
})

test_that("getfile() returns LITTLER_SCRIPT_PATH when set", {
	local_mocked_bindings(
		littler_script_path = function() "script.r"
	)
	expect_equal(getfile(), "script.r")
})
