tests/testthat/test-kanjivec.R

test_that("construct well-formed single kanjivec object", {
  skip_on_cran() # not automatically done, since not a snapshot test, but one which is rather flaky
  expect_equal( kanjivec(kanji = "藤", database="_data_and_more_snaps/", flatten="intelligent",
                         bezier_discr="svgparser", simplify=TRUE), 
                kanjivec_ref_fuji, ignore_attr = c("call", "kanjistat_version") ) 
  # res <- kanjivec(kanji = "藤", flatten="intelligent", simplify=TRUE)
  # saveRDS(res, "kanjivec_ref_fuji.rds")
  # kanjivec_ref_fuji is readRDS'ed in helper.R
  # with this kanji flattening for leaf children is also tested (parents g7 and g8),
  # but flattening of inner node children does not occur
})


test_that("construct well-formed list of multiple kanjivec objects", {
  skip_on_cran() # not automatically done, since not a snapshot test, but one which is rather flaky
  currentlist <- kanjivec(kanji = "藤藤藤", database="_data_and_more_snaps/", flatten="intelligent",
                          bezier_discr="svgparser", simplify=TRUE)
    # should still give list of length 3
  expect_type(currentlist, "list")
  expect_length(currentlist, 3)
  
  classes_ref <- rep("kanjivec", 3)
  attr(classes_ref, "names") <- c("kvec085e4", "kvec085e4", "kvec085e4") # these are from the right codepoints
  expect_equal( sapply(currentlist, class), classes_ref )
  
  expect_equal(currentlist[[2]] , kanjivec_ref_fuji,
               ignore_attr = c("call", "kanjistat_version") )
  # kanjimat_ref_fuji is readRDS'ed in helper.R
  # we bluntly exclude call here, otherwise diff
  # "kanjimat(kanji = \"鶏処藤\", family = \"wqy-microhei\", size = 64)" (actual)
  # "kanjimat(kanji = \"藤\", family = \"wqy-microhei\", size = 64)"  (expected)
})


test_that("stroketree and strokedend produced with various options of flatten in kanjivec", {
  skip_on_cran() # not automatically done, since not a snapshot test, but one which is rather flaky
  current_all <- kanjivec(kanji = "郵", database="_data_and_more_snaps/", flatten=TRUE, bezier_discr="svgparser", simplify=TRUE)
  current_inner <- kanjivec(kanji = "郵", database="_data_and_more_snaps/", flatten="inner", bezier_discr="svgparser", simplify=TRUE)
  current_outer <- kanjivec(kanji = "郵", database="_data_and_more_snaps/", flatten="leaves", bezier_discr="svgparser", simplify=TRUE)
  current_none <- kanjivec(kanji = "郵", database="_data_and_more_snaps/", flatten=FALSE, bezier_discr="svgparser", simplify=TRUE)
  # stroketrees
  expect_equal( current_all$stroketree, treedend_ref_yuumail$stroketree_all)
  expect_equal( current_inner$stroketree, treedend_ref_yuumail$stroketree_inner)
  expect_equal( current_outer$stroketree, treedend_ref_yuumail$stroketree_outer)
  expect_equal( current_none$stroketree, treedend_ref_yuumail$stroketree_none)
  # strokedends
  expect_equal( current_all$strokedend, treedend_ref_yuumail$strokedend_all)
  expect_equal( current_inner$strokedend, treedend_ref_yuumail$strokedend_inner)
  expect_equal( current_outer$strokedend, treedend_ref_yuumail$strokedend_outer)
  expect_equal( current_none$strokedend, treedend_ref_yuumail$strokedend_none)
})
# yuumail <- list()
# fall <- kanjivec(kanji = "郵", flatten=TRUE, save=FALSE, simplify=TRUE)
# finner <- kanjivec(kanji = "郵", flatten="inner", save=FALSE, simplify=TRUE)
# fouter <- kanjivec(kanji = "郵", flatten="leaves", save=FALSE, simplify=TRUE)
# fnone <- kanjivec(kanji = "郵", flatten=FALSE, save=FALSE, simplify=TRUE)
# yuumail$stroketree_all <- fall$stroketree
# yuumail$strokedend_all <- fall$strokedend
# yuumail$stroketree_inner <- finner$stroketree
# yuumail$strokedend_inner <- finner$strokedend
# yuumail$stroketree_outer <- fouter$stroketree
# yuumail$strokedend_outer <- fouter$strokedend
# yuumail$stroketree_none <- fnone$stroketree
# yuumail$strokedend_none <- fnone$strokedend
# saveRDS(yuumail, file="kanjivec_flatten_ref_yuumail.rds")
# plot(fnone, type="dend", family="hiragino_sans")
# str(fnone$stroketree)
# str(fnone$strokedend)
# plot(finner, type="dend", family="hiragino_sans")
# str(finner$stroketree)
# str(finner$strokedend)
# plot(fouter, type="dend", family="hiragino_sans")
# str(fouter$stroketree)
# str(fouter$strokedend)
# plot(fall, type="dend", family="hiragino_sans")
# str(fall$stroketree)
# str(fall$strokedend)


test_that("plot kanjivec object, type kanji", {
  skip_on_cran()
  skip_on_ci()
  skip_if_not(capabilities("cairo"))
  kanjivec_kanji_to_jpg <- function(kanji) {
    path <- tempfile("fuji_kanji", fileext = ".jpg")
    jpeg(path, width = 480, height = 480)
    par(mai=rep(0.05,4))
    plot(kanji, type = "kanji", seg_depth = 4)
    dev.off()
    return(path)
  }
  expect_snapshot_file( kanjivec_kanji_to_jpg(kanjivec_ref_fuji), "fuji_kanji.jpg" )
})

test_that("plot kanjivec object, type dend", {
  skip_on_cran()
  skip_on_ci()
  skip_on_os("windows")
  skip_if_not(capabilities("cairo"))
  kanjivec_dend_to_jpg <- function(kanji) {
    path <- tempfile("fuji_dend", fileext = ".jpg")
    jpeg(path, width = 480, height = 480)
    par(mai=rep(0.05,4))
    plot(kanji, type = "dend", family = "wqy-microhei")
    dev.off()
    return(path)
  }
  expect_snapshot_file( kanjivec_dend_to_jpg(kanjivec_ref_fuji), "fuji_dend.jpg" )
})


test_that("print kanjivec object", {
  withr::local_options(width = 68)
  expect_snapshot( print(kanjivec_ref_fuji) )
})


test_that("str for kanjivec object", {
  withr::local_options(width = 68)
  expect_snapshot( str(kanjivec_ref_fuji) )
})

# stroketree_to_dend and plotdend are "implicitly tested" by the tests for kanjivec and plot.kanjivec

Try the kanjistat package in your browser

Any scripts or data that you put into this service are public.

kanjistat documentation built on June 22, 2024, 10:35 a.m.