source("utils.R")

get_wml_node <- function(x){
  xml_ <- to_wml(x)
  read_xml( wml_str(xml_) )
}
get_pml_node <- function(x){
  xml_ <- pml_str(to_pml(x))
  read_xml( xml_ )
}

test_that("fpar content", {
  fp <- fpar(
    ftext("toto", shortcuts$fp_bold()),
    ftext("titi", shortcuts$fp_italic())
    )
  fp <- fpar( ftext("toto", fp_text(font.size = 9)), "titi" )
  fp <- update(fp, fp_t = fp_text(bold = TRUE, font.size = 9))
  df <- as.data.frame(fp)
  expect_equal(df$value, c("toto", "titi") )
  expect_equal(df$size, c(9, 9) )
  expect_equal(df$bold, c(FALSE, TRUE) )
  expect_equal(df$italic, c(FALSE, FALSE) )
})


test_that("fpar wml", {
  fp <- fpar(
    ftext("toto", shortcuts$fp_bold()),
    ftext("titi", shortcuts$fp_italic())
  )
  node <- get_wml_node(fp)

  expect_equal(xml_text(node), "tototiti")
  expect_equal(xml_text(xml_find_all(node, "//w:r/w:t")), c("toto", "titi") )
  val <- xml_attr(xml_find_all(node, "//w:pPr/w:jc"), "val")
  expect_equal(val, "left")

  fp <- update(fp, fp_p = fp_par(text.align = "center"))
  node <- get_wml_node(fp)
  val <- xml_find_all(node, "//w:pPr/w:jc")
  val <- xml_attr(val, "val")
  expect_equal(val, "center")

  fp <- fpar(
    ftext("pi", fp_text()),
    ftext(" = ", fp_text(italic = TRUE)),
    pi
  )
  fp <- update(fp, fp_t = fp_text(bold = TRUE))
  node <- get_wml_node(fp)
  italic <- xml_find_all(node, "//w:r/w:rPr")
  italic <- xml_child(italic, "w:i")
  italic <- xml_attr(italic, "val") %in% "true"

  bold <- xml_find_all(node, "//w:r/w:rPr")
  bold <- xml_child(bold, "w:b")
  bold <- xml_attr(bold, "val") %in% "true"

  expect_equal(italic, c(FALSE, TRUE, FALSE) )
  expect_equal(bold, c(FALSE, FALSE, TRUE) )
})



test_that("fpar pml", {
  fp <- fpar(
    ftext("toto", shortcuts$fp_bold()),
    ftext("titi", shortcuts$fp_italic())
  )
  node <- get_pml_node(fp)

  expect_equal(xml_text(node), "tototiti")
  expect_equal(xml_text(xml_find_all(node, "//a:r/a:t")), c("toto", "titi") )
  expect_equal(xml_attr(xml_find_all(node, "//a:r/a:rPr"), "b"), c("1", "0") )
  expect_equal(xml_attr(xml_find_all(node, "//a:r/a:rPr"), "i"), c("0", "1") )
  val <- xml_attr(xml_find_all(node, "//a:p/a:pPr"), "algn")
  expect_equal(val, "l")


  fp <- update(fp, fp_p = fp_par(text.align = "center"))
  node <- get_pml_node(fp)
  val <- xml_attr(xml_find_all(node, "//a:p/a:pPr"), "algn")
  expect_equal(val, "ctr")
})



test_that("fpar css", {
  fp <- fpar(
    ftext("toto", shortcuts$fp_bold()),
    ftext("titi", shortcuts$fp_italic())
  )
  node <- read_xml( to_html(fp) )

  expect_equal(xml_text(node), "tototiti")
  expect_equal(xml_text(xml_find_all(node, "//span")), c("toto", "titi") )
  bold <- xml_attr(xml_find_all(node, "//span"), "style")
  bold <- has_css_attr(bold, atname = "font-weight", value = "bold")
  expect_equal(bold, c(TRUE, FALSE) )

  italic <- xml_attr(xml_find_all(node, "//span"), "style")
  italic <- has_css_attr(italic, atname = "font-style", value = "italic")
  expect_equal(italic, c(FALSE, TRUE) )

  val <- xml_attr(xml_find_all(node, "//p"), "style")
  val <- has_css_attr(val, atname = "text-align", value = "left")
  expect_true(val)


  fp <- update(fp, fp_p = fp_par(text.align = "center"))
  node <- read_xml( to_html(fp) )
  val <- xml_attr(xml_find_all(node, "//p"), "style")
  val <- has_css_attr(val, atname = "text-align", value = "center")
  expect_true(val)
})

