test_that("Testing method createOutcomeDeclaration()
for AssessmentTest class", {
mc1 <- new("MultipleChoice",
identifier = "q1", prompt = "What does 3/4 + 1/4 = ?",
title = "MultipleChoice",
choices = c("1", "4/8", "8/4", "4/4"),
choice_identifiers = c("1", "2", "3", "4"),
points = c(1, 0, 0, 1))
sc2 <- new("SingleChoice",
prompt = "What is the percentage of 3/20?",
title = "SingleChoice",
choices = c("15%", "20%", "30%"),
choice_identifiers = "1",
identifier = "q2")
mc3 <- new("MultipleChoice",
identifier = "q3",
prompt = "3 + 4b = 15. What is the value of b in this equation?",
title = "MultipleChoice",
choices = c("3", "2", "5", "6/2"),
choice_identifiers = c("1", "2", "3", "4"),
points = c(1, 0, 0, 1)
)
order1 <- new("Order",
identifier = "q4",
title = "Order",
prompt = "Choose the correct order",
choices = c("Data collection", "Data cleansing",
"Data marking", "Verification and visualization"),
choices_identifiers = c("1", "2", "3", "4"),
points = 1
)
exam_section <- new("AssessmentSection",
identifier = "sec_id",
title = "section",
assessment_item = list(mc1, sc2, mc3, order1)
)
exam <- new("AssessmentTest",
identifier = "id_test",
# exclude "title"
section = list(exam_section)
)
example <- "
0
6
0
"
expected <- paste('', toString(createOutcomeDeclaration(exam)),'')
xml1 <- xml2::read_xml(expected)
xml2 <- xml2::read_xml(example)
expect_equal(xml1, xml2)
})
test_that("Testing method createOutcomeDeclaration() with
academic_grading = TRUE for AssessmentTest class", {
mc1 <- new("MultipleChoice",
identifier = "q1", prompt = "What does 3/4 + 1/4 = ?",
title = "MultipleChoice",
choices = c("1", "4/8", "8/4", "4/4"),
choice_identifiers = c("1", "2", "3", "4"),
points = c(1, 0, 0, 1))
sc2 <- new("SingleChoice",
prompt = "What is the percentage of 3/20?",
title = "SingleChoice",
choices = c("15%", "20%", "30%"),
choice_identifiers = "1",
identifier = "q2")
mc3 <- new("MultipleChoice",
identifier = "q3",
prompt = "3 + 4b = 15. What is the value of b in this equation?",
title = "MultipleChoice",
choices = c("3", "2", "5", "6/2"),
choice_identifiers = c("1", "2", "3", "4"),
points = c(1, 0, 0, 1)
)
order1 <- new("Order",
identifier = "q4",
title = "Order",
prompt = "Choose the correct order",
choices = c("Data collection", "Data cleansing",
"Data marking", "Verification and visualization"),
choices_identifiers = c("1", "2", "3", "4"),
points = 1
)
exam_section <- new("AssessmentSection",
identifier = "sec_id",
title = "section",
assessment_item = list(mc1, sc2, mc3, order1)
)
exam <- new("AssessmentTest",
identifier = "id_test",
academic_grading = TRUE,
section = list(exam_section)
)
example <- "
0
6
0
2.99
feedback_grade_50
3.00
3.29
feedback_grade_40
3.30
3.59
feedback_grade_37
3.60
3.89
feedback_grade_33
3.90
4.19
feedback_grade_30
4.20
4.49
feedback_grade_27
4.50
4.79
feedback_grade_23
4.80
5.09
feedback_grade_20
5.10
5.39
feedback_grade_17
5.40
5.69
feedback_grade_13
5.70
feedback_grade_10
0
feedback_grade_table
Grade 5.0
\n
Grade 4.0
\n \n \n Grade 3.7
Grade 3.3
Grade 3.0
Grade 2.7
Grade 2.3
Grade 2.0
Grade 1.7
Grade 1.3
Grade 1.0
Grade |
Min |
Max |
1.0 |
5.70 |
6.00 |
1.3 |
5.40 |
5.69 |
1.7 |
5.10 |
5.39 |
2.0 |
4.80 |
5.09 |
2.3 |
4.50 |
4.79 |
2.7 |
4.20 |
4.49 |
3.0 |
3.90 |
4.19 |
3.3 |
3.60 |
3.89 |
3.7 |
3.30 |
3.59 |
4.0 |
3.00 |
3.29 |
5.0 |
0.00 |
2.99 |
"
expected <- paste('', toString(create_assessment_test(exam, "to_delete")),'')
xml1 <- xml2::read_xml(expected)
xml2 <- xml2::read_xml(example)
expect_equal(xml1, xml2)
unlink("q1.xml", recursive = TRUE)
unlink("q2.xml", recursive = TRUE)
unlink("q3.xml", recursive = TRUE)
unlink("q4.xml", recursive = TRUE)
unlink("id_test.xml", recursive = TRUE)
unlink("id_test.zip", recursive = TRUE)
unlink("imsmanifest.xml", recursive = TRUE)
unlink("to_delete", recursive = TRUE)
})
test_that("Testing method createAssessmentTest for AssessmentTestOpal class", {
sc1 <- new("SingleChoice", prompt = "Test task", title = "SC",
identifier = "q1", choices = c("a", "b", "c"))
sc2 <- new("SingleChoice", prompt = "Test task", title = "SC",
identifier = "q2", choices = c("A", "B", "C"))
sc3 <- new("SingleChoice", prompt = "Test task", title = "SC",
identifier = "q3", choices = c("aa", "bb", "cc"))
e1 <- new("Essay", prompt = "Essay task", identifier = "e1")
e2 <- new("Essay", prompt = "Essay task", identifier = "e2")
e3 <- new("Essay", prompt = "Essay task", identifier = "e3")
exam_subsection <- new("AssessmentSection", identifier = "subsec_id",
title = "Subsection", assessment_item = list(e1, e2, e3),
shuffle = TRUE, selection = 2)
exam_section <- new("AssessmentSection", identifier = "sec_id",
title = "section",
assessment_item = list(sc1, sc2, sc3, exam_subsection),
max_attempts = 3, time_limit = 30, allow_comment = TRUE)
exam <- new("AssessmentTestOpal", identifier = "id_test",
title = "some title", section = list(exam_section),
files = c(test_path("file/test_fig1.jpg"),
test_path("file/test_fig2.jpg")),
max_attempts = 5, time_limit = 100, allow_comment = TRUE,
rebuild_variables = TRUE,
show_test_time = TRUE, calculator = "simple-calculator",
keep_responses = TRUE
)
suppressMessages(createQtiTest(exam, "test1a9b56cf96", "TRUE"))
sut <- sort(list.files("test1a9b56cf96"))
expected <- sort(c("downloads", "e1.xml", "e2.xml", "e3.xml", "q1.xml", "q2.xml", "q3.xml",
"id_test.xml", "id_test.zip", "imsmanifest.xml"))
expect_equal(sut, expected)
unlink("test1a9b56cf96", recursive = TRUE)
})
test_that("Testing method createAssessmentTest for AssessmentTest class", {
sc1 <- new("SingleChoice", prompt = "Test task", title = "SC",
identifier = "q1", choices = c("a", "b", "c"))
sc2 <- new("SingleChoice", prompt = "Test task", title = "SC",
identifier = "q2", choices = c("A", "B", "C"))
sc3 <- new("SingleChoice", prompt = "Test task", title = "SC",
identifier = "q3", choices = c("aa", "bb", "cc"))
e1 <- new("Essay", prompt = "Essay task", identifier = "e1")
e2 <- new("Essay", prompt = "Essay task", identifier = "e2")
e3 <- new("Essay", prompt = "Essay task", identifier = "e3")
exam_subsection <- new("AssessmentSection", identifier = "subsec_id",
title = "Subsection",
assessment_item = list(e1, e2, e3),
shuffle = TRUE, selection = 2)
exam_section <- new("AssessmentSection", identifier = "sec_id",
title = "section",
assessment_item = list(sc1, sc2, sc3, exam_subsection),
max_attempts = 3, time_limit = 30,
allow_comment = TRUE)
exam <- new("AssessmentTest", identifier = "id_test",
title = "some title", section = list(exam_section),
max_attempts = 5, time_limit = 100, allow_comment = TRUE,
rebuild_variables = TRUE
)
# Testing AssessmentTest
suppressMessages(createQtiTest(exam, "todelete", "TRUE"))
sut <- xml2::read_xml(suppressMessages(toString(createAssessmentTest(
object = exam, folder = getwd()))))
expected <- xml2::read_xml("todelete/id_test.xml")
expect_equal(sut, expected)
file.remove("e1.xml")
file.remove("e2.xml")
file.remove("e3.xml")
file.remove("q1.xml")
file.remove("q2.xml")
file.remove("q3.xml")
unlink("todelete", recursive = TRUE)
})
test_that("Testing of AssessmentSection class that contains
non-unique identifiers of AssessmentItem class", {
mc1 <- new("MultipleChoice",
identifier = "theSame", prompt = "What does 3/4 + 1/4 = ?",
title = "MultipleChoice",
choices = c("1", "4/8", "8/4", "4/4"),
choice_identifiers = c("1", "2", "3", "4"),
points = c(1, 0, 0, 1))
sc2 <- new("SingleChoice",
prompt = "What is the percentage of 3/20?",
title = "SingleChoice",
choices = c("15%", "20%", "30%"),
choice_identifiers = "1",
identifier = "theSame")
expect_error({
new("AssessmentSection",
identifier = "sec_id",
title = "section",
assessment_item = list(mc1, sc2)
)
}, "Items of section id:sec_id contain non-unique values: theSame, theSame")
})
test_that("Testing of AssessmentTest class that contains non-unique identifiers
of AssessmentSection", {
mc1 <- new("MultipleChoice",
identifier = "theSame", prompt = "What does 3/4 + 1/4 = ?",
title = "MultipleChoice",
choices = c("1", "4/8", "8/4", "4/4"),
choice_identifiers = c("1", "2", "3", "4"),
points = c(1, 0, 0, 1))
sc2 <- new("SingleChoice",
prompt = "What is the percentage of 3/20?",
title = "SingleChoice",
choices = c("15%", "20%", "30%"),
choice_identifiers = "1",
identifier = "theSame")
section1 <- new("AssessmentSection",
identifier = "sec_id",
title = "section",
assessment_item = list(mc1))
section2 <- new("AssessmentSection",
identifier = "sec_id",
title = "section",
assessment_item = list(sc2))
expect_warning({ exam <- new("AssessmentTest",
identifier = "id_test",
title = "some title",
section = list(section1, section2))
}, "Identifiers of test sections contain non-unique values: sec_id, theSame, sec_id, theSame")
})
test_that("Testing of time_limits in AssessmentTest class", {
mc1 <- new("MultipleChoice",
identifier = "theSame", prompt = "What does 3/4 + 1/4 = ?",
title = "MultipleChoice",
choices = c("1", "4/8", "8/4", "4/4"),
choice_identifiers = c("1", "2", "3", "4"),
points = c(1, 0, 0, 1))
section <- new("AssessmentSection",
identifier = "sec_id",
title = "section",
assessment_item = list(mc1))
expect_warning({
exam <- new("AssessmentTest",
identifier = "id_test",
title = "some title",
time_limit = 190,
section = list(section))
}, "Value of time_limits does not seem plausible.")
})
test_that("Testing getPoints() method in case the point of Task
in XML file is not defined", {
path <- test_path("file/xml/Essay_without_Maxscore_Minscore.xml")
sut_points <- getPoints(path)
expect_equal(sut_points, 1)
})
test_that("Testing getPoints() method in case of XML file does not exist", {
path <- test_path("file/test.xml")
expect_warning({
sut_points <- suppressMessages(getPoints(path))
}, "file file/test.xml does not exist")
})
test_that("Testing getIdentifier() method in case of XML file does not exist", {
path <- test_path("file/test.xml")
expect_warning({
sut_points <- getIdentifier(path)
}, "file file/test.xml does not exist")
})
test_that("Testing a specific attribute 'files' in yaml section of Rmd file",
{
tpath <- "file/test_rmd_files"
path <- test_path("file/test_rmd_files/test_DirectedPair_from_table.Rmd")
exam_section <- suppressMessages(section(path))
fls <- exam_section@assessment_item[[1]]@files
fls <- sapply(fls, function(x) test_path(tpath, x))
exam_section@assessment_item[[1]]@files <- fls
exam <- new("AssessmentTestOpal",
identifier = "id_test",
section = list(exam_section))
expected <- c(test_path(tpath, "test_fig2.jpg"),
test_path(tpath, "test_fig1.jpg"),
test_path(tpath, "statistics.csv"))
expect_equal(exam@files, expected)
})