Add unit tests
Change-Id: Ic8ad5c8fc6a14d6220bc049400c440bb91732e9e
diff --git a/DESCRIPTION b/DESCRIPTION
index e227ebb..30530fe 100644
--- a/DESCRIPTION
+++ b/DESCRIPTION
@@ -45,6 +45,7 @@
utils,
httr,
methods,
+ testthat,
PTXQC
Collate:
'KorAPConnection.R'
diff --git a/tests/testthat.R b/tests/testthat.R
new file mode 100644
index 0000000..992d351
--- /dev/null
+++ b/tests/testthat.R
@@ -0,0 +1,4 @@
+library("testthat")
+library("RKorAPClient")
+
+test_check("RKorAPClient")
diff --git a/tests/testthat/test-KorAPConnection.R b/tests/testthat/test-KorAPConnection.R
new file mode 100644
index 0000000..883b10c
--- /dev/null
+++ b/tests/testthat/test-KorAPConnection.R
@@ -0,0 +1,29 @@
+test_that("KorAPConnection is printable", {
+ kco <- new("KorAPConnection")
+ expect_error(print(kco), NA)
+})
+
+test_that("KorAPConnection without access token prints ToS message", {
+ expect_message(new("KorAPConnection", accessToken = NULL),
+ ".*By using.*non-commercial.*purposes", perl = TRUE)
+})
+
+test_that("Opening KorAPConnection with apiToken works", {
+ kco <- new("KorAPConnection", accessToken="test token")
+ persistAccessToken(kco)
+ kco <- new("KorAPConnection")
+ expect_equal(kco@accessToken, "test token")
+ clearAccessToken(kco)
+ kco <- new("KorAPConnection")
+ expect_null(kco@accessToken)
+ expect_error(persistAccessToken(kco),
+ ".*not supplied any access token.*",
+ perl = TRUE)
+})
+
+test_that("Opening KorAPConnection with KorAPUrl works", {
+ kco <- new("KorAPConnection", KorAPUrl="https://korap.ids-mannheim.de")
+ expect_equal(kco@apiUrl, paste0("https://korap.ids-mannheim.de/api/", kco@apiVersion, "/"))
+ kco <- new("KorAPConnection", KorAPUrl="https://korap.ids-mannheim.de/")
+ expect_equal(kco@apiUrl, paste0("https://korap.ids-mannheim.de/api/", kco@apiVersion, "/"))
+})
diff --git a/tests/testthat/test-corpusQuery.R b/tests/testthat/test-corpusQuery.R
new file mode 100644
index 0000000..ab97765
--- /dev/null
+++ b/tests/testthat/test-corpusQuery.R
@@ -0,0 +1,44 @@
+test_that("corpusQuery returns results", {
+ q <- new("KorAPConnection") %>%
+ corpusQuery("Ameisenplage")
+ expect_gt(q@totalResults, 0)
+})
+
+test_that("fetchAll fetches all results", {
+ q <- new("KorAPConnection", verbose = TRUE) %>%
+ corpusQuery("Ameisenplage", vc = "pubDate since 2014")
+ expectedResults <- q@totalResults
+ matches <- fetchAll(q)@collectedMatches
+ expect_equal(nrow(matches), expectedResults)
+})
+
+test_that("Uncached query for non-matching search string return 0 results", {
+ q <- new("KorAPConnection", cache = FALSE) %>% corpusQuery("Xmeisenplagx")
+ expect_equal( q@totalResults, 0)
+})
+
+test_that("Empty query result is printable", {
+ q <- new("KorAPConnection", cache = TRUE, verbose = TRUE) %>%
+ corpusQuery("Xmeisenplagx", vc = "pubDate in 2012") %>%
+ fetchNext()
+ expect_output(print(q), "Xmeisenplagx.*pubDate in 2012")
+})
+
+test_that("Non-empty query result is printable", {
+ q <- new("KorAPConnection", cache = TRUE, verbose = TRUE) %>%
+ corpusQuery("Ameisenplage", "pubDate since 2014", fields=c("sigle")) %>%
+ fetchRest()
+ expect_output(print(q), "Ameisenplage.*pubDate since 2014")
+})
+
+test_that("Query from KorAP URL returns as many results as corresponding direct query", {
+ kco <- new("KorAPConnection")
+ r1 <- corpusQuery(kco, KorAPUrl = "https://korap.ids-mannheim.de/?q=Ameisenplage&cq=pubDate+since+2014&ql=poliqarp")@totalResults
+ r2 <- corpusQuery(kco, "Ameisenplage", "pubDate since 2014")@totalResults
+ expect_equal(r1, r2)
+})
+
+test_that("Typo in query causes error", {
+ kco <- new("KorAPConnection", verbose = TRUE)
+ expect_error(kco %>% corpusQuery("[[xx"), "unbalanced")
+})
diff --git a/tests/testthat/test-corpusStats.R b/tests/testthat/test-corpusStats.R
new file mode 100644
index 0000000..8143886
--- /dev/null
+++ b/tests/testthat/test-corpusStats.R
@@ -0,0 +1,17 @@
+test_that("corpusStats works", {
+ stats <- new("KorAPConnection") %>% corpusStats()
+ expect_gt(stats@tokens, 0)
+ expect_gt(stats@paragraphs, 0)
+ expect_gt(stats@documents, 0)
+})
+
+
+test_that("Printing corpusStats for the whole corpus works", {
+ stats <- new("KorAPConnection") %>% corpusStats()
+ expect_error(print(stats), NA)
+})
+
+test_that("Printing corpusStats for a sub-corpus works", {
+ stats <- new("KorAPConnection") %>% corpusStats("pubDate in 2018")
+ expect_error(print(stats), NA)
+})
diff --git a/tests/testthat/test-demos.R b/tests/testthat/test-demos.R
new file mode 100644
index 0000000..1269760
--- /dev/null
+++ b/tests/testthat/test-demos.R
@@ -0,0 +1,143 @@
+test_that("Alternatives over time highcharter example works", {
+ year <- c(1990:2018)
+ alternatives <- c("macht []{0,3} Sinn", "ergibt []{0,3} Sinn")
+
+ hc <- new("KorAPConnection", verbose = TRUE) %>%
+ frequencyQuery(
+ query = alternatives,
+ vc = paste("textType = /Zeit.*/ & pubDate in", year),
+ as.alternatives = TRUE
+ ) %>%
+ hc_freq_by_year_ci(as.alternatives = TRUE)
+ expect_true(all(class(hc) %in% c("highchart", "htmlwidget")))
+})
+
+test_that("Multiple queries over time highcharter example works", {
+ year <- c(2013:2018)
+ alternatives <- c("macht []{0,3} Sinn", "ergibt []{0,3} Sinn")
+
+ hc <- new("KorAPConnection", verbose = TRUE) %>%
+ frequencyQuery(
+ query = alternatives,
+ vc = paste("textType = /Zeit.*/ & pubDate in", year),
+ as.alternatives = FALSE
+ ) %>%
+ hc_freq_by_year_ci(as.alternatives = FALSE)
+ expect_true(all(class(hc) %in% c("highchart", "htmlwidget")))
+})
+
+test_that("Single query in multiple over time highcharter example works", {
+ year <- c(2013:2018)
+ alternatives <- c("macht []{0,3} Sinn", "ergibt []{0,3} Sinn")
+
+ hc <- new("KorAPConnection", verbose = TRUE) %>%
+ frequencyQuery(
+ query = alternatives,
+ vc = paste("textType = /Zeit.*/ & pubDate in", year),
+ as.alternatives = FALSE
+ ) %>%
+ hc_freq_by_year_ci(as.alternatives = FALSE)
+ expect_true(all(class(hc) %in% c("highchart", "htmlwidget")))
+})
+
+test_that("Single query over time highcharter example works", {
+ year <- c(2013:2018)
+ q <- c("macht []{0,3} Sinn")
+
+ hc <- new("KorAPConnection", verbose = TRUE) %>%
+ frequencyQuery(
+ query = q,
+ vc = paste("textType = /Zeit.*/ & pubDate in", year),
+ as.alternatives = FALSE
+ ) %>%
+ hc_freq_by_year_ci(as.alternatives = FALSE)
+ expect_true(all(class(hc) %in% c("highchart", "htmlwidget")))
+})
+
+test_that("Auto conditions over time highcharter example works", {
+ kco <- new("KorAPConnection", verbose=TRUE)
+ hc <- expand_grid(
+ myconditions = c("textDomain = /Wirtschaft.*/",
+ "textDomain != /Wirtschaft.*/"),
+ year = (2009:2013)
+ ) %>%
+ cbind(frequencyQuery(
+ kco,
+ c("[tt/l=Heuschrecke]", "Ameise"),
+ paste(.$myconditions, "& pubDate in", .$year)
+ )) %>%
+ hc_freq_by_year_ci()
+ expect_true(all(class(hc) %in% c("highchart", "htmlwidget")))
+})
+
+test_that("Single condition over time highcharter example works", {
+ kco <- new("KorAPConnection", verbose=TRUE)
+ hc <- expand_grid(
+ condition = c("textDomain = /Wirtschaft.*/"),
+ year = (2009:2013)
+ ) %>%
+ cbind(frequencyQuery(
+ kco,
+ c("[tt/l=Heuschrecke]", "Ameise"),
+ paste(.$condition, "& pubDate in", .$year),
+ )) %>%
+ hc_freq_by_year_ci()
+ expect_true(all(class(hc) %in% c("highchart", "htmlwidget")))
+})
+
+test_that("Multiple conditions over time highcharter example works", {
+ kco <- new("KorAPConnection", verbose=TRUE)
+ hc <- expand_grid(
+ condition = c("textDomain = /Wirtschaft.*/",
+ "textDomain != /Wirtschaft.*/"),
+ year = (2009:2013)
+ ) %>%
+ cbind(frequencyQuery(
+ kco,
+ c("[tt/l=Heuschrecke]", "Ameise"),
+ paste(.$condition, "& pubDate in", .$year),
+ )) %>%
+ hc_freq_by_year_ci()
+ expect_true(all(class(hc) %in% c("highchart", "htmlwidget")))
+})
+
+test_that("Multiple conditions and queries over time highcharter example works", {
+ kco <- new("KorAPConnection", verbose=TRUE)
+ hc <- expand_grid(
+ qx = c("[tt/l=Heuschrecke]", "Ameise"),
+ condition = c("textDomain = /Wirtschaft.*/",
+ "textDomain != /Wirtschaft.*/"),
+ year = (2009:2013)
+ ) %>%
+ cbind(frequencyQuery(
+ kco,
+ .$qx,
+ paste(.$condition, "& pubDate in", .$year),
+ )) %>%
+ hc_freq_by_year_ci()
+ expect_true(all(class(hc) %in% c("highchart", "htmlwidget")))
+})
+
+test_that("Conditions over time ggplotly example works", {
+ kco <- new("KorAPConnection")
+ p <- expand_grid(
+ condition = c("textDomain = /Wirtschaft.*/",
+ "textDomain != /Wirtschaft.*/"),
+ year = (2009:2013)
+ ) %>%
+ cbind(frequencyQuery(
+ kco,
+ "[tt/l=Heuschrecke]",
+ paste(.$condition, "& pubDate in", .$year)
+ )) %>%
+ ipm() %>%
+ ggplot(aes(
+ x = year,
+ y = ipm,
+ fill = condition,
+ colour = condition
+ )) +
+ geom_freq_by_year_ci()
+ pp <- ggplotly(p)
+ expect_error(print(pp), NA)
+})