tests/testthat/test-setters.R

test_that("modify_nouns() works as expected", {
  # Specify the notation
  expect_equal(modify_nouns("a [of b in c]", new_nouns = "d", notation = RCLabels::bracket_notation), "d [of b in c]")
  # Don't infer the notation
  expect_equal(modify_nouns("a [of b in c]", new_nouns = "d", inf_notation = FALSE, notation = RCLabels::bracket_notation), "d [of b in c]")
  # Potentially cause problems.
  expect_error(modify_nouns("a [of b in c]", new_nouns = "d", inf_notation = FALSE))
  # Infer notation
  expect_equal(modify_nouns("a [of b in c]", new_nouns = "d"), "d [of b in c]")

  labels <- c("a [of b in c]", "d [of e in USA]")
  # Specify the notation
  expect_equal(modify_nouns(labels, new_nouns = c("a_plus", "g"), notation = RCLabels::bracket_notation),
               c("a_plus [of b in c]", "g [of e in USA]"))
  # Infer notation
  expect_equal(modify_nouns(labels, new_nouns = c("a_plus", "g")),
               c("a_plus [of b in c]", "g [of e in USA]"))

  # Make sure it works in a data frame.
  df <- tibble::tibble(labels = c("a [of b in c]", "d [of e in USA]"),
                       new_nouns = c("first_noun", "second_noun"))
  res <- df %>%
    dplyr::mutate(
      with_new_nouns = modify_nouns(labels, new_nouns = new_nouns)
    )
  expect_equal(res$with_new_nouns[[1]], "first_noun [of b in c]")
  expect_equal(res$with_new_nouns[[2]], "second_noun [of e in USA]")

  # Try with different notations for each row
  res2 <- res %>%
    dplyr::mutate(
      # This is a weird way to do things, but it will work.
      notations_col = infer_notation(labels, choose_most_specific = FALSE),
      # When we get inside modify_nouns(), notation is a list,
      # so notations are inferred a second time.
      # But, hey! It works.
      # Probably much better and cleaner to do this the way of res.
      more_new_nouns_from_specific_notations = modify_nouns(labels, new_nouns = new_nouns, notation = notations_col)
    )
  expect_equal(res2$more_new_nouns_from_specific_notations[[1]], "first_noun [of b in c]")
  expect_equal(res2$more_new_nouns_from_specific_notations[[2]], "second_noun [of e in USA]")
})


test_that("modify_nouns() fails when the shape of new_nouns is wrong", {
  expect_error(modify_nouns("a [of b in c]", c("d", "e")),
               "The number of labels must equal the number of new nouns in set_nouns")
})


test_that("modify_label_pieces() works as expected with single strings", {
  label <- "a [of b in c]"
  expect_equal(modify_label_pieces(label, piece = "noun", mod_map = list(new_noun = c("a", "b"))),
               "new_noun [of b in c]")
  expect_equal(modify_label_pieces(label, piece = "of", mod_map = list(new_of = c("a", "b"))),
               "a [of new_of in c]")
  # This one should result in no replacements,
  # because "c" is not %in% c("a", "b").
  expect_equal(modify_label_pieces(label, piece = "in", mod_map = list(USA = c("a", "b"))),
               "a [of b in c]")
  # Now, let's make it work.
  expect_equal(modify_label_pieces(label, piece = "in", mod_map = list(USA = c("a", "b", "c"))),
               "a [of b in USA]")

  # Try with a different label structure without inference
  expect_equal(modify_label_pieces("a -> b", piece = "pref", mod_map = list(new_noun = c("a", "b")),
                                   inf_notation = FALSE,
                                   notation = RCLabels::arrow_notation),
               "new_noun -> b")

  expect_equal(modify_label_pieces(list("a -> b", "c -> d"), piece = "pref", mod_map = list(new_noun = c("a", "b")),
               inf_notation = FALSE,
               notation = RCLabels::arrow_notation),
               list("new_noun -> b", "c -> d"))
})


test_that("modify_label_pieces() works with vectors, lists, and in data frames", {
  # Try with a vector
  labs <- c("a [of b in c]", "d [-> e in f]")
  expect_equal(modify_label_pieces(labs, piece = "noun", mod_map = list(new_noun = c("d", "e"))),
               c("a [of b in c]", "new_noun [-> e in f]"))
  # Try without inference
  expect_equal(modify_label_pieces(labs, piece = "noun", inf_notation = FALSE,
                                   notation = RCLabels::bracket_notation,
                                   mod_map = list(new_noun = c("d", "e"))),
               c("a [of b in c]", "new_noun [-> e in f]"))
  # Try with a list
  labs2 <- list("a [of b in c]", "d [-> e in f]")
  expect_equal(modify_label_pieces(labs2, piece = "->", mod_map = list(`new_->` = c("d", "e"))),
               c("a [of b in c]", "d [-> new_-> in f]"))

  # Try in a data frame
  df <- tibble::tibble(labs = c("a [of b in c]", "d [of e in f]"))
  res <- df %>%
    dplyr::mutate(
      mod1 = modify_label_pieces(labs, piece = "noun", mod_map = list(new_a = c("a", "b", "c")))
    )
  expect_equal(res$mod1, c("new_a [of b in c]", "d [of e in f]"))
})


test_that("modify_label_pieces() works with 2x piece", {
  labs_vector <- c("a [of b in c]", "d [-> e in f]")
  expect_equal(modify_label_pieces(labs_vector,
                                   piece = c("noun", "in"),
                                   mod_map = list(new_noun = c("a", "b", "c"),
                                                    new_in   = c("c", "f"))),
               c("new_noun [of b in new_in]", "d [-> e in new_in]"))
})


test_that("modify_label_pieces() works with 2x mod_map", {
  labs <- c("a [of b in c]", "d [-> e in f]")
  expect_equal(modify_label_pieces(labs,
                                   piece = "noun",
                                   mod_map = list(new_noun1 = c("a", "b", "c"),
                                                    new_noun2 = c("d", "e", "f"))),
               c("new_noun1 [of b in c]", "new_noun2 [-> e in f]"))
})


test_that("remove_pp() works as expected", {
  labs <- c("a [of b in c]", "d [-> e in f]")
  expect_equal(remove_label_pieces(labs, pieces_to_remove = "of"),
               c("a [in c]", "d [-> e in f]"))
  expect_equal(remove_label_pieces(labs, pieces_to_remove = c("of", "->")),
               c("a [in c]", "d [in f]"))
  expect_equal(remove_label_pieces(labs, pieces_to_remove = c("in", "into")),
               c("a [of b]", "d [-> e]"))
  expect_equal(remove_label_pieces(labs, pieces_to_remove = c("of", "in")),
               c("a [ ]", "d [-> e]"))
  # Try without inference
  expect_equal(remove_label_pieces(labs,
                                   pieces_to_remove = c("of", "in"),
                                   inf_notation = FALSE,
                                   notation = RCLabels::bracket_notation),
               c("a [ ]", "d [-> e]"))
})

Try the RCLabels package in your browser

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

RCLabels documentation built on April 25, 2023, 5:11 p.m.