tests/testthat/test09_new_config_fwf.R

test_that("'new_file_definition_fwf()' works for fwf", {
  mockup_struc <- mockup_file_structures[[1]]$struc %>%
    `[[<-`("specification_files", c("R:/a.pdf", "R:/b.pdf"))
  file_definition <- do.call(
    new_file_definition_fwf,
    args = mockup_new_file_structure_fwf_args(
      mockup_struc,
      file_path = "test"
    )
  )
  file_definition_comp <- structure(
    list(
      specification_files = c("R:/a.pdf", "R:/b.pdf"),
      col_names = mockup_struc$col_names,
      col_types = mockup_struc$col_types,
      col_start = mockup_struc$col_start,
      col_end = NULL,
      col_widths = NULL,
      file_meta = new_file_meta(
        new_col_meta(
          desc = "b1",
          values = 1:2,
          values_desc = c("b11", "b12")
        ),
        new_col_meta(
          values = c(NA, 2),
          values_desc = c("b11", NA)
        ),
        new_col_meta(
          desc = "b3",
          values_desc = c("b11", "b12")
        ),
        new_col_meta(
          desc = "b4",
          values = 1:2
        ),
        new_col_meta(
          desc = "b5"
        )
      ),
      sep_width = 0,
      skip_rows = 0,
      na = "",
      decimal_mark = ".",
      big_mark = ",",
      trim_ws = TRUE,
      n_max = Inf,
      encoding = "latin1",
      to_lower = TRUE,
      adapters = new_adapters(),
      file_path = "test",
      cols_keep = TRUE,
      extra_col_name = NULL,
      extra_col_val = NULL,
      extra_col_file_path = FALSE
    ),
    class = c("file_definition_fwf", "file_definition", "file_structure_fwf", "file_structure")
  )
  expect_class_objects_equal(file_definition, file_definition_comp)
  df_meta <- get_meta(file_definition)
  expect_dataframe_equal(
    df_meta,
    data.frame(
      col_name = c(rep(paste0("x", 1:4), each = 2), "x5"),
      col_id = c(rep(1:4, each = 2), 5),
      col_type = c(
        rep(c("numeric", "character", "logical", "NULL"), each = 2),
        "integer"
      ),
      col_desc = c("b1", "b1", rep(NA, 2), "b3", "b3", "b4", "b4", "b5"),
      col_values = c(1, 2, NA, 2, NA, NA, 1, 2, NA) %>% as.character,
      col_values_desc = c("b11", "b12", "b11", NA, "b11", "b12", NA, NA, NA),
      col_valid_start = rep(NA_character_, 9),
      col_valid_end = rep(NA_character_, 9)
    )
  )
  df_meta <- get_meta(file_definition, cols = c(2, 3))
  expect_dataframe_equal(
    df_meta,
    data.frame(
      col_name = c("x2", "x2", "x3", "x3"),
      col_id = c(2, 2, 3, 3),
      col_type = rep(c("character", "logical"), each = 2),
      col_desc = c(rep(NA, 2), "b3", "b3"),
      col_values = c(NA, 2, NA, NA) %>% as.character,
      col_values_desc = c("b11", NA, "b11", "b12"),
      col_valid_start = rep(NA_character_, 4),
      col_valid_end = rep(NA_character_, 4)
    )
  )
})

test_that("'new_file_definition_fwf()' works for special case", {
  mockup_struc <- mockup_file_structures[[2]]$struc
  file_definition <- do.call(
    new_file_definition_fwf,
    args = mockup_new_file_structure_fwf_args(
      mockup_struc,
      use_cols = FALSE,
      file_path = "test",
      cols_keep = c("a", "b"),
      extra_col_name = "x",
      extra_col_val = "val",
      extra_col_file_path = "y"
    ) %>%
      `[[<-`("adapters", new_adapters(sin, cos))
  )
  file_definition_comp <- structure(
    list(
      specification_files = NULL,
      col_names = mockup_struc$col_names,
      col_types = mockup_struc$col_types,
      col_start = mockup_struc$col_start,
      col_end = NULL,
      col_widths = NULL,
      file_meta = new_file_meta(
        new_col_meta(
          desc = "b1",
          values = 1:2,
          values_desc = c("b11", "b12")
        ),
        new_col_meta(
          values = c(NA, 2),
          values_desc = c("b11", NA)
        ),
        new_col_meta(
          desc = "b3",
          values_desc = c("b11", "b12")
        ),
        new_col_meta(
          desc = "b4",
          values = 1:2
        ),
        new_col_meta(
          desc = "b5"
        )
      ),
      sep_width = 1,
      skip_rows = 1,
      na = "na",
      decimal_mark = ",",
      big_mark = ".",
      trim_ws = TRUE,
      n_max = Inf,
      encoding = "latin1",
      to_lower = TRUE,
      adapters = new_adapters(sin, cos),
      file_path = "test",
      cols_keep = c("a", "b"),
      extra_col_name = "x",
      extra_col_val = "val",
      extra_col_file_path = "y"
    ),
    class = c("file_definition_fwf", "file_definition", "file_structure_fwf", "file_structure")
  )
  expect_class_objects_equal(file_definition, file_definition_comp)
  df_meta <- get_meta(file_definition)
  expect_dataframe_equal(
    df_meta,
    data.frame(
      col_name = c(rep(paste0("b", 1:4), each = 2), "b5"),
      col_id = c(rep(1:4, each = 2), 5),
      col_type = c(
        rep(c("numeric", "character", "logical", "NULL"), each = 2),
        "integer"
      ),
      col_desc = c("b1", "b1", rep(NA, 2), "b3", "b3", "b4", "b4", "b5"),
      col_values = c(1, 2, NA, 2, NA, NA, 1, 2, NA) %>% as.character,
      col_values_desc = c("b11", "b12", "b11", NA, "b11", "b12", NA, NA, NA),
      col_valid_start = rep(NA_character_, 9),
      col_valid_end = rep(NA_character_, 9)
    )
  )
  df_meta <- get_meta(file_definition, cols = c(2, 3))
  expect_dataframe_equal(
    df_meta,
    data.frame(
      col_name = c("b2", "b2", "b3", "b3"),
      col_id = c(2, 2, 3, 3),
      col_type = rep(c("character", "logical"), each = 2),
      col_desc = c(rep(NA, 2), "b3", "b3"),
      col_values = c(NA, 2, NA, NA) %>% as.character,
      col_values_desc = c("b11", NA, "b11", "b12"),
      col_valid_start = rep(NA_character_, 4),
      col_valid_end = rep(NA_character_, 4)
    )
  )
})
a-maldet/readall documentation built on Dec. 18, 2021, 9:23 p.m.