test_that("generate_multichoice generates correct XML for single correct answer", {
# Inputs
answer <- "Correct Answer"
a_values <- c("Wrong Answer 1", "Wrong Answer 2")
correct_feedback <- "Correct!"
incorrect_feedback <- "Incorrect!"
fb_partially <- "Almost there!"
# Expected output
n <- length(a_values)
value <- sprintf("-%2.15f", 100 / n)
expected_structure <- paste0(
"\ntrue",
"\ntrue",
"\nnone",
"\n0",
"\n Correct! ",
"\n Almost there! ",
"\n Incorrect! ",
"\n",
"\n Correct Answer",
"\n Correct! ",
"\n",
"\n",
"\n Wrong Answer 1",
"\n Incorrect! ",
"\n",
"\n",
"\n Wrong Answer 2",
"\n Incorrect! ",
"\n"
)
# Run the function
result <- generate_multichoice(
answer = answer,
a_values = a_values,
correct_feedback = correct_feedback,
incorrect_feedback = incorrect_feedback,
fb_partially = fb_partially,
fb_answer = '',
fb_a_values = NULL,
fraction = 1
)
# Check if the result matches the expected structure
expect_equal(result, expected_structure)
})
test_that("generate_multichoice handles custom feedback for a_values answers", {
# Inputs
answer <- "Correct Answer"
a_values <- c("Wrong Answer 1", "Wrong Answer 2")
correct_feedback <- "Correct!"
incorrect_feedback <- "Incorrect!"
fb_partially <- "Almost there!"
fb_a_values <- c("Custom Feedback 1", "Custom Feedback 2")
# Expected output
n <- length(a_values)
value <- sprintf("-%2.15f", 100 / n)
expected_structure <- paste0(
"\ntrue",
"\ntrue",
"\nnone",
"\n0",
"\n Correct! ",
"\n Almost there! ",
"\n Incorrect! ",
"\n",
"\n Correct Answer",
"\n Correct! ",
"\n","\n",
"\n Wrong Answer 1",
"\n Custom Feedback 1 ",
"\n",
"\n",
"\n Wrong Answer 2",
"\n Custom Feedback 2 ",
"\n"
)
# Run the function
result <- generate_multichoice(
answer = answer,
a_values = a_values,
correct_feedback = correct_feedback,
incorrect_feedback = incorrect_feedback,
fb_partially = fb_partially,
fb_a_values = fb_a_values,
fb_answer = '',
fraction = 1
)
# Check if the result matches the expected structure
expect_equal(result, expected_structure)
})
test_that("generate_multichoice generates correct XML when fb_answer is not empty", {
answer <- "Correct Answer"
a_values <- c("Wrong Answer 1", "Wrong Answer 2", "Wrong Answer 3")
correct_feedback <- "Good job!"
incorrect_feedback <- "That's not correct."
fb_partially <- "Partially correct."
fb_answer <- "Specific feedback for the correct answer."
fb_a_values <- c("Feedback for Wrong Answer 1", "Feedback for Wrong Answer 2", "Feedback for Wrong Answer 3")
result <- generate_multichoice(
answer = answer,
a_values = a_values,
correct_feedback = correct_feedback,
incorrect_feedback = incorrect_feedback,
fb_partially = fb_partially,
fb_answer = fb_answer,
fb_a_values = fb_a_values,
fraction = 1
)
# Check correct answer and its feedback
expect_match(result, '', fixed = TRUE)
expect_match(result, 'Correct Answer', fixed = TRUE)
expect_match(result, 'Specific feedback for the correct answer.', fixed = TRUE)
# Check incorrect answers and their feedback
for (i in seq_along(a_values)) {
expect_match(result, sprintf('%s', a_values[i]), fixed = TRUE)
expect_match(result, sprintf('%s', fb_a_values[i]), fixed = TRUE)
}
# Verify feedback for partially correct
expect_match(result, '', fixed = TRUE)
expect_match(result, 'Partially correct.', fixed = TRUE)
# Verify feedback for incorrect answers
expect_match(result, '', fixed = TRUE)
expect_match(result, 'That\'s not correct.', fixed = TRUE)
})