
R version 4.0.3 (2020-10-10) -- "Bunny-Wunnies Freak Out"
Copyright (C) 2020 The R Foundation for Statistical Computing
Platform: x86_64-apple-darwin17.0 (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> NAME <- "text"
> source(file.path('_helper', 'init.R'))
> 
> # - simple wrap
> 
> txt1 <- c(
+   "humpty dumpty sat on a wall and had a big fall",
+   "humpty sat on a wall and dumped a big fall"
+ )
> res1 <- diffobj:::wrap(txt1, 10, TRUE, sgr.supported=TRUE)
> 
> identical(
+   gsub(" *$", "", vapply(res1, paste0, character(1L), collapse="")), txt1
+ )
[1] TRUE
> all.equal(lapply(res1, nchar), list(rep(10L, 5L), rep(10L, 5L)))
[1] TRUE
> 
> txt2 <- "hello world!"
> identical(
+   unlist(diffobj:::wrap(txt2, nchar(txt2), TRUE, sgr.supported=TRUE)),
+   txt2
+ )
[1] TRUE
> identical(
+   paste0(
+     unlist(diffobj:::wrap(txt2, nchar(txt2) / 2, TRUE, sgr.supported=TRUE)),
+     collapse=""
+   ),
+   txt2
+ )
[1] TRUE
> 
> # - wrap with escape sequences
> 
> txt3 <- c(
+   paste0(
+     "humpty dumpty ", crayon::style("sat on a wall", "red"),
+     " and had a big fall",
+     crayon::style(
+       crayon::style(
+         "humpty sat on a wall and dumped a big fall",
+         "green"
+       ),
+       "bgRed"
+     ), "woohoo"
+   ),
+   paste0(
+     crayon::style("hello ", "inverse"), "beautiful ",
+     crayon::style("world", "blue")
+   )
+ )
> res3 <- diffobj:::wrap(txt3, 10, TRUE, sgr.supported=TRUE)
> 
> identical(
+   crayon::strip_style(
+     gsub(" *$", "", vapply(res3, paste0, character(1L), collapse=""))
+   ),
+   crayon::strip_style(txt3)
+ )
[1] TRUE
> all.equal(
+   lapply(res3, crayon::col_nchar),
+   list(rep(10L, 10L), rep(10L, 3L))
+ )
[1] TRUE
> 
> # - strip hz whitespace
> 
> options(crayon.enabled=FALSE)
> all.equal(
+   diffobj:::strip_hz_control("a\tb", stops=4L, sgr.supported=TRUE), "a   b")
[1] TRUE
> all.equal(
+   diffobj:::strip_hz_control("ab\t", stops=4L, sgr.supported=TRUE), "ab  ")
[1] TRUE
> all.equal(
+   diffobj:::strip_hz_control("a\tb\t", stops=4L, sgr.supported=TRUE), "a   b   ")
[1] TRUE
> all.equal(
+   diffobj:::strip_hz_control("\ta\tb\t", stops=4L, sgr.supported=TRUE), 
+   "    a   b   "
+ )
[1] TRUE
> all.equal(
+   diffobj:::strip_hz_control("\ta\tb\t", stops=c(2L, 4L), sgr.supported=TRUE),
+   "  a   b   "
+ )
[1] TRUE
> all.equal(
+   diffobj:::strip_hz_control(
+     c("ab\t", "\ta\tb\t"), sgr.supported=TRUE, stops=4L
+   ),
+   c("ab  ", "    a   b   ")
+ )
[1] TRUE
> # recall that nchar("\033") == 1
> all.equal(
+   diffobj:::strip_hz_control(
+     "\033[31ma\t\033[39mhello\tb", stops=10L, sgr.supported=FALSE
+   ),
+   "\033[31ma    \033[39mhello          b"
+ )
[1] TRUE
> all.equal(
+   diffobj:::strip_hz_control(
+     "\033[31ma\t\033[39mhello\tb", stops=10L, sgr.supported=TRUE
+   ),
+   "\033[31ma\033[39m         \033[31m\033[39mhello     \033[31m\033[39mb"
+ )
[1] TRUE
> # carriage returns
> 
> all.equal(
+   diffobj:::strip_hz_control("hellothere\rHELLO", sgr.supported=TRUE),
+   "HELLOthere"
+ )
[1] TRUE
> all.equal(
+   diffobj:::strip_hz_control(
+     c("hellothere\rHELLO", "000\r12345678\rabcdef\rABC"), sgr.supported=TRUE
+   ),
+   c("HELLOthere", "ABCdef78")
+ )
[1] TRUE
> all.equal(
+   diffobj:::strip_hz_control("hellothere\r", sgr.supported=TRUE),
+   "hellothere"
+ )
[1] TRUE
> all.equal(
+   diffobj:::strip_hz_control(character(), sgr.supported=TRUE), character()
+ )
[1] TRUE
> # newlines
> 
> all.equal(
+   diffobj:::strip_hz_control(c("a", "", "\n", "a\nb"), sgr.supported=TRUE),
+   c("a", "", "", "a", "b")
+ )
[1] TRUE
> # with colors
> 
> options(crayon.enabled=TRUE)
> 
> all.equal(
+   crayon::strip_style(
+     diffobj:::strip_hz_control(
+       "\033[31ma\t\033[39mhello\tb", stops=10L, sgr.supported=TRUE)
+   ),
+   "a         hello     b"
+ )
[1] TRUE
> test.chr <- paste0(
+   crayon::red(crayon::`%+%`("000",  crayon::bgBlue("\r12345678"))),
+   "\rabcdef", crayon::green("\rABC")
+ )
> # visually inspect these
> 
> # cat("\n")
> # cat(test.chr, sep="\n")
> res <- diffobj:::strip_hz_control(test.chr, sgr.supported=TRUE)
> # cat(res, sep="\n")
> all.equal(crayon::strip_style(res), "ABCdef78")
[1] TRUE
> 
> # Mix tabs and carriage returns, visual inspection assumes terminal tab
> # stops at 8L; note output not exactly the same since it seems tabs don't
> # ovewrite prior screen state whereas spaces do
> 
> test.chr.2 <- paste0(
+   crayon::red(crayon::`%+%`("000", crayon::bgBlue("\r123\t456\t78"))),
+   "\rab\tcd f", crayon::green("\rABC")
+ )
> # cat("\n")
> # cat(test.chr.2, sep="\n")
> res.2 <- diffobj:::strip_hz_control(test.chr.2, stops=8L, sgr.supported=TRUE)
> # cat(res.2, sep="\n")
> 
> all.equal(crayon::strip_style(res.2), "ABC     cd f    78")
[1] TRUE
> 
> # multi line
> 
> test.chr.3 <- c(test.chr, test.chr.2)
> # cat("\n")
> res.3 <- diffobj:::strip_hz_control(test.chr.3, sgr.supported=TRUE)
> # cat(res.3, sep="\n")
> # cat(test.chr.3, sep="\n")
> 
> all.equal(crayon::strip_style(res.3), c("ABCdef78", "ABC     cd f    78"))
[1] TRUE
> 
> 
> proc.time()
   user  system elapsed 
  1.047   0.106   1.146 
