tests/testthat/test-linechart.R

test_that("linechart smooth settings are correctly applied", {
  dat <- data.frame(
    color = c(rep("green", 3), rep("unclear", 3), rep("gray", 3)),
    musician = c(rep(c("Robert Wyatt", "John Zorn", "Damon Albarn"), 3)),
    count = c(120, 101, 131, 200, 154, 187, 122, 197, 159),
    stringsAsFactors = FALSE
  )

  chart_01 <- ms_linechart(
    data = dat,
    x = "musician",
    y = "count",
    group = "color"
  )

  settings <- c(green = 1L, unclear = 0L, gray = 0L)
  settings <- settings[order(names(settings))]
  chart_01 <- chart_data_smooth(chart_01, values = settings)

  xml <- format(
    chart_01,
    sheetname = "sheet1",
    id_x = "64451212",
    id_y = "64453248"
  )

  chart <- xml2::read_xml(xml)
  serie_names <- xml2::xml_find_all(
    chart,
    "//c:ser/c:tx/c:strRef/c:strCache/c:pt/c:v"
  )
  serie_names <- xml2::xml_text(serie_names)
  smooth_data <- xml2::xml_find_all(chart, "//c:smooth")
  smooth_data <- as.integer(xml2::xml_attr(smooth_data, "val"))
  names(smooth_data) <- serie_names
  smooth_data <- smooth_data[order(names(smooth_data))]

  expect_equal(settings, smooth_data, ignore_attr = TRUE)
})

test_that("linechart style=none produces noFill XML", {
  dat <- data.frame(
    color = c(rep("green", 3), rep("unclear", 3), rep("gray", 3)),
    musician = c(rep(c("Robert Wyatt", "John Zorn", "Damon Albarn"), 3)),
    count = c(120, 101, 131, 200, 154, 187, 122, 197, 159),
    stringsAsFactors = FALSE
  )

  lty <- c(green = "none", unclear = "solid", gray = "dotted")
  lty <- lty[order(names(lty))]

  chart_02 <- ms_linechart(
    data = dat,
    x = "musician",
    y = "count",
    group = "color"
  )
  chart_02 <- chart_data_line_style(chart_02, values = lty)

  xml <- format(
    chart_02,
    sheetname = "sheet1",
    id_x = "64451212",
    id_y = "64453248"
  )

  chart <- xml2::read_xml(xml)

  # "none" → noFill, others → solidFill
  lookup_fill <- c(none = "noFill", solid = "solidFill", dotted = "solidFill")
  node_fill <- xml2::xml_find_all(
    chart,
    "//c:ser/c:spPr/a:ln/a:noFill|//c:ser/c:spPr/a:ln/a:solidFill"
  )
  node_fill <- xml2::xml_name(node_fill)
  expect_equal(node_fill, unname(lookup_fill[lty]))

  # prstDash: absent for "none", correct val for others
  lines <- xml2::xml_find_all(chart, "//c:ser/c:spPr/a:ln")
  lookup_lty <- c(none = NA_character_, solid = "solid", dotted = "sysDot")
  attr_lty <- vapply(
    lines,
    function(x) xml2::xml_attr(xml2::xml_find_first(x, "a:prstDash"), "val"),
    FUN.VALUE = character(1)
  )
  expect_equal(attr_lty, unname(lookup_lty[lty]))
})

Try the mschart package in your browser

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

mschart documentation built on May 17, 2026, 1:09 a.m.