tests/testthat/test-71-px-pxave-equivalent.R

test_that("PX-file and px_save(px(PX-file), path='*.px') are equivalent", {
  # Some files don't give an exact match in the PX-file because there can be
  # subtle differences in formatting. PxJob is run on these file to test
  # that they are equivalent.
  skip_if_not_installed("pxjob64Win", minimum_version = "1.1.0")

  run_px_px_save_and_expect_equal <- function(table_name) {
    px_in  <- get_px_file_path(table_name)
    px_out <- temp_px_file()

    px_in %>%
      px() %>%
      px_save(path = px_out)

    pxjob_clean(input = px_in,  output = pxjob_in  <- temp_px_file())
    pxjob_clean(input = px_out, output = pxjob_out <- temp_px_file())

    px_file_as_lines <- function(path) {
      ignore_keywords_regex <-
        c("VARIABLECODE") %>%
        paste0("^", ., ".+") %>%
        paste(collapse = "|")

      lines <-
        path %>%
        readLines() %>%
        stringr::str_subset(ignore_keywords_regex, negate = TRUE)

      if (table_name %in% c("no_timeval_or_codes2")) {
        lines <- stringr::str_subset(lines, "^CODES.+", negate = TRUE)
      }

      if (table_name %in% c("CONTVARIABLE_multiple_languages")) {
        lines <- stringr::str_subset(lines, '^VARIABLE-TYPE.+Time"', negate = TRUE)
        lines <- stringr::str_subset(lines, "META-ID", negate = TRUE)
      }

      return(lines)
    }

    expect_equal(px_file_as_lines(pxjob_in), px_file_as_lines(pxjob_out))
  }

  run_px_px_save_and_expect_equal("BEXSTA_windows_1252")
  run_px_px_save_and_expect_equal("CONTVARIABLE")
  run_px_px_save_and_expect_equal("CONTVARIABLE_multiple_languages")
  run_px_px_save_and_expect_equal("no_timeval_or_codes2")
  run_px_px_save_and_expect_equal("SOXATI4")
  run_px_px_save_and_expect_equal("TUX01")
})

Try the pxmake package in your browser

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

pxmake documentation built on April 11, 2025, 6:06 p.m.