From 8d0427b1f3c13af675767f541d30df98b5e55f4b Mon Sep 17 00:00:00 2001 From: Roel Hogervorst Date: Wed, 16 Oct 2024 22:04:32 +0200 Subject: [PATCH] Release candidate 0.6.0 (#146) --- .github/workflows/recheck.yml | 19 ++ DESCRIPTION | 3 +- Makefile | 5 +- NAMESPACE | 1 + NEWS.md | 1 + R/charlatan-package.R | 3 +- R/company-provider-bg_BG.R | 2 +- R/doi-provider.R | 1 + R/internet-provider-bg_BG.R | 2 +- R/internet-provider-cs_CZ.R | 2 +- R/internet-provider-de_DE.R | 2 +- R/internet-provider-en_AU.R | 2 +- R/internet-provider-fa_IR.R | 2 +- R/internet-provider-fr_FR.R | 2 +- R/internet-provider-hr_HR.R | 2 +- R/lorem-provider-ar_AA.R | 2 +- R/lorem-provider-el_GR.R | 2 +- R/lorem-provider-en_US.R | 2 +- R/lorem-provider-he_IL.R | 2 +- R/lorem-provider-ru_RU.R | 2 +- R/lorem-provider-zh_CN.R | 2 +- R/lorem-provider-zh_TW.R | 2 +- R/zzz.R | 2 +- README.Rmd | 46 +---- README.md | 161 ++++++++-------- codemeta.json | 12 +- cran-comments.md | 34 +++- inst/WORDLIST | 44 +++-- man/CompanyProvider_bg_BG.Rd | 2 +- man/DOIProvider.Rd | 3 + man/ISBNProvider.Rd | 112 +++++++++++ man/InternetProvider_bg_BG.Rd | 2 +- man/InternetProvider_cs_CZ.Rd | 2 +- man/InternetProvider_de_DE.Rd | 2 +- man/InternetProvider_en_AU.Rd | 2 +- man/InternetProvider_fa_IR.Rd | 2 +- man/InternetProvider_fr_FR.Rd | 2 +- man/InternetProvider_hr_HR.Rd | 2 +- man/LoremProvider_ar_AA.Rd | 2 +- man/LoremProvider_el_GR.Rd | 2 +- man/LoremProvider_en_US.Rd | 2 +- man/LoremProvider_he_IL.Rd | 2 +- man/LoremProvider_ru_RU.Rd | 2 +- man/LoremProvider_zh_CN.Rd | 2 +- man/LoremProvider_zh_TW.Rd | 2 +- man/SequenceProvider.Rd | 1 - man/charlatan-package.Rd | 8 + man/checksum_util.Rd | 13 ++ revdep/.gitignore | 3 + revdep/README.md | 39 ++-- revdep/cran.md | 2 +- revdep/failures.md | 67 ++++++- tests/testthat/test-BaseProvider.R | 43 ++--- tests/testthat/test-addresses.R | 37 ++-- tests/testthat/test-backwards-comp.R | 4 +- tests/testthat/test-charlatan_locales.R | 8 +- tests/testthat/test-color.R | 57 +++--- tests/testthat/test-company.R | 3 - tests/testthat/test-coordinates.R | 44 ++--- tests/testthat/test-credit_card.R | 45 ++--- tests/testthat/test-currency.R | 13 +- tests/testthat/test-datetime.R | 42 ++--- tests/testthat/test-doi.R | 24 +-- tests/testthat/test-fraudster.R | 63 +++---- tests/testthat/test-generate.R | 26 ++- tests/testthat/test-internet.R | 37 ++-- tests/testthat/test-job.R | 7 +- tests/testthat/test-lorem.R | 34 ++-- tests/testthat/test-missing.R | 15 +- tests/testthat/test-numerics.R | 28 +-- tests/testthat/test-person-funs.R | 4 +- tests/testthat/test-person.R | 94 +++++----- tests/testthat/test-phonenumber.R | 18 +- tests/testthat/test-sequences.R | 13 +- tests/testthat/test-settings.R | 6 +- tests/testthat/test-ssn.R | 15 +- tests/testthat/test-taxonomy.R | 28 ++- tests/testthat/test-useragent.R | 14 +- tests/testthat/test-zzz.R | 4 +- vignettes/charlatan.Rmd | 59 +++++- vignettes/creating-realistic-data.Rmd | 236 +++++++++++++----------- 81 files changed, 951 insertions(+), 710 deletions(-) create mode 100644 .github/workflows/recheck.yml create mode 100644 man/ISBNProvider.Rd create mode 100644 man/checksum_util.Rd create mode 100644 revdep/.gitignore diff --git a/.github/workflows/recheck.yml b/.github/workflows/recheck.yml new file mode 100644 index 0000000..d95f346 --- /dev/null +++ b/.github/workflows/recheck.yml @@ -0,0 +1,19 @@ +on: + workflow_dispatch: + inputs: + which: + type: choice + description: Which dependents to check + options: + - strong + - most + +name: Reverse dependency check + +jobs: + revdep_check: + name: Reverse check ${{ inputs.which }} dependents + uses: r-devel/recheck/.github/workflows/recheck.yml@v1 + with: + which: ${{ inputs.which }} + subdirectory: '' #if your package is in a git subdir diff --git a/DESCRIPTION b/DESCRIPTION index a326255..91d7339 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -44,7 +44,8 @@ Suggests: ipaddress, stringi, spelling -RoxygenNote: 7.2.3 +RoxygenNote: 7.3.2 +Config/testthat/edition: 3 Depends: R (>= 2.10) Collate: diff --git a/Makefile b/Makefile index af59beb..381784f 100644 --- a/Makefile +++ b/Makefile @@ -34,7 +34,7 @@ locales_update: # No real targets! .PHONY: all test doc install -vignettes: +vignettes: vignettes/charlatan.Rmd vignettes/contributing.Rmd vignettes/creating-realistic-data.Rmd ${RSCRIPT} -e "devtools::build_vignettes()" style: @@ -53,3 +53,6 @@ revdep: ${RSCRIPT} revdep/check.R release: style test doc readme build revdep + +codemeta: + ${RSCRIPT} -e "codemetar::write_codemeta()" diff --git a/NAMESPACE b/NAMESPACE index 8514dbb..798b860 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -29,6 +29,7 @@ export(ElementProvider_nl_NL) export(FileProvider) export(FileProvider_en_US) export(FraudsterClient) +export(ISBNProvider) export(InternetProvider) export(InternetProvider_bg_BG) export(InternetProvider_cs_CZ) diff --git a/NEWS.md b/NEWS.md index 82690a2..b70b8c0 100644 --- a/NEWS.md +++ b/NEWS.md @@ -48,6 +48,7 @@ every locale (when needed) without changing the logic for all locales. * add print method so the providers print nicely in the console. * All data fields are moved to `private` to reduce visual clutter. * Added docs for languages like `czech-language` `turkish-language`. +* modified tests so they work for test_that version 3 ### BUG FIXES * None diff --git a/R/charlatan-package.R b/R/charlatan-package.R index af85c4c..82fe032 100644 --- a/R/charlatan-package.R +++ b/R/charlatan-package.R @@ -10,7 +10,6 @@ #' @importFrom whisker whisker.render #' @importFrom tibble as_tibble #' @aliases charlatan -#' @docType package #' @keywords package #' @author Roel M. Hogervorst \email{hogervorst.rm@gmail.com} #' @author Scott Chamberlain @@ -50,4 +49,4 @@ #' x <- ColorProvider_en_US$new() #' x$color_name() #' x$hex_color() -NULL +"_PACKAGE" diff --git a/R/company-provider-bg_BG.R b/R/company-provider-bg_BG.R index 96a9c65..de1c2f7 100644 --- a/R/company-provider-bg_BG.R +++ b/R/company-provider-bg_BG.R @@ -1,6 +1,6 @@ # modified from the python library faker: # https://github.com/joke2k/faker/blob/master/faker/providers/company/bg_BG/__init__.py -#' @title CompanyProvider bg_BG +#' @title CompanyProvider for Bulgarian (Bulgaria) #' @inherit CompanyProvider description details return #' @export #' @family bg diff --git a/R/doi-provider.R b/R/doi-provider.R index bc49cca..f71e344 100644 --- a/R/doi-provider.R +++ b/R/doi-provider.R @@ -1,5 +1,6 @@ #' DOIProvider #' +#' Generate random Digital Object Identifyers, used in scientific journals. #' @export #' @keywords internal #' @examples diff --git a/R/internet-provider-bg_BG.R b/R/internet-provider-bg_BG.R index 1c590ca..f24297b 100644 --- a/R/internet-provider-bg_BG.R +++ b/R/internet-provider-bg_BG.R @@ -105,7 +105,7 @@ int_replacements_bg_bg <- list( c("\u044f", "ya") ) -#' Internet provider +#' Internet provider for Bulgarian (Bulgaria) #' #' methods for internet related data, like email addresses, #' usernames, and websites. diff --git a/R/internet-provider-cs_CZ.R b/R/internet-provider-cs_CZ.R index 05349bb..0438b17 100644 --- a/R/internet-provider-cs_CZ.R +++ b/R/internet-provider-cs_CZ.R @@ -28,7 +28,7 @@ int_free_email_domains_cs_cz <- c( int_tlds_cs_cz <- c("cz", "com", "cz") -#' Internet provider +#' Internet provider Czech #' #' methods for internet related data, like email addresses, #' usernames, and websites. diff --git a/R/internet-provider-de_DE.R b/R/internet-provider-de_DE.R index 3389a79..b8c2539 100644 --- a/R/internet-provider-de_DE.R +++ b/R/internet-provider-de_DE.R @@ -22,7 +22,7 @@ int_replacements_de_de <- list( c("\\u00df", "ss") ) -#' Internet provider +#' Internet provider German (Germany) #' #' methods for internet related data, like email addresses, #' usernames, and websites. diff --git a/R/internet-provider-en_AU.R b/R/internet-provider-en_AU.R index a19e6f5..1c55175 100644 --- a/R/internet-provider-en_AU.R +++ b/R/internet-provider-en_AU.R @@ -14,7 +14,7 @@ int_tlds_en_au <- c( "net.au", "biz", "info", "edu", "edu.au" ) -#' Internet provider +#' Internet provider English (Australia) #' #' methods for internet related data, like email addresses, #' usernames, and websites. diff --git a/R/internet-provider-fa_IR.R b/R/internet-provider-fa_IR.R index 1d2abe9..b0d7202 100644 --- a/R/internet-provider-fa_IR.R +++ b/R/internet-provider-fa_IR.R @@ -16,7 +16,7 @@ int_tlds_fa_ir <- c("com", "com", "com", "net", "org", "ir", "ir", "ir") #' @family IR #' @export #' @examples -#' x <- InternetProvider_bg_BG$new() +#' x <- InternetProvider_fa_IR$new() #' x$email() #' x$free_email() #' x$mac_address() diff --git a/R/internet-provider-fr_FR.R b/R/internet-provider-fr_FR.R index a4efdb2..8dae90e 100644 --- a/R/internet-provider-fr_FR.R +++ b/R/internet-provider-fr_FR.R @@ -51,7 +51,7 @@ int_replacements_fr_fr <- list( #' @family FR #' @export #' @examples -#' x <- InternetProvider_bg_BG$new() +#' x <- InternetProvider_fr_FR$new() #' x$email() #' x$free_email() #' x$mac_address() diff --git a/R/internet-provider-hr_HR.R b/R/internet-provider-hr_HR.R index f4f0534..3158f0b 100644 --- a/R/internet-provider-hr_HR.R +++ b/R/internet-provider-hr_HR.R @@ -22,7 +22,7 @@ int_replacements_hr_hr <- list( c("\u017d", "Z") ) -#' Internet provider for +#' Internet provider for Croatian (Croatia) #' #' methods for internet related data, like email addresses, #' usernames, and websites. diff --git a/R/lorem-provider-ar_AA.R b/R/lorem-provider-ar_AA.R index 25747d3..d31956e 100644 --- a/R/lorem-provider-ar_AA.R +++ b/R/lorem-provider-ar_AA.R @@ -697,7 +697,7 @@ lorem_word_list_ar_aa <- c( "\u0648\u0627\u0644\u0645\u0627\u0646\u064a\u0627" ) -#' Lorem provider +#' Lorem provider Arabic #' #' Methods for Lorem Ipsum generation. #' Lorem Ipsum is a placeholder text commonly used to demonstrate the visual diff --git a/R/lorem-provider-el_GR.R b/R/lorem-provider-el_GR.R index fa8e99b..3060bbe 100644 --- a/R/lorem-provider-el_GR.R +++ b/R/lorem-provider-el_GR.R @@ -525,7 +525,7 @@ lorem_word_list_el_gr <- c(rep(lorem_common_words_el_gr, 2), c( "\u03ce\u03c1\u03b1" )) -#' Lorem provider +#' Lorem provider Greek (Greece) #' #' Methods for Lorem Ipsum generation. #' Lorem Ipsum is a placeholder text commonly used to demonstrate the visual diff --git a/R/lorem-provider-en_US.R b/R/lorem-provider-en_US.R index 7a6b1a7..550ceae 100644 --- a/R/lorem-provider-en_US.R +++ b/R/lorem-provider-en_US.R @@ -979,7 +979,7 @@ lorem_word_list_en_us <- c( "yourself" ) -#' Lorem provider +#' Lorem provider English (USA) #' #' Methods for Lorem Ipsum generation. #' Lorem Ipsum is a placeholder text commonly used to demonstrate the visual diff --git a/R/lorem-provider-he_IL.R b/R/lorem-provider-he_IL.R index dc506f3..5156ff5 100644 --- a/R/lorem-provider-he_IL.R +++ b/R/lorem-provider-he_IL.R @@ -148,7 +148,7 @@ lorem_word_list_he_il <- c( "\u05ea\u05e8\u05d1\u05e0\u05da" ) -#' Lorem provider +#' Lorem provider Hebrew #' #' Methods for Lorem Ipsum generation. #' Lorem Ipsum is a placeholder text commonly used to demonstrate the visual diff --git a/R/lorem-provider-ru_RU.R b/R/lorem-provider-ru_RU.R index 11237dc..e4b3c45 100644 --- a/R/lorem-provider-ru_RU.R +++ b/R/lorem-provider-ru_RU.R @@ -504,7 +504,7 @@ lorem_word_list_ru_ru <- c( "\u0440\u0430\u0432\u043d\u043e\u0434\u0443\u0448\u043d\u044b\u0439" ) -#' Lorem provider Russian +#' Lorem provider Russian (Russia) #' #' Methods for Lorem Ipsum generation. #' Lorem Ipsum is a placeholder text commonly used to demonstrate the visual diff --git a/R/lorem-provider-zh_CN.R b/R/lorem-provider-zh_CN.R index 63435b0..fa80d7f 100644 --- a/R/lorem-provider-zh_CN.R +++ b/R/lorem-provider-zh_CN.R @@ -351,7 +351,7 @@ lorem_word_list_zh_cn <- c( "\u51c6\u5907" ) -#' Lorem provider +#' Lorem provider Chinese (China) #' #' Methods for Lorem Ipsum generation. #' Lorem Ipsum is a placeholder text commonly used to demonstrate the visual diff --git a/R/lorem-provider-zh_TW.R b/R/lorem-provider-zh_TW.R index 3042b19..bf58762 100644 --- a/R/lorem-provider-zh_TW.R +++ b/R/lorem-provider-zh_TW.R @@ -351,7 +351,7 @@ lorem_word_list_zh_tw <- c( "\u51c6\u5099" ) -#' Lorem provider +#' Lorem provider Chinese (Taiwan) #' #' Methods for Lorem Ipsum generation. #' Lorem Ipsum is a placeholder text commonly used to demonstrate the visual diff --git a/R/zzz.R b/R/zzz.R index ae57a94..00a7c00 100644 --- a/R/zzz.R +++ b/R/zzz.R @@ -122,7 +122,7 @@ locale_mismatch <- function(parent_provider, child_provider) { #' generalized util function for sequence multiplication #' #' Util function for ISBN, ean, SSN providers. -#' for cases such as sum(x[4]*5 + x[3]*4 + x[2]*3 + x[1] *2) +#' for cases such as `sum(x[4]*5 + x[3]*4 + x[2]*3 + x[1] *2)` #' @keywords internal checksum_util <- function(vector, multiplicationvector) { stopifnot(length(vector) == length(multiplicationvector)) diff --git a/README.Rmd b/README.Rmd index 5f9f26b..c693d59 100644 --- a/README.Rmd +++ b/README.Rmd @@ -92,27 +92,13 @@ x$color_name() ## locale support -Adding more locales through time, e.g., - -Locale support for job data - ```{r} -ch_job(locale = "en_US", n = 3) ch_job(locale = "fr_FR", n = 3) ch_job(locale = "hr_HR", n = 3) ch_job(locale = "uk_UA", n = 3) ch_job(locale = "zh_TW", n = 3) ``` -For colors: - -```{r} -ch_color_name(locale = "en_US", n = 3) -ch_color_name(locale = "uk_UA", n = 3) -``` - -More coming soon ... - ## generate a dataset ```{r} @@ -123,28 +109,6 @@ ch_generate() ch_generate("job", "phone_number", n = 30) ``` - -## person name - -```{r} -ch_name() -``` - -```{r} -ch_name(10) -``` - - -## phone number - -```{r} -ch_phone_number() -``` - -```{r} -ch_phone_number(10) -``` - ## job ```{r} @@ -163,7 +127,6 @@ ch_credit_card_provider(n = 4) ``` ```{r} -ch_credit_card_number() ch_credit_card_number(n = 10) ``` @@ -172,6 +135,15 @@ ch_credit_card_security_code() ch_credit_card_security_code(10) ``` +## Documentation + +All providers have documentation available through the help functions. +All providers of the same locales, are linked together, and for every language +we have a generic page, for example```?`dutch-language` ```. + +There are three vignettes, about contributing to this project, what {charlatan} +does and a more in depth vignette about creating realistic data. + ## Usage in the wild - eacton/R-Utility-Belt-ggplot2 (https://github.com/eacton/R-Utility-Belt-ggplot2/blob/836a6bd303fbfde4a334d351e0d1c63f71c4ec68/furry_dataset.R) diff --git a/README.md b/README.md index 66b8f2c..79cc79f 100644 --- a/README.md +++ b/README.md @@ -58,21 +58,20 @@ Reasons to use `charlatan`: cran version -```r +``` r install.packages("charlatan") ``` dev version -```r +``` r remotes::install_github("ropensci/charlatan") ``` -```r +``` r library("charlatan") -#> Error in library("charlatan"): there is no package called 'charlatan' set.seed(12345) ``` @@ -81,133 +80,129 @@ set.seed(12345) ... for all fake data operations -```r +``` r x <- fraudster() -#> Error in fraudster(): could not find function "fraudster" x$job() -#> Error in eval(expr, envir, enclos): object 'x' not found +#> [1] "Corporate investment banker" x$name() -#> Error in eval(expr, envir, enclos): object 'x' not found +#> [1] "Dr. Garey Hamill" x$color_name() -#> Error in eval(expr, envir, enclos): object 'x' not found +#> [1] "Ivory" ``` ## locale support -Adding more locales through time, e.g., -Locale support for job data - - -```r -ch_job(locale = "en_US", n = 3) -#> Error in ch_job(locale = "en_US", n = 3): could not find function "ch_job" +``` r ch_job(locale = "fr_FR", n = 3) -#> Error in ch_job(locale = "fr_FR", n = 3): could not find function "ch_job" +#> [1] "Tailleur de pierre" "Soigneur" "Ingénieur" ch_job(locale = "hr_HR", n = 3) -#> Error in ch_job(locale = "hr_HR", n = 3): could not find function "ch_job" +#> [1] "Stalni sudski vještak" "Viši muzejski pedagog" "Kozmetičar" ch_job(locale = "uk_UA", n = 3) -#> Error in ch_job(locale = "uk_UA", n = 3): could not find function "ch_job" +#> [1] "Льотчик" "Дипломат" "Педагог" ch_job(locale = "zh_TW", n = 3) -#> Error in ch_job(locale = "zh_TW", n = 3): could not find function "ch_job" -``` - -For colors: - - -```r -ch_color_name(locale = "en_US", n = 3) -#> Error in ch_color_name(locale = "en_US", n = 3): could not find function "ch_color_name" -ch_color_name(locale = "uk_UA", n = 3) -#> Error in ch_color_name(locale = "uk_UA", n = 3): could not find function "ch_color_name" +#> [1] "行政人員" "珠心算老師" "飯店工作人員" ``` -More coming soon ... - ## generate a dataset -```r +``` r ch_generate() -#> Error in ch_generate(): could not find function "ch_generate" -``` - - -```r +#> # A tibble: 10 × 3 +#> name job phone_number +#> +#> 1 Deana Mraz DDS Printmaker +25(2)69696… +#> 2 Delina Kilback Administrator, charities/voluntary orga… 04380296996 +#> 3 Mandi Bailey PhD Systems analyst 09381790856 +#> 4 Ms. Trista Jacobson DVM Pharmacist, hospital 214-956-893… +#> 5 King Bartoletti Teacher, music 1-312-788-3… +#> 6 Dr. Ike Gerhold Audiological scientist 743.877.3448 +#> 7 Dr. Tatyanna Blanda DVM Manufacturing systems engineer 09691101846 +#> 8 Antione Grant Regulatory affairs officer (406)994-27… +#> 9 Michal Gutmann Chartered management accountant (576)667-99… +#> 10 Ross Cartwright PhD Video editor 07913227887 +``` + + +``` r ch_generate("job", "phone_number", n = 30) -#> Error in ch_generate("job", "phone_number", n = 30): could not find function "ch_generate" -``` - - -## person name - - -```r -ch_name() -#> Error in ch_name(): could not find function "ch_name" -``` - - -```r -ch_name(10) -#> Error in ch_name(10): could not find function "ch_name" -``` - - -## phone number - - -```r -ch_phone_number() -#> Error in ch_phone_number(): could not find function "ch_phone_number" -``` - - -```r -ch_phone_number(10) -#> Error in ch_phone_number(10): could not find function "ch_phone_number" +#> # A tibble: 30 × 2 +#> job phone_number +#> +#> 1 Scientist, research (medical) +63(0)0054265468 +#> 2 Contracting civil engineer +97(1)8445952277 +#> 3 Geneticist, molecular 167-865-4109x84457 +#> 4 Equities trader 737.695.1498x1212 +#> 5 Interior and spatial designer +49(7)9909862225 +#> 6 Geophysical data processor 1-884-863-2289x58137 +#> 7 Ophthalmologist 060-919-7672x6069 +#> 8 Engineer, agricultural 180-370-0811x1948 +#> 9 Dealer 1-838-787-0534 +#> 10 Environmental health practitioner 884.224.4881 +#> # ℹ 20 more rows ``` ## job -```r +``` r ch_job() -#> Error in ch_job(): could not find function "ch_job" +#> [1] "Set designer" ``` -```r +``` r ch_job(10) -#> Error in ch_job(10): could not find function "ch_job" +#> [1] "Actuary" +#> [2] "Public house manager" +#> [3] "Orthoptist" +#> [4] "Broadcast engineer" +#> [5] "Scientist, research (physical sciences)" +#> [6] "Nature conservation officer" +#> [7] "Camera operator" +#> [8] "Psychologist, prison and probation services" +#> [9] "Engineer, communications" +#> [10] "IT sales professional" ``` ## credit cards -```r +``` r ch_credit_card_provider() -#> Error in ch_credit_card_provider(): could not find function "ch_credit_card_provider" +#> [1] "JCB 15 digit" ch_credit_card_provider(n = 4) -#> Error in ch_credit_card_provider(n = 4): could not find function "ch_credit_card_provider" +#> [1] "VISA 16 digit" "Voyager" +#> [3] "JCB 15 digit" "Diners Club / Carte Blanche" ``` -```r -ch_credit_card_number() -#> Error in ch_credit_card_number(): could not find function "ch_credit_card_number" +``` r ch_credit_card_number(n = 10) -#> Error in ch_credit_card_number(n = 10): could not find function "ch_credit_card_number" +#> [1] "3009338214996378" "4713530558707" "3158362208111956356" +#> [4] "53355347405525029" "3720351812179086" "3044619385256147" +#> [7] "3789072424345968" "4208219491023" "3096893682997724534" +#> [10] "4419344554874021" ``` -```r +``` r ch_credit_card_security_code() -#> Error in ch_credit_card_security_code(): could not find function "ch_credit_card_security_code" +#> [1] "866" ch_credit_card_security_code(10) -#> Error in ch_credit_card_security_code(10): could not find function "ch_credit_card_security_code" +#> [1] "351" "462" "439" "1922" "497" "879" "998" "368" "280" "337" ``` +## Documentation + +All providers have documentation available through the help functions. +All providers of the same locales, are linked together, and for every language +we have a generic page, for example```?`dutch-language` ```. + +There are three vignettes, about contributing to this project, what {charlatan} +does and a more in depth vignette about creating realistic data. + ## Usage in the wild - eacton/R-Utility-Belt-ggplot2 (https://github.com/eacton/R-Utility-Belt-ggplot2/blob/836a6bd303fbfde4a334d351e0d1c63f71c4ec68/furry_dataset.R) diff --git a/codemeta.json b/codemeta.json index ea2eb97..ab147c6 100644 --- a/codemeta.json +++ b/codemeta.json @@ -2,7 +2,7 @@ "@context": "https://doi.org/10.5063/schema/codemeta-2.0", "@type": "SoftwareSourceCode", "identifier": "charlatan", - "description": "Make fake data, supporting addresses, person names, dates, times, colors, coordinates, currencies, digital object identifiers ('DOIs'), jobs, phone numbers, 'DNA' sequences, doubles and integers from distributions and within a range.", + "description": "Make fake data that looks realistic, supporting addresses, person names, dates, times, colors, coordinates, currencies, digital object identifiers ('DOIs'), jobs, phone numbers, 'DNA' sequences, doubles and integers from distributions and within a range.", "name": "charlatan: Make Fake Data", "relatedLink": "https://docs.ropensci.org/charlatan/", "codeRepository": "https://github.com/ropensci/charlatan", @@ -14,7 +14,7 @@ "name": "R", "url": "https://r-project.org" }, - "runtimePlatform": "R version 4.2.2 (2022-10-31)", + "runtimePlatform": "R version 4.4.1 (2024-06-14)", "provider": { "@id": "https://cran.r-project.org", "@type": "Organization", @@ -184,13 +184,15 @@ }, "SystemRequirements": null }, - "fileSize": "21555.202KB", + "fileSize": "2658.23KB", "releaseNotes": "https://github.com/ropensci/charlatan/blob/master/NEWS.md", - "contIntegration": "https://github.com/ropensci/charlatan/actions?query=workflow%3AR-check", + "readme": "https://github.com/ropensci/charlatan/blob/master/README.md", + "contIntegration": ["https://github.com/ropensci/charlatan/actions?query=workflow%3AR-check", "https://github.com/ropensci/charlatan/actions/workflows/R-CMD-check.yaml"], "developmentStatus": "https://www.repostatus.org/#active", "review": { "@type": "Review", "url": "https://github.com/ropensci/software-review/issues/94", "provider": "https://ropensci.org" - } + }, + "keywords": ["data", "faker", "rstats", "dataset", "fake-data", "r", "r-package", "peer-reviewed"] } diff --git a/cran-comments.md b/cran-comments.md index 87095fa..6de5de4 100644 --- a/cran-comments.md +++ b/cran-comments.md @@ -1,8 +1,30 @@ ## Test environments -* local macos, R 4.2.1 -* ubuntu 20.04 (on github actions), R 4.1.2, R Devel -* win-builder (devel and release) +* macos-latest (macOS Sonoma 14.7; on github actions), R 4.4.1 +* ubuntu 22.04.5 (on github actions), 4.3.3 (2024-02-29), R 4.4.1, R Devel +* windows latest (on github actions) R 4.4.1 +* local ubuntu 24.04 R 4.4.1 + +### test environments details + +**Macos**, R version 4.4.1 (2024-06-14), platform: aarch64-apple-darwin20 +R was compiled by Apple clang version 14.0.0 (clang-1400.0.29.202) GNU Fortran (GCC) 12.2.0 +running under: macOS Sonoma 14.7* + +**windows** R version 4.4.1 (2024-06-14 ucrt), platform: x86_64-w64-mingw32 +R was compiled by gcc.exe (GCC) 13.2.0 GNU Fortran (GCC) 13.2.0 +running under: Windows Server 2022 x64 (build 20348) + +**Linux** + +- R version 4.3.3 (2024-02-29) +- R version 4.4.1 +- R Under development (unstable) (2024-10-14 r87233) + +platform: x86_64-pc-linux-gnu +R was compiled by gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0, GNU Fortran (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0 +running under: Ubuntu 22.04.5 LTS + ## R CMD check results @@ -10,10 +32,10 @@ ## Reverse dependencies -I have checked 3 reverse dependencies, comparing R CMD check results across CRAN and dev versions of this package. +We checked 4 reverse dependencies (2 from CRAN + 2 from Bioconductor), comparing R CMD check results across CRAN and dev versions of this package. - * I saw 0 new problems - * I failed to check 0 packages + * We saw 0 new problems + * We failed to check 0 packages --- diff --git a/inst/WORDLIST b/inst/WORDLIST index 187a45c..50a456a 100644 --- a/inst/WORDLIST +++ b/inst/WORDLIST @@ -1,9 +1,10 @@ AddressProvider BG BSN -BareProvider BaseProvider Brittain +Børsmægler +CMD CN Chechia ColorProvider @@ -19,22 +20,32 @@ DateTimeProvider ElementProvider FI FileProvider +František FraudsterClient +Furtz Github HU +ISBNProvider +ISBNs +Identifyable InternetProvider Ipsum JobProvider +Krejčí LV Lorem LoremProvider MX +Machová +Manawarongo MiscProvider MissingDataProvider -Māori NL +Nikol NonLocalized NumericsProvider +PII +ParentProviders PersonProvider PhoneNumberProvider PhoneProvider @@ -44,13 +55,21 @@ Roel SSN SSNProvider SequenceProvider +Spongebob +Squarepants Switserland TW TaxonomyProvider +Tererongo +Theplantlist UA URIs UserAgentProvider -apo +Util +Ventilationsmontør +Zwitserland +anonomize +api ar baseclass bbox @@ -60,14 +79,14 @@ cloneable cran css da -datetime de deets dev dk docstring -dpo eacton +ean +ecommerce el elfproef erroring @@ -79,6 +98,7 @@ github http https hu +identifyable init instantiation ipsum @@ -86,7 +106,6 @@ ipv iso ja ko -kylevoyto langugage lexify linux @@ -100,8 +119,10 @@ nl nn numerify perl +phonenumber +phonenumbers placehold -placenames +pseudonomous rcorpora rgb romanized @@ -109,6 +130,9 @@ roxygen rstudio ru sk +spongebob +squarepants +ssn streetname stringn sv @@ -118,14 +142,12 @@ th tld tld's tlh +transactional uk uri +util vetor wakefield wikipedia zh ヒロキ -api -ParentProviders -PII -ssn diff --git a/man/CompanyProvider_bg_BG.Rd b/man/CompanyProvider_bg_BG.Rd index 59dd6c8..ec8b89c 100644 --- a/man/CompanyProvider_bg_BG.Rd +++ b/man/CompanyProvider_bg_BG.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/company-provider-bg_BG.R \name{CompanyProvider_bg_BG} \alias{CompanyProvider_bg_BG} -\title{CompanyProvider bg_BG} +\title{CompanyProvider for Bulgarian (Bulgaria)} \value{ A CompanyProvider object that can create companies. } diff --git a/man/DOIProvider.Rd b/man/DOIProvider.Rd index cdf650a..8216616 100644 --- a/man/DOIProvider.Rd +++ b/man/DOIProvider.Rd @@ -8,6 +8,9 @@ DOIProvider DOIProvider } +\details{ +Generate random Digital Object Identifyers, used in scientific journals. +} \examples{ (z <- DOIProvider$new()) z$render() diff --git a/man/ISBNProvider.Rd b/man/ISBNProvider.Rd new file mode 100644 index 0000000..160e541 --- /dev/null +++ b/man/ISBNProvider.Rd @@ -0,0 +1,112 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/isbn-provider.R +\name{ISBNProvider} +\alias{ISBNProvider} +\title{ISBNProvider} +\description{ +International Standard Book Number - Provider. +ISBN starts with group code, all English language ISBN-10 codes +start with a 0 or 1, and all German language books start with a 3. +see \url{https://en.wikipedia.org/wiki/List_of_ISBN_registration_groups}. + +Charlatan does not provide further helpers for you, but you can supply the +prefix yourself, if for instance you want to create Mexican ISBNs you can +by supplying the ISBN10 prefix 970, or for Andorra supply the ISBN 13 prefix +97899920 (that is 978 for ISBN13, and 99920 for Andorra). +} +\examples{ +z <- ISBNProvider$new() +z$isbn10() +z$isbn13() +z$isbn10(10) +z$isbn13(100) +# or even z$isbn10(500) +} +\section{Super class}{ +\code{\link[charlatan:BareProvider]{charlatan::BareProvider}} -> \code{ISBNProvider} +} +\section{Methods}{ +\subsection{Public methods}{ +\itemize{ +\item \href{#method-ISBNProvider-isbn10}{\code{ISBNProvider$isbn10()}} +\item \href{#method-ISBNProvider-isbn13}{\code{ISBNProvider$isbn13()}} +\item \href{#method-ISBNProvider-clone}{\code{ISBNProvider$clone()}} +} +} +\if{html}{\out{ +
Inherited methods + +
+}} +\if{html}{\out{
}} +\if{html}{\out{}} +\if{latex}{\out{\hypertarget{method-ISBNProvider-isbn10}{}}} +\subsection{Method \code{isbn10()}}{ +Make a ISBN10 +This is a completely random (apart from the prefix), but valid ISBN10 number. +\subsection{Usage}{ +\if{html}{\out{
}}\preformatted{ISBNProvider$isbn10(n = 1, prefix = NULL)}\if{html}{\out{
}} +} + +\subsection{Arguments}{ +\if{html}{\out{
}} +\describe{ +\item{\code{n}}{(integer) number of ISBN10s to make, default=1} + +\item{\code{prefix}}{(integer/character) prefix for ISBN} +} +\if{html}{\out{
}} +} +} +\if{html}{\out{
}} +\if{html}{\out{}} +\if{latex}{\out{\hypertarget{method-ISBNProvider-isbn13}{}}} +\subsection{Method \code{isbn13()}}{ +Make a ISBN13. +This is a completely random (apart from the prefix), but valid ISBN13 number. +\subsection{Usage}{ +\if{html}{\out{
}}\preformatted{ISBNProvider$isbn13(n = 1, prefix = NULL)}\if{html}{\out{
}} +} + +\subsection{Arguments}{ +\if{html}{\out{
}} +\describe{ +\item{\code{n}}{(integer) number of ISBN10s to make, default=1} + +\item{\code{prefix}}{(integer/character) prefix for ISBN} +} +\if{html}{\out{
}} +} +} +\if{html}{\out{
}} +\if{html}{\out{}} +\if{latex}{\out{\hypertarget{method-ISBNProvider-clone}{}}} +\subsection{Method \code{clone()}}{ +The objects of this class are cloneable with this method. +\subsection{Usage}{ +\if{html}{\out{
}}\preformatted{ISBNProvider$clone(deep = FALSE)}\if{html}{\out{
}} +} + +\subsection{Arguments}{ +\if{html}{\out{
}} +\describe{ +\item{\code{deep}}{Whether to make a deep clone.} +} +\if{html}{\out{
}} +} +} +} diff --git a/man/InternetProvider_bg_BG.Rd b/man/InternetProvider_bg_BG.Rd index 6d622ef..d92a87f 100644 --- a/man/InternetProvider_bg_BG.Rd +++ b/man/InternetProvider_bg_BG.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/internet-provider-bg_BG.R \name{InternetProvider_bg_BG} \alias{InternetProvider_bg_BG} -\title{Internet provider} +\title{Internet provider for Bulgarian (Bulgaria)} \description{ methods for internet related data, like email addresses, usernames, and websites. diff --git a/man/InternetProvider_cs_CZ.Rd b/man/InternetProvider_cs_CZ.Rd index 5eda670..329ba35 100644 --- a/man/InternetProvider_cs_CZ.Rd +++ b/man/InternetProvider_cs_CZ.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/internet-provider-cs_CZ.R \name{InternetProvider_cs_CZ} \alias{InternetProvider_cs_CZ} -\title{Internet provider} +\title{Internet provider Czech} \description{ methods for internet related data, like email addresses, usernames, and websites. diff --git a/man/InternetProvider_de_DE.Rd b/man/InternetProvider_de_DE.Rd index 7fb72f5..1821ec8 100644 --- a/man/InternetProvider_de_DE.Rd +++ b/man/InternetProvider_de_DE.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/internet-provider-de_DE.R \name{InternetProvider_de_DE} \alias{InternetProvider_de_DE} -\title{Internet provider} +\title{Internet provider German (Germany)} \description{ methods for internet related data, like email addresses, usernames, and websites. diff --git a/man/InternetProvider_en_AU.Rd b/man/InternetProvider_en_AU.Rd index 1de2fce..0e63d03 100644 --- a/man/InternetProvider_en_AU.Rd +++ b/man/InternetProvider_en_AU.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/internet-provider-en_AU.R \name{InternetProvider_en_AU} \alias{InternetProvider_en_AU} -\title{Internet provider} +\title{Internet provider English (Australia)} \description{ methods for internet related data, like email addresses, usernames, and websites. diff --git a/man/InternetProvider_fa_IR.Rd b/man/InternetProvider_fa_IR.Rd index e0e80a9..4510862 100644 --- a/man/InternetProvider_fa_IR.Rd +++ b/man/InternetProvider_fa_IR.Rd @@ -8,7 +8,7 @@ methods for internet related data, like email addresses, usernames, and websites. } \examples{ -x <- InternetProvider_bg_BG$new() +x <- InternetProvider_fa_IR$new() x$email() x$free_email() x$mac_address() diff --git a/man/InternetProvider_fr_FR.Rd b/man/InternetProvider_fr_FR.Rd index e5f6cbb..adb07ca 100644 --- a/man/InternetProvider_fr_FR.Rd +++ b/man/InternetProvider_fr_FR.Rd @@ -8,7 +8,7 @@ methods for internet related data, like email addresses, usernames, and websites. } \examples{ -x <- InternetProvider_bg_BG$new() +x <- InternetProvider_fr_FR$new() x$email() x$free_email() x$mac_address() diff --git a/man/InternetProvider_hr_HR.Rd b/man/InternetProvider_hr_HR.Rd index bc3cfa5..14d8b03 100644 --- a/man/InternetProvider_hr_HR.Rd +++ b/man/InternetProvider_hr_HR.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/internet-provider-hr_HR.R \name{InternetProvider_hr_HR} \alias{InternetProvider_hr_HR} -\title{Internet provider for} +\title{Internet provider for Croatian (Croatia)} \description{ methods for internet related data, like email addresses, usernames, and websites. diff --git a/man/LoremProvider_ar_AA.Rd b/man/LoremProvider_ar_AA.Rd index ea63cba..c1a2e87 100644 --- a/man/LoremProvider_ar_AA.Rd +++ b/man/LoremProvider_ar_AA.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/lorem-provider-ar_AA.R \name{LoremProvider_ar_AA} \alias{LoremProvider_ar_AA} -\title{Lorem provider} +\title{Lorem provider Arabic} \description{ Methods for Lorem Ipsum generation. Lorem Ipsum is a placeholder text commonly used to demonstrate the visual diff --git a/man/LoremProvider_el_GR.Rd b/man/LoremProvider_el_GR.Rd index 749e9f9..9328b6b 100644 --- a/man/LoremProvider_el_GR.Rd +++ b/man/LoremProvider_el_GR.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/lorem-provider-el_GR.R \name{LoremProvider_el_GR} \alias{LoremProvider_el_GR} -\title{Lorem provider} +\title{Lorem provider Greek (Greece)} \description{ Methods for Lorem Ipsum generation. Lorem Ipsum is a placeholder text commonly used to demonstrate the visual diff --git a/man/LoremProvider_en_US.Rd b/man/LoremProvider_en_US.Rd index a69172d..59ca13c 100644 --- a/man/LoremProvider_en_US.Rd +++ b/man/LoremProvider_en_US.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/lorem-provider-en_US.R \name{LoremProvider_en_US} \alias{LoremProvider_en_US} -\title{Lorem provider} +\title{Lorem provider English (USA)} \description{ Methods for Lorem Ipsum generation. Lorem Ipsum is a placeholder text commonly used to demonstrate the visual diff --git a/man/LoremProvider_he_IL.Rd b/man/LoremProvider_he_IL.Rd index b3db3ad..530305e 100644 --- a/man/LoremProvider_he_IL.Rd +++ b/man/LoremProvider_he_IL.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/lorem-provider-he_IL.R \name{LoremProvider_he_IL} \alias{LoremProvider_he_IL} -\title{Lorem provider} +\title{Lorem provider Hebrew} \description{ Methods for Lorem Ipsum generation. Lorem Ipsum is a placeholder text commonly used to demonstrate the visual diff --git a/man/LoremProvider_ru_RU.Rd b/man/LoremProvider_ru_RU.Rd index a3c898b..82a6459 100644 --- a/man/LoremProvider_ru_RU.Rd +++ b/man/LoremProvider_ru_RU.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/lorem-provider-ru_RU.R \name{LoremProvider_ru_RU} \alias{LoremProvider_ru_RU} -\title{Lorem provider Russian} +\title{Lorem provider Russian (Russia)} \description{ Methods for Lorem Ipsum generation. Lorem Ipsum is a placeholder text commonly used to demonstrate the visual diff --git a/man/LoremProvider_zh_CN.Rd b/man/LoremProvider_zh_CN.Rd index 6857e7d..e599d11 100644 --- a/man/LoremProvider_zh_CN.Rd +++ b/man/LoremProvider_zh_CN.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/lorem-provider-zh_CN.R \name{LoremProvider_zh_CN} \alias{LoremProvider_zh_CN} -\title{Lorem provider} +\title{Lorem provider Chinese (China)} \description{ Methods for Lorem Ipsum generation. Lorem Ipsum is a placeholder text commonly used to demonstrate the visual diff --git a/man/LoremProvider_zh_TW.Rd b/man/LoremProvider_zh_TW.Rd index 8ad745c..4761940 100644 --- a/man/LoremProvider_zh_TW.Rd +++ b/man/LoremProvider_zh_TW.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/lorem-provider-zh_TW.R \name{LoremProvider_zh_TW} \alias{LoremProvider_zh_TW} -\title{Lorem provider} +\title{Lorem provider Chinese (Taiwan)} \description{ Methods for Lorem Ipsum generation. Lorem Ipsum is a placeholder text commonly used to demonstrate the visual diff --git a/man/SequenceProvider.Rd b/man/SequenceProvider.Rd index 6ad9812..a031f9d 100644 --- a/man/SequenceProvider.Rd +++ b/man/SequenceProvider.Rd @@ -13,7 +13,6 @@ z$render(10) z$render(100) # or even z$render(500) } -\keyword{internal} \section{Super class}{ \code{\link[charlatan:BareProvider]{charlatan::BareProvider}} -> \code{SequenceProvider} } diff --git a/man/charlatan-package.Rd b/man/charlatan-package.Rd index 27da254..2c34b89 100644 --- a/man/charlatan-package.Rd +++ b/man/charlatan-package.Rd @@ -47,6 +47,14 @@ x$hex_color() x <- ColorProvider_en_US$new() x$color_name() x$hex_color() +} +\seealso{ +Useful links: +\itemize{ + \item \url{https://docs.ropensci.org/charlatan/ (website) https://github.com/ropensci/charlatan (devel)} + \item Report bugs at \url{https://github.com/ropensci/charlatan/issues} +} + } \author{ Roel M. Hogervorst \email{hogervorst.rm@gmail.com} diff --git a/man/checksum_util.Rd b/man/checksum_util.Rd new file mode 100644 index 0000000..cfdd8d6 --- /dev/null +++ b/man/checksum_util.Rd @@ -0,0 +1,13 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/zzz.R +\name{checksum_util} +\alias{checksum_util} +\title{generalized util function for sequence multiplication} +\usage{ +checksum_util(vector, multiplicationvector) +} +\description{ +Util function for ISBN, ean, SSN providers. +for cases such as \code{sum(x[4]*5 + x[3]*4 + x[2]*3 + x[1] *2)} +} +\keyword{internal} diff --git a/revdep/.gitignore b/revdep/.gitignore new file mode 100644 index 0000000..bf75e91 --- /dev/null +++ b/revdep/.gitignore @@ -0,0 +1,3 @@ +checks/ +library/ +data.sqlite diff --git a/revdep/README.md b/revdep/README.md index 4c6251b..6929001 100644 --- a/revdep/README.md +++ b/revdep/README.md @@ -1,24 +1,31 @@ # Platform -|field |value | -|:--------|:--------------------------------| -|version |R version 4.2.2 (2022-10-31) | -|os |macOS Big Sur ... 10.16 | -|system |x86_64, darwin17.0 | -|ui |X11 | -|language |(EN) | -|collate |C | -|ctype |UTF-8 | -|tz |Europe/Amsterdam | -|date |2023-09-12 | -|pandoc |2.11.0.4 @ /usr/local/bin/pandoc | +|field |value | +|:--------|:---------------------------------------------------------------------------------| +|version |R version 4.4.1 (2024-06-14) | +|os |Ubuntu 24.04.1 LTS | +|system |x86_64, linux-gnu | +|ui |RStudio | +|language |(EN) | +|collate |en_US.UTF-8 | +|ctype |en_US.UTF-8 | +|tz |Europe/Amsterdam | +|date |2024-10-16 | +|rstudio |2024.09.0+375 Cranberry Hibiscus (desktop) | +|pandoc |3.2 @ /usr/lib/rstudio/resources/app/bin/quarto/bin/tools/x86_64/ (via rmarkdown) | # Dependencies -|package |old |new |Δ | -|:---------|:-----|:-----|:--| -|charlatan |0.5.0 |0.5.1 |* | -|whisker |NA |0.4.1 |* | +|package |old |new |Δ | +|:---------|:---|:-----|:--| +|charlatan |NA |0.6.0 |* | # Revdeps +## Failed to check (2) + +|package |version |error |warning |note | +|:---------|:-------|:-----|:-------|:----| +|DataFakeR |? | | | | +|fakir |? | | | | + diff --git a/revdep/cran.md b/revdep/cran.md index 29c1961..27101b5 100644 --- a/revdep/cran.md +++ b/revdep/cran.md @@ -1,6 +1,6 @@ ## revdepcheck results -We checked 3 reverse dependencies, comparing R CMD check results across CRAN and dev versions of this package. +We checked 4 reverse dependencies (2 from CRAN + 2 from Bioconductor), comparing R CMD check results across CRAN and dev versions of this package. * We saw 0 new problems * We failed to check 0 packages diff --git a/revdep/failures.md b/revdep/failures.md index 9a20736..2afacb1 100644 --- a/revdep/failures.md +++ b/revdep/failures.md @@ -1 +1,66 @@ -*Wow, no problems at all. :)* \ No newline at end of file +# DataFakeR + +
+ +* Version: +* GitHub: https://github.com/ropensci/charlatan +* Source code: NA +* Number of recursive dependencies: 0 + +
+ +## Error before installation + +### Devel + +``` + + + + + + +``` +### CRAN + +``` + + + + + + +``` +# fakir + +
+ +* Version: +* GitHub: https://github.com/ropensci/charlatan +* Source code: NA +* Number of recursive dependencies: 0 + +
+ +## Error before installation + +### Devel + +``` + + + + + + +``` +### CRAN + +``` + + + + + + +``` diff --git a/tests/testthat/test-BaseProvider.R b/tests/testthat/test-BaseProvider.R index dc4fb9d..dbc777d 100644 --- a/tests/testthat/test-BaseProvider.R +++ b/tests/testthat/test-BaseProvider.R @@ -1,46 +1,44 @@ -context("BaseProvider") - aa <- BaseProvider$new() test_that("BaseProvider works", { - expect_is(aa, "BaseProvider") - expect_is(aa, "R6") + expect_s3_class(aa, "BaseProvider") + expect_s3_class(aa, "R6") expect_equal(aa$provider, "BaseProvider") expect_true(is.null(aa$locale)) - expect_is(aa$random_element, "function") - expect_is(aa$random_element(letters), "character") + expect_type(aa$random_element, "closure") + expect_type(aa$random_element(letters), "character") expect_true(aa$random_element(letters) %in% letters) - expect_is(aa$random_int, "function") + expect_type(aa$random_int, "closure") expect_type(aa$random_int(), "double") - expect_is(aa$random_digit, "function") + expect_type(aa$random_digit, "closure") expect_type(aa$random_digit(), "integer") - expect_is(aa$random_digit_not_zero, "function") + expect_type(aa$random_digit_not_zero, "closure") expect_type(aa$random_digit_not_zero(), "integer") - expect_is(aa$random_digit_or_empty, "function") - expect_is(aa$random_digit_or_empty(), "character") + expect_type(aa$random_digit_or_empty, "closure") + expect_type(aa$random_digit_or_empty(), "character") - expect_is(aa$random_digit_not_zero_or_empty, "function") - expect_is(aa$random_digit_not_zero_or_empty(), "character") + expect_type(aa$random_digit_not_zero_or_empty, "closure") + expect_type(aa$random_digit_not_zero_or_empty(), "character") - expect_is(aa$random_letter, "function") - expect_is(aa$random_letter(), "character") + expect_type(aa$random_letter, "closure") + expect_type(aa$random_letter(), "character") - expect_is(aa$numerify, "function") - expect_is(aa$numerify(), "character") + expect_type(aa$numerify, "closure") + expect_type(aa$numerify(), "character") - expect_is(aa$lexify, "function") - expect_is(aa$lexify(), "character") + expect_type(aa$lexify, "closure") + expect_type(aa$lexify(), "character") - expect_is(aa$bothify, "function") - expect_is(aa$bothify(), "character") + expect_type(aa$bothify, "closure") + expect_type(aa$bothify(), "character") - expect_is(aa$check_locale, "function") + expect_type(aa$check_locale, "closure") expect_null(aa$check_locale("en_US")) expect_error(aa$check_locale("en_SS"), "en_SS not in set") }) @@ -50,7 +48,6 @@ test_that("random_element doesn't expand input into a range", { expect_equal(aa$random_element(10), 10) }) -context("BareProvider") barep <- BareProvider$new() test_that("BareProvider basic functionality", { diff --git a/tests/testthat/test-addresses.R b/tests/testthat/test-addresses.R index a75e6c5..bbb2eee 100644 --- a/tests/testthat/test-addresses.R +++ b/tests/testthat/test-addresses.R @@ -1,13 +1,12 @@ -context("AddressProvider works") # Make sure that the inheritance works correctly test_that("AddressProvider basic functionality works", { expect_error(AddressProvider()) aa <- cr_loc_spec_provider("AddressProvider", "en_US") - expect_is(aa, "AddressProvider") - expect_is(aa, "R6") + expect_s3_class(aa, "AddressProvider") + expect_s3_class(aa, "R6") - expect_is(aa$locale, "character") + expect_type(aa$locale, "character") expect_equal(aa$locale, "en_US") }) @@ -23,19 +22,19 @@ test_that("every_locale has the same basic functions", { # the result should be character # and the result should not be empty string # TODO: check if start or end is not space (could indicate missing value) - expect_is(bb$address, "function") + expect_type(bb$address, "closure") expect_type(bb$address(), "character") expect_false(bb$address() == "") - expect_is(bb$city, "function") + expect_type(bb$city, "closure") expect_type(bb$city(), "character") expect_false(bb$city() == "", label = sprintf("city - %s", locale)) - expect_is(bb$street_address, "function") + expect_type(bb$street_address, "closure") expect_type(bb$street_address(), "character") expect_false(bb$street_address() == "", label = sprintf("city - %s", locale)) - expect_is(bb$street_name, "function") + expect_type(bb$street_name, "closure") expect_type(bb$street_name(), "character") expect_false(bb$street_name() == "", label = sprintf("city - %s", locale)) - expect_is(bb$postcode, "function") + expect_type(bb$postcode, "closure") expect_type(bb$postcode(), "character") expect_false(bb$postcode() == "", label = sprintf("postcode - %s", locale)) # locale should match locale @@ -48,29 +47,29 @@ test_that("every_locale has the same basic functions", { test_that("custom functions from AddressProvider_en_US work", { aa <- cr_loc_spec_provider("AddressProvider", "en_US") - expect_is(aa$building_number, "function") - expect_is(aa$building_number(), "character") + expect_type(aa$building_number, "closure") + expect_type(aa$building_number(), "character") expect_equal(length(aa$building_number()), 1) - expect_is(aa$state, "function") - expect_is(aa$state(), "character") + expect_type(aa$state, "closure") + expect_type(aa$state(), "character") expect_equal(length(aa$state()), 1) expect_true(aa$state() %in% aa$.__enclos_env__$private$states) - expect_is(aa$mil_address, "function") - expect_is(aa$mil_address(), "character") + expect_type(aa$mil_address, "closure") + expect_type(aa$mil_address(), "character") expect_equal(length(aa$mil_address()), 1) - expect_is(aa$civ_address, "function") - expect_is(aa$civ_address(), "character") + expect_type(aa$civ_address, "closure") + expect_type(aa$civ_address(), "character") expect_equal(length(aa$civ_address()), 1) }) test_that("custom functions from AddressProvider_nl_NL work", { aa <- cr_loc_spec_provider("AddressProvider", "nl_NL") - expect_is(aa$province, "function") - expect_is(aa$province(), "character") + expect_type(aa$province, "closure") + expect_type(aa$province(), "character") expect_equal(length(aa$province()), 1) expect_true(aa$province() %in% aa$.__enclos_env__$private$provinces) }) diff --git a/tests/testthat/test-backwards-comp.R b/tests/testthat/test-backwards-comp.R index 1be8e6c..22e8e6b 100644 --- a/tests/testthat/test-backwards-comp.R +++ b/tests/testthat/test-backwards-comp.R @@ -4,7 +4,7 @@ ### People hate backwards incompatible packages test_that("base provider exists", { aa <- BaseProvider$new() - expect_is(aa, "R6") + expect_s3_class(aa, "R6") }) test_that("locales exist", { @@ -14,7 +14,7 @@ test_that("locales exist", { settings <- charlatan_settings() expect_type(settings, "list") aa <- fraudster() - expect_is(aa, "R6") + expect_s3_class(aa, "R6") }) test_that("colors exists", { diff --git a/tests/testthat/test-charlatan_locales.R b/tests/testthat/test-charlatan_locales.R index 272f9e2..f7661cc 100644 --- a/tests/testthat/test-charlatan_locales.R +++ b/tests/testthat/test-charlatan_locales.R @@ -1,13 +1,11 @@ -context("charlatan_locales") - test_that("charlatan_locales works", { - expect_is(charlatan_locales, "function") - expect_is(charlatan_locales(), "data.frame") + expect_type(charlatan_locales, "closure") + expect_s3_class(charlatan_locales(), "data.frame") expect_gt(NROW(charlatan_locales()), 40) }) test_that("available_locales works", { - expect_is(available_locales, "character") + expect_type(available_locales, "character") expect_gt(length(available_locales), 10) }) diff --git a/tests/testthat/test-color.R b/tests/testthat/test-color.R index feb7437..f20ef27 100644 --- a/tests/testthat/test-color.R +++ b/tests/testthat/test-color.R @@ -1,21 +1,19 @@ -context("ColorProvider works") - test_that("ColorProvider works", { aa <- ColorProvider_en_US$new() - expect_is(aa, "ColorProvider") - expect_is(aa, "R6") - expect_is(aa$locale, "character") + expect_s3_class(aa, "ColorProvider") + expect_s3_class(aa, "R6") + expect_type(aa$locale, "character") expect_equal(aa$locale, "en_US") - expect_is(aa$all_colors, "list") + expect_type(aa$all_colors, "list") expect_equal(aa$all_colors$AliceBlue, "#F0F8FF") - expect_is(aa$safe_colors, "character") - expect_is(aa$bothify, "function") - expect_is(aa$color_name, "function") + expect_type(aa$safe_colors, "character") + expect_type(aa$bothify, "closure") + expect_type(aa$color_name, "closure") - expect_is(aa$color_name(), "character") - expect_is(aa$hex_color(), "character") - expect_is(aa$safe_color_name(), "character") + expect_type(aa$color_name(), "character") + expect_type(aa$hex_color(), "character") + expect_type(aa$safe_color_name(), "character") expect_error(aa$check_locale("en_asdf")) }) @@ -27,16 +25,16 @@ test_that("ColorProvider locale support works", { test_locale <- function(loc) { bb <- cr_loc_spec_provider("ColorProvider", loc) - expect_is(bb$locale, "character") + expect_type(bb$locale, "character") expect_equal(bb$locale, loc) - expect_is(bb$color_name(), "character") + expect_type(bb$color_name(), "character") expect_true(all(bb$color_name() %in% names(bb$all_colors))) - expect_is(bb$safe_color_name(), "character") + expect_type(bb$safe_color_name(), "character") expect_true(all(bb$safe_color_name() %in% bb$safe_colors)) - expect_is(bb$hex_from_name, "function") + expect_type(bb$hex_from_name, "closure") } locales <- c("en_US", "uk_UA") @@ -45,9 +43,8 @@ test_that("ColorProvider locale support works", { } }) -context("ch color functions work") -test_that("ch color functions error for incorrect input", { +test_that("ch color closures error for incorrect input", { expect_error(ch_color_name(-1)) expect_error(ch_color_name(-99, "uk_UA")) expect_warning(ch_color_name(locale = "ch_AR")) @@ -61,8 +58,8 @@ test_that("ch color functions error for incorrect input", { }) test_that("ch_color_name works", { - expect_is(ch_color_name(), "character") - expect_is(ch_color_name(7), "character") + expect_type(ch_color_name(), "character") + expect_type(ch_color_name(7), "character") expect_equal(length(ch_color_name()), 1) expect_equal(length(ch_color_name(12)), 12) @@ -72,8 +69,8 @@ test_that("ch_color_name works", { }) test_that("ch_safe_color_name works", { - expect_is(ch_safe_color_name(), "character") - expect_is(ch_safe_color_name(5), "character") + expect_type(ch_safe_color_name(), "character") + expect_type(ch_safe_color_name(5), "character") expect_equal(length(ch_safe_color_name()), 1) expect_equal(length(ch_safe_color_name(7)), 7) @@ -83,8 +80,8 @@ test_that("ch_safe_color_name works", { }) test_that("ch_hex_color works", { - expect_is(ch_hex_color(), "character") - expect_is(ch_hex_color(7), "character") + expect_type(ch_hex_color(), "character") + expect_type(ch_hex_color(7), "character") expect_equal(length(ch_hex_color()), 1) expect_equal(length(ch_hex_color(12)), 12) @@ -99,8 +96,8 @@ test_that("ch_hex_color works", { }) test_that("ch_safe_hex_color works", { - expect_is(ch_safe_hex_color(), "character") - expect_is(ch_safe_hex_color(7), "character") + expect_type(ch_safe_hex_color(), "character") + expect_type(ch_safe_hex_color(7), "character") expect_equal(length(ch_safe_hex_color()), 1) expect_equal(length(ch_safe_hex_color(12)), 12) @@ -117,8 +114,8 @@ test_that("ch_safe_hex_color works", { between_0_255 <- function(x) all(0 <= x & x <= 255) test_that("ch_rgb_color works", { - expect_is(ch_rgb_color(), "list") - expect_is(ch_rgb_color(7), "list") + expect_type(ch_rgb_color(), "list") + expect_type(ch_rgb_color(7), "list") expect_equal(length(ch_rgb_color()), 1) expect_equal(length(ch_rgb_color(7)), 7) @@ -131,8 +128,8 @@ test_that("ch_rgb_color works", { }) test_that("ch_rgb_css_color works", { - expect_is(ch_rgb_css_color(), "character") - expect_is(ch_rgb_css_color(7), "character") + expect_type(ch_rgb_css_color(), "character") + expect_type(ch_rgb_css_color(7), "character") expect_equal(length(ch_rgb_css_color()), 1) expect_equal(length(ch_rgb_css_color(7)), 7) diff --git a/tests/testthat/test-company.R b/tests/testthat/test-company.R index 45007e4..d5ddb81 100644 --- a/tests/testthat/test-company.R +++ b/tests/testthat/test-company.R @@ -1,5 +1,3 @@ -context("CompanyProvider works") - test_that("CompanyProvider works", { aa <- CompanyProvider_en_US$new() @@ -17,7 +15,6 @@ test_that("CompanyProvider works", { expect_type(aa$bs(), "character") }) -context("ch_company works") test_that("ch_company", { # temporary allow company locale NULL diff --git a/tests/testthat/test-coordinates.R b/tests/testthat/test-coordinates.R index 759a54a..29b413f 100644 --- a/tests/testthat/test-coordinates.R +++ b/tests/testthat/test-coordinates.R @@ -1,46 +1,48 @@ -context("CoordinateProvider works") - test_that("CoordinateProvider works", { aa <- CoordinateProvider$new() - expect_is(aa, "CoordinateProvider") - expect_is(aa, "R6") + expect_s3_class(aa, "CoordinateProvider") + expect_s3_class(aa, "R6") - expect_is(aa$lat, "function") - expect_is(aa$lat(), "numeric") + expect_type(aa$lat, "closure") + expect_type(aa$lat(), "double") expect_equal(length(aa$lat()), 1) expect_lte(abs(aa$lat()), 90) - expect_is(aa$lon, "function") - expect_is(aa$lon(), "numeric") + expect_type(aa$lon, "closure") + expect_type(aa$lon(), "double") expect_equal(length(aa$lon()), 1) expect_lte(abs(aa$lon()), 180) - - expect_is(aa$position, "function") - expect_is(aa$position(), "numeric") - expect_equal(length(aa$position()), 2) - expect_lte(abs(aa$lon()), 180) + expect_gte(abs(aa$lon()), 0) + + expect_type(aa$position, "closure") + test_that("Coordinate position works", { + res <- aa$position(bbox = c(20, 30, 25, 35)) + expect_gte(res[1], 20) + expect_lte(res[1], 25) + expect_gte(res[2], 30) + expect_lte(res[2], 35) + expect_type(res, "double") + expect_equal(length(res), 2) + }) }) -context("ch_lon fxn") test_that("ch_lon works", { - expect_is(ch_lon(), "numeric") + expect_type(ch_lon(), "double") expect_equal(length(ch_lon(3)), 3) }) -context("ch_lat fxn") test_that("ch_lat works", { - expect_is(ch_lat(), "numeric") + expect_type(ch_lat(), "double") expect_equal(length(ch_lat(10)), 10) }) -context("ch_position fxn") test_that("ch_position fxn works", { - expect_is(ch_position(), "numeric") - expect_is(ch_position(30), "list") - expect_is(unlist(ch_position(30)), "numeric") + expect_type(ch_position(), "double") + expect_type(ch_position(30), "list") + expect_type(unlist(ch_position(30)), "double") expect_equal(length(ch_position(30)), 30) }) diff --git a/tests/testthat/test-credit_card.R b/tests/testthat/test-credit_card.R index fc4f7d4..63b4afd 100644 --- a/tests/testthat/test-credit_card.R +++ b/tests/testthat/test-credit_card.R @@ -1,52 +1,47 @@ -context("CreditCardProvider works") - test_that("CreditCardProvider works", { aa <- CreditCardProvider$new() - expect_is(aa, "CreditCardProvider") - expect_is(aa, "R6") + expect_s3_class(aa, "CreditCardProvider") + expect_s3_class(aa, "R6") - expect_is(aa$credit_card_number, "function") - expect_is(aa$credit_card_number(), "character") - expect_is(as.numeric(aa$credit_card_number()), "numeric") + expect_type(aa$credit_card_number, "closure") + expect_type(aa$credit_card_number(), "character") + expect_type(as.numeric(aa$credit_card_number()), "double") - expect_is(aa$credit_card_provider, "function") - expect_is(aa$credit_card_provider(), "character") + expect_type(aa$credit_card_provider, "closure") + expect_type(aa$credit_card_provider(), "character") - expect_is(aa$credit_card_security_code, "function") - expect_is(aa$credit_card_security_code(), "character") - expect_is(as.numeric(aa$credit_card_security_code()), "numeric") + expect_type(aa$credit_card_security_code, "closure") + expect_type(aa$credit_card_security_code(), "character") + expect_type(as.numeric(aa$credit_card_security_code()), "double") }) test_that("ColorProvider locale support works", { bb <- CreditCardProvider$new()$credit_card_type() - expect_is(bb$length, "numeric") - expect_is(bb$name, "character") - expect_is(bb$prefixes, "character") - expect_is(bb$security_code, "character") - expect_is(bb$security_code_length, "numeric") + expect_type(bb$length, "double") + expect_type(bb$name, "character") + expect_type(bb$prefixes, "character") + expect_type(bb$security_code, "character") + expect_type(bb$security_code_length, "double") }) -context("ch_credit_card_provider fxn works") test_that("ch_credit_card_provider", { - expect_is(ch_credit_card_provider(), "character") + expect_type(ch_credit_card_provider(), "character") expect_equal(length(ch_credit_card_provider(3)), 3) }) -context("ch_credit_card_number fxn works") test_that("ch_credit_card_number", { - expect_is(ch_credit_card_number(), "character") - expect_is(as.numeric(ch_credit_card_number()), "numeric") + expect_type(ch_credit_card_number(), "character") + expect_type(as.numeric(ch_credit_card_number()), "double") expect_equal(length(ch_credit_card_number(10)), 10) }) -context("ch_credit_card_security_code fxn works") test_that("ch_credit_card_security_code", { - expect_is(ch_credit_card_security_code(), "character") - expect_is(as.numeric(ch_credit_card_security_code()), "numeric") + expect_type(ch_credit_card_security_code(), "character") + expect_type(as.numeric(ch_credit_card_security_code()), "double") expect_equal(length(ch_credit_card_security_code(30)), 30) }) diff --git a/tests/testthat/test-currency.R b/tests/testthat/test-currency.R index 5ee9cb4..11e6dec 100644 --- a/tests/testthat/test-currency.R +++ b/tests/testthat/test-currency.R @@ -1,20 +1,17 @@ -context("CurrencyProvider works") - test_that("CurrencyProvider works", { aa <- CurrencyProvider$new() - expect_is(aa, "CurrencyProvider") - expect_is(aa, "R6") + expect_s3_class(aa, "CurrencyProvider") + expect_s3_class(aa, "R6") - expect_is(aa$render, "function") - expect_is(aa$render(), "character") + expect_type(aa$render, "closure") + expect_type(aa$render(), "character") expect_equal(nchar(aa$render()), 3) expect_match(aa$render(), "[A-Z]") }) -context("ch_currency fxn") test_that("ch_currency works", { - expect_is(ch_currency(), "character") + expect_type(ch_currency(), "character") expect_equal(length(ch_currency(3)), 3) }) diff --git a/tests/testthat/test-datetime.R b/tests/testthat/test-datetime.R index 79ce358..bc44bce 100644 --- a/tests/testthat/test-datetime.R +++ b/tests/testthat/test-datetime.R @@ -1,45 +1,43 @@ -context("DateTimeProvider works") test_that("DateTimeProvider works", { aa <- DateTimeProvider$new() - expect_is(aa, "DateTimeProvider") - expect_is(aa, "R6") + expect_s3_class(aa, "DateTimeProvider") + expect_s3_class(aa, "R6") - expect_is(aa$unix_time, "function") + expect_type(aa$unix_time, "closure") expect_type(aa$unix_time(), "double") - expect_is(aa$date, "function") + expect_type(aa$date, "closure") expect_type(aa$date("%Y"), "character") expect_equal(nchar(aa$date("%Y")), 4) - expect_is(aa$date_time, "function") - expect_is(aa$date_time(), "POSIXct") + expect_type(aa$date_time, "closure") + expect_s3_class(aa$date_time(), "POSIXct") expect_type(aa$date_time(), "double") - expect_is(aa$year, "function") + expect_type(aa$year, "closure") expect_type(aa$year(), "character") expect_equal(nchar(aa$year()), 4) - expect_is(aa$century, "function") - expect_is(aa$century(), "character") + expect_type(aa$century, "closure") + expect_type(aa$century(), "character") - expect_is(aa$timezone, "function") - expect_is(aa$timezone(), "list") + expect_type(aa$timezone, "closure") + expect_type(aa$timezone(), "list") }) -context("ch_timezone works") test_that("ch_timezone", { aa <- ch_timezone() - expect_is(aa, "list") - expect_is(aa[[1]], "list") - expect_is(aa[[1]][[1]], "character") - expect_is(aa[[1]]$code, "character") - expect_is(aa[[1]]$continent, "character") - expect_is(aa[[1]]$name, "character") - expect_is(aa[[1]]$capital, "character") + expect_type(aa, "list") + expect_type(aa[[1]], "list") + expect_type(aa[[1]][[1]], "character") + expect_type(aa[[1]]$code, "character") + expect_type(aa[[1]]$continent, "character") + expect_type(aa[[1]]$name, "character") + expect_type(aa[[1]]$capital, "character") }) test_that("ch_timezone - n parameter", { @@ -50,7 +48,6 @@ test_that("ch_timezone - n parameter", { -context("ch_unix_time works") test_that("ch_unix_time", { aa <- ch_unix_time() @@ -66,12 +63,11 @@ test_that("ch_unix_time - n parameter", { -context("ch_date_time works") test_that("ch_date_time", { aa <- ch_date_time() # class posixct - expect_is(aa, "POSIXct") + expect_s3_class(aa, "POSIXct") # its type double expect_type(aa, "double") }) diff --git a/tests/testthat/test-doi.R b/tests/testthat/test-doi.R index 097f729..2edfff8 100644 --- a/tests/testthat/test-doi.R +++ b/tests/testthat/test-doi.R @@ -1,26 +1,22 @@ -context("DOIProvider works") - test_that("DOIProvider works", { aa <- DOIProvider$new() - expect_is(aa, "DOIProvider") - expect_is(aa, "R6") + expect_s3_class(aa, "DOIProvider") + expect_s3_class(aa, "R6") - expect_is(aa$funs, "list") - expect_is(aa$funs$a, "function") - expect_is(aa$funs$a(), "character") - expect_is(aa$funs$b, "function") - expect_is(aa$funs$b(), "character") - expect_is(aa$render, "function") - expect_is(aa$render(), "character") + expect_type(aa$funs, "list") + expect_type(aa$funs$a, "closure") + expect_type(aa$funs$a(), "character") + expect_type(aa$funs$b, "closure") + expect_type(aa$funs$b(), "character") + expect_type(aa$render, "closure") + expect_type(aa$render(), "character") }) -context("ch_doi works") - test_that("ch_doi", { aa <- ch_doi() - expect_is(aa, "character") + expect_type(aa, "character") expect_gt(nchar(aa), 0) }) diff --git a/tests/testthat/test-fraudster.R b/tests/testthat/test-fraudster.R index 9ac1428..8aee6a6 100644 --- a/tests/testthat/test-fraudster.R +++ b/tests/testthat/test-fraudster.R @@ -1,13 +1,11 @@ -context("fraudster") - test_that("fraudster works", { aa <- fraudster() - expect_is(aa, "FraudsterClient") + expect_s3_class(aa, "FraudsterClient") expect_equal(aa$locale, "en_US") - expect_is(aa$beta, "function") - expect_is(aa$color_name, "function") - expect_is(aa$color_name(), "character") + expect_type(aa$beta, "closure") + expect_type(aa$color_name, "closure") + expect_type(aa$color_name(), "character") }) test_that("fraudster - all the things work", { @@ -24,40 +22,40 @@ test_that("fraudster - all the things work", { } - expect_is(aa$job(), "character") - expect_is(aa$name(), "character") - expect_is(aa$color_name(), "character") - expect_is(aa$safe_color_name(), "character") - expect_is(aa$hex_color(), "character") - expect_is(aa$safe_hex_color(), "character") + expect_type(aa$job(), "character") + expect_type(aa$name(), "character") + expect_type(aa$color_name(), "character") + expect_type(aa$safe_color_name(), "character") + expect_type(aa$hex_color(), "character") + expect_type(aa$safe_hex_color(), "character") # rgb_color() returns a list of RGB vectors - expect_is(aa$rgb_color(), "list") - expect_is(aa$rgb_color()[[1]], "integer") - expect_is(aa$rgb_css_color(), "character") + expect_type(aa$rgb_color(), "list") + expect_type(aa$rgb_color()[[1]], "integer") + expect_type(aa$rgb_css_color(), "character") expect_type(aa$lat(), "double") expect_type(aa$lon(), "double") expect_type(aa$position(), "double") - expect_is(aa$doi(), "character") - expect_is(aa$timezone(), "list") + expect_type(aa$doi(), "character") + expect_type(aa$timezone(), "list") expect_type(aa$unix_time(), "double") - expect_is(aa$date_time(), "POSIXct") - expect_is(aa$genus(), "character") - expect_is(aa$epithet(), "character") - expect_is(aa$species(), "character") - expect_is(aa$sequence(), "character") - expect_is(aa$phone_number(), "character") + expect_s3_class(aa$date_time(), "POSIXct") + expect_type(aa$genus(), "character") + expect_type(aa$epithet(), "character") + expect_type(aa$species(), "character") + expect_type(aa$sequence(), "character") + expect_type(aa$phone_number(), "character") expect_type(aa$double(), "double") expect_type(aa$integer(), "double") expect_type(aa$uniform(), "double") expect_type(aa$norm(), "double") expect_type(aa$lnorm(), "double") expect_type(aa$beta(shape1 = 1, shape2 = 1), "double") - expect_is(aa$currency(), "character") - expect_is(aa$credit_card_number(), "character") - expect_is(aa$credit_card_provider(), "character") - expect_is(aa$credit_card_security_code(), "character") + expect_type(aa$currency(), "character") + expect_type(aa$credit_card_number(), "character") + expect_type(aa$credit_card_provider(), "character") + expect_type(aa$credit_card_security_code(), "character") expect_gt(nchar(aa$address()), 0) expect_gt(nchar(aa$company()), 0) expect_gt(nchar(aa$element()), 0) @@ -78,8 +76,8 @@ test_that("fraudster locale support works", { regexp = "does not have locale fr_FR" ) - expect_is(bb, "FraudsterClient") - expect_is(bb$locale, "character") + expect_s3_class(bb, "FraudsterClient") + expect_type(bb$locale, "character") expect_equal(bb$locale, "fr_FR") # some funs don't have support in certain locales @@ -91,15 +89,14 @@ test_that("fraudster - fails well", { }) -context("FraudsterClient") test_that("FraudsterClient works", { aa <- FraudsterClient$new() - expect_is(aa, "FraudsterClient") + expect_s3_class(aa, "FraudsterClient") expect_equal(aa$locale, "en_US") - expect_is(aa$beta, "function") - expect_is(aa$color_name, "function") + expect_type(aa$beta, "closure") + expect_type(aa$color_name, "closure") }) test_that("FraudsterClient - fails well", { diff --git a/tests/testthat/test-generate.R b/tests/testthat/test-generate.R index e16058e..f5628a6 100644 --- a/tests/testthat/test-generate.R +++ b/tests/testthat/test-generate.R @@ -1,14 +1,12 @@ -context("ch_generate") - test_that("ch_generate works - default settings", { aa <- ch_generate() - expect_is(aa, "data.frame") - expect_is(aa, "tbl_df") + expect_s3_class(aa, "data.frame") + expect_s3_class(aa, "tbl_df") expect_named(aa, c("name", "job", "phone_number")) - expect_is(aa$name, "character") - expect_is(aa$job, "character") - expect_is(aa$phone_number, "character") + expect_type(aa$name, "character") + expect_type(aa$job, "character") + expect_type(aa$phone_number, "character") expect_equal(NROW(aa), 10) }) @@ -16,13 +14,13 @@ test_that("ch_generate works - default settings", { test_that("ch_generate works - choose fields", { aa <- ch_generate("job") - expect_is(aa, "data.frame") - expect_is(aa, "tbl_df") + expect_s3_class(aa, "data.frame") + expect_s3_class(aa, "tbl_df") expect_named(aa, "job") aa <- ch_generate("job", "currency") - expect_is(aa, "data.frame") - expect_is(aa, "tbl_df") + expect_s3_class(aa, "data.frame") + expect_s3_class(aa, "tbl_df") expect_named(aa, c("job", "currency")) }) @@ -41,13 +39,13 @@ test_that("ch_generate works - locale", { bb <- ch_generate(locale = "fr_FR") cc <- ch_generate(locale = "fr_CH") - expect_is(aa, "data.frame") + expect_s3_class(aa, "data.frame") expect_equal(NROW(aa), 10) - expect_is(bb, "data.frame") + expect_s3_class(bb, "data.frame") expect_equal(NROW(bb), 10) - expect_is(cc, "data.frame") + expect_s3_class(cc, "data.frame") expect_equal(NROW(cc), 10) }) diff --git a/tests/testthat/test-internet.R b/tests/testthat/test-internet.R index 9714ebd..9071445 100644 --- a/tests/testthat/test-internet.R +++ b/tests/testthat/test-internet.R @@ -1,11 +1,7 @@ -context("InternetProvider works") - - - test_that("InternetProvider works", { aa <- InternetProvider_en_US$new() - expect_is(aa, "InternetProvider") - expect_is(aa, "R6") + expect_s3_class(aa, "InternetProvider") + expect_s3_class(aa, "R6") # we don't have providers for every locale, so some # providers that are called from InternetProvider will # default to en_US and warn us. That is good and useful but @@ -18,6 +14,9 @@ test_that("InternetProvider works", { lp <- locale_mismatch("InternetProvider", "LoremProvider") pp <- locale_mismatch("InternetProvider", "PersonProvider") warn_locales <- unique(c(cp, lp, pp)) + local_edition(2) ## some of these providers have multiple subproviders and + # therefore multiple warnings, but version 3 of testthat only captures the + # first warning for (loc in aa$allowed_locales()) { # bit of a workaround to make sure we capture warnings for a subset only. @@ -33,23 +32,23 @@ test_that("InternetProvider works", { ip <- cr_loc_spec_provider("InternetProvider", loc) } - expect_is(ip$tld, "function") - expect_is(ip$tld(), "character") + expect_type(ip$tld, "closure") + expect_type(ip$tld(), "character") - expect_is(ip$ascii_email, "function") + expect_type(ip$ascii_email, "closure") expect_match(ip$ascii_email(), "\\@") - expect_is(ip$domain_name, "function") - expect_is(ip$domain_name(), "character") + expect_type(ip$domain_name, "closure") + expect_type(ip$domain_name(), "character") - expect_is(ip$email, "function") - expect_is(ip$email(), "character") + expect_type(ip$email, "closure") + expect_type(ip$email(), "character") expect_match(ip$email(), "\\@") - expect_is(ip$image_url(), "character") + expect_type(ip$image_url(), "character") expect_match(ip$image_url(), "http") - expect_is(ip$slug(), "character") + expect_type(ip$slug(), "character") expect_match(ip$slug(), "-") expect_match(ip$slug(), "[A-Za-z]") } @@ -60,15 +59,15 @@ test_that("IP address generation works", { aa <- InternetProvider_en_US$new() - expect_is(aa$ipv4(), "character") + expect_type(aa$ipv4(), "character") expect_true(ipaddress::is_ipv4(ipaddress::ip_address(aa$ipv4()))) - expect_is(aa$ipv4(network = TRUE), "character") + expect_type(aa$ipv4(network = TRUE), "character") expect_true(ipaddress::is_ipv4(ipaddress::ip_network(aa$ipv4(network = TRUE)))) - expect_is(aa$ipv6(), "character") + expect_type(aa$ipv6(), "character") expect_true(ipaddress::is_ipv6(ipaddress::ip_address(aa$ipv6()))) - expect_is(aa$ipv6(network = TRUE), "character") + expect_type(aa$ipv6(network = TRUE), "character") expect_true(ipaddress::is_ipv6(ipaddress::ip_network(aa$ipv6(network = TRUE)))) }) diff --git a/tests/testthat/test-job.R b/tests/testthat/test-job.R index 5cc542b..3707319 100644 --- a/tests/testthat/test-job.R +++ b/tests/testthat/test-job.R @@ -1,5 +1,3 @@ -context("JobProvider works") - skip_on_cran() test_that("JobProvider works", { @@ -10,16 +8,13 @@ test_that("JobProvider works", { # print(loc) provider_test <- cr_loc_spec_provider(provider, loc) job <- provider_test$render() - expect_is(job, "character") + expect_type(job, "character") expect_gt(nchar(job), 0) expect_true(job %in% provider_test$.__enclos_env__$private$formats) } }) -context("ch_job works") - - test_that("ch_job - n parameter", { expect_equal(length(ch_job(n = 10)), 10) expect_equal(length(ch_job(n = 100)), 100) diff --git a/tests/testthat/test-lorem.R b/tests/testthat/test-lorem.R index 5bd61d4..9c80e18 100644 --- a/tests/testthat/test-lorem.R +++ b/tests/testthat/test-lorem.R @@ -1,39 +1,37 @@ -context("LoremProvider works") - test_that("LoremProvider works", { for (loc in LoremProvider_en_US$new()$allowed_locales()) { aa <- cr_loc_spec_provider("LoremProvider", loc) - expect_is(aa, "LoremProvider") - expect_is(aa, "R6") + expect_s3_class(aa, "LoremProvider") + expect_s3_class(aa, "R6") - expect_is(aa$word, "function") - expect_is(aa$word(), "character") + expect_type(aa$word, "closure") + expect_type(aa$word(), "character") expect_equal(length(aa$word()), 1) expect_false(aa$word() == "") - expect_is(aa$words, "function") - expect_is(aa$words(), "character") + expect_type(aa$words, "closure") + expect_type(aa$words(), "character") expect_equal(length(aa$words()), 3) - expect_is(aa$sentence, "function") - expect_is(aa$sentence(), "character") + expect_type(aa$sentence, "closure") + expect_type(aa$sentence(), "character") expect_equal(length(aa$sentence()), 1) - expect_is(aa$sentences, "function") - expect_is(aa$sentences(), "character") + expect_type(aa$sentences, "closure") + expect_type(aa$sentences(), "character") expect_equal(length(aa$sentences()), 3) - expect_is(aa$paragraph, "function") - expect_is(aa$paragraph(), "character") + expect_type(aa$paragraph, "closure") + expect_type(aa$paragraph(), "character") expect_equal(length(aa$paragraph()), 1) - expect_is(aa$paragraphs, "function") - expect_is(aa$paragraphs(), "character") + expect_type(aa$paragraphs, "closure") + expect_type(aa$paragraphs(), "character") expect_equal(length(aa$paragraphs()), 3) - expect_is(aa$text, "function") - expect_is(aa$text(), "character") + expect_type(aa$text, "closure") + expect_type(aa$text(), "character") expect_equal(length(aa$text()), 1) } }) diff --git a/tests/testthat/test-missing.R b/tests/testthat/test-missing.R index 41e74f3..5c4cb9b 100644 --- a/tests/testthat/test-missing.R +++ b/tests/testthat/test-missing.R @@ -1,5 +1,3 @@ -context("MissingDataProvider") - skip_on_cran() test_that("MissingDataProvider works", { @@ -7,12 +5,12 @@ test_that("MissingDataProvider works", { letters2 <- aa$make_missing(letters) letters3 <- aa$make_missing(letters) - expect_is(aa, "R6") - expect_is(aa, "MissingDataProvider") + expect_s3_class(aa, "R6") + expect_s3_class(aa, "MissingDataProvider") - expect_is(aa$make_missing, "function") + expect_type(aa$make_missing, "closure") - expect_is(letters2, "character") + expect_type(letters2, "character") # original and with missing data are not the same expect_false(identical(letters, letters2)) @@ -30,14 +28,13 @@ test_that("MissingDataProvider fails well", { }) -context("ch_missing") test_that("ch_missing works", { letters2 <- ch_missing(letters) letters3 <- ch_missing(letters) - expect_is(letters2, "character") - expect_is(letters3, "character") + expect_type(letters2, "character") + expect_type(letters3, "character") # original and with missing data are not the same expect_false(identical(letters, letters2)) diff --git a/tests/testthat/test-numerics.R b/tests/testthat/test-numerics.R index 5ad62fd..c71d7a0 100644 --- a/tests/testthat/test-numerics.R +++ b/tests/testthat/test-numerics.R @@ -1,29 +1,27 @@ -context("NumericsProvider") - test_that("NumericsProvider works", { aa <- NumericsProvider$new() - expect_is(aa, "R6") - expect_is(aa, "NumericsProvider") + expect_s3_class(aa, "R6") + expect_s3_class(aa, "NumericsProvider") - expect_is(aa$double, "function") + expect_type(aa$double, "closure") expect_type(aa$double(), "double") - expect_is(aa$integer, "function") + expect_type(aa$integer, "closure") + expect_type(aa$integer(), "double") expect_type(aa$integer(), "double") - expect_is(aa$integer(), "numeric") - expect_is(aa$unif, "function") + expect_type(aa$unif, "closure") + expect_type(aa$unif(), "double") expect_type(aa$unif(), "double") - expect_is(aa$unif(), "numeric") - expect_is(aa$norm, "function") + expect_type(aa$norm, "closure") expect_type(aa$norm(), "double") - expect_is(aa$lnorm, "function") + expect_type(aa$lnorm, "closure") expect_type(aa$lnorm(), "double") - expect_is(aa$beta, "function") + expect_type(aa$beta, "closure") expect_type(aa$beta(10, 1, 1), "double") }) @@ -34,7 +32,6 @@ test_that("NumericsProvider works", { # ch_lnorm # ch_beta -context("ch_double") test_that("ch_double works", { expect_type(ch_double(), "double") expect_equal(length(ch_double(n = 10)), 10) @@ -42,7 +39,6 @@ test_that("ch_double works", { expect_equal(length(ch_double(n = 500)), 500) }) -context("ch_integer") test_that("ch_integer works", { expect_type(ch_integer(), "double") expect_equal(length(ch_integer(n = 10)), 10) @@ -50,7 +46,6 @@ test_that("ch_integer works", { expect_equal(length(ch_integer(n = 500)), 500) }) -context("ch_unif") test_that("ch_unif works", { expect_type(ch_unif(), "double") expect_equal(length(ch_unif(n = 10)), 10) @@ -58,7 +53,6 @@ test_that("ch_unif works", { expect_equal(length(ch_unif(n = 500)), 500) }) -context("ch_norm") test_that("ch_norm works", { expect_type(ch_norm(), "double") expect_equal(length(ch_norm(n = 10)), 10) @@ -66,7 +60,6 @@ test_that("ch_norm works", { expect_equal(length(ch_norm(n = 500)), 500) }) -context("ch_lnorm") test_that("ch_lnorm works", { expect_type(ch_lnorm(), "double") expect_equal(length(ch_lnorm(n = 10)), 10) @@ -75,7 +68,6 @@ test_that("ch_lnorm works", { }) -context("ch_beta") test_that("ch_beta works", { expect_type(ch_beta(shape1 = 10, shape2 = 1), "double") expect_equal(length(ch_beta(n = 10, shape1 = 10, shape2 = 1)), 10) diff --git a/tests/testthat/test-person-funs.R b/tests/testthat/test-person-funs.R index 0b0e947..3155025 100644 --- a/tests/testthat/test-person-funs.R +++ b/tests/testthat/test-person-funs.R @@ -1,7 +1,7 @@ test_that("ch_name works", { aa <- ch_name() - expect_is(aa, "character") + expect_type(aa, "character") }) test_that("ch_name - n parameter", { @@ -13,7 +13,7 @@ test_that("ch_name - n parameter", { test_that("ch_name works for all locales", { test_locale <- function(loc) { res <- ch_name(100, locale = loc) - expect_is(res, "character") + expect_type(res, "character") expect_equal(trimws(res), res) } diff --git a/tests/testthat/test-person.R b/tests/testthat/test-person.R index a736cc9..72f1ed0 100644 --- a/tests/testthat/test-person.R +++ b/tests/testthat/test-person.R @@ -1,45 +1,43 @@ -context("PersonProvider") - test_that("PersonProvider works", { aa <- PersonProvider_en_US$new() expect_equal(aa$locale, "en_US") - expect_is(aa, "R6") - expect_is(aa, "PersonProvider") + expect_s3_class(aa, "R6") + expect_s3_class(aa, "PersonProvider") - expect_is(aa$render, "function") + expect_type(aa$render, "closure") - expect_is(aa$render(), "character") + expect_type(aa$render(), "character") - expect_is(aa$first_name(), "character") - expect_is(aa$first_name_female(), "character") - expect_is(aa$first_name_male(), "character") - expect_is(aa$last_name(), "character") - expect_is(aa$last_name_female(), "character") - expect_is(aa$last_name_male(), "character") - expect_is(aa$prefix(), "character") - expect_is(aa$prefix_female(), "character") - expect_is(aa$prefix_male(), "character") - expect_is(aa$suffix(), "character") - expect_is(aa$suffix_female(), "character") - expect_is(aa$suffix_male(), "character") + expect_type(aa$first_name(), "character") + expect_type(aa$first_name_female(), "character") + expect_type(aa$first_name_male(), "character") + expect_type(aa$last_name(), "character") + expect_type(aa$last_name_female(), "character") + expect_type(aa$last_name_male(), "character") + expect_type(aa$prefix(), "character") + expect_type(aa$prefix_female(), "character") + expect_type(aa$prefix_male(), "character") + expect_type(aa$suffix(), "character") + expect_type(aa$suffix_female(), "character") + expect_type(aa$suffix_male(), "character") aa <- cr_loc_spec_provider("PersonProvider", "fi_FI") expect_equal(aa$locale, "fi_FI") - expect_is(aa$render(), "character") - expect_is(aa$first_name(), "character") - expect_is(aa$first_name_female(), "character") - expect_is(aa$first_name_male(), "character") - expect_is(aa$last_name(), "character") - expect_is(aa$last_name_female(), "character") - expect_is(aa$last_name_male(), "character") - expect_is(aa$prefix(), "character") - expect_is(aa$prefix_female(), "character") - expect_is(aa$prefix_male(), "character") - expect_is(aa$suffix(), "character") - expect_is(aa$suffix_female(), "character") - expect_is(aa$suffix_male(), "character") + expect_type(aa$render(), "character") + expect_type(aa$first_name(), "character") + expect_type(aa$first_name_female(), "character") + expect_type(aa$first_name_male(), "character") + expect_type(aa$last_name(), "character") + expect_type(aa$last_name_female(), "character") + expect_type(aa$last_name_male(), "character") + expect_type(aa$prefix(), "character") + expect_type(aa$prefix_female(), "character") + expect_type(aa$prefix_male(), "character") + expect_type(aa$suffix(), "character") + expect_type(aa$suffix_female(), "character") + expect_type(aa$suffix_male(), "character") }) test_that("all locales have the basic functionality", { @@ -49,14 +47,14 @@ test_that("all locales have the basic functionality", { aa <- cr_loc_spec_provider("PersonProvider", loc) expect_equal(aa$locale, loc) expect_false(aa$render() == " ", label = loc) - expect_is(aa$render(), "character") + expect_type(aa$render(), "character") expect_gt(nchar(aa$first_name()), 0, label = loc) - expect_is(aa$first_name_female(), "character") - expect_is(aa$first_name_male(), "character") - expect_is(aa$last_name(), "character") + expect_type(aa$first_name_female(), "character") + expect_type(aa$first_name_male(), "character") + expect_type(aa$last_name(), "character") expect_gt(nchar(aa$last_name()), 0, label = loc) - expect_is(aa$last_name_female(), "character") - expect_is(aa$last_name_male(), "character") + expect_type(aa$last_name_female(), "character") + expect_type(aa$last_name_male(), "character") } }) @@ -64,24 +62,24 @@ test_that("specific locales have specific functions", { # prefixes for (loc in c("en_US", "fa_IR", "ne_NP", "pl_PL", "no_NO")) { aa <- cr_loc_spec_provider("PersonProvider", loc) - expect_is(aa$prefix(), "character") - expect_is(aa$prefix_female(), "character") - expect_is(aa$prefix_male(), "character") + expect_type(aa$prefix(), "character") + expect_type(aa$prefix_female(), "character") + expect_type(aa$prefix_male(), "character") } # suffixes for (loc in c("en_US")) { aa <- cr_loc_spec_provider("PersonProvider", loc) - expect_is(aa$suffix(), "character") - expect_is(aa$suffix_female(), "character") - expect_is(aa$suffix_male(), "character") + expect_type(aa$suffix(), "character") + expect_type(aa$suffix_female(), "character") + expect_type(aa$suffix_male(), "character") } # japanese ja_jp <- cr_loc_spec_provider("PersonProvider", "ja_JP") - expect_is(ja_jp$first_kana_name(), "character") - expect_is(ja_jp$kana_name(), "character") - expect_is(ja_jp$last_kana_name(), "character") - expect_is(ja_jp$first_kana_name_male(), "character") - expect_is(ja_jp$first_kana_name_female(), "character") + expect_type(ja_jp$first_kana_name(), "character") + expect_type(ja_jp$kana_name(), "character") + expect_type(ja_jp$last_kana_name(), "character") + expect_type(ja_jp$first_kana_name_male(), "character") + expect_type(ja_jp$first_kana_name_female(), "character") }) diff --git a/tests/testthat/test-phonenumber.R b/tests/testthat/test-phonenumber.R index 37d62fc..1afffbd 100644 --- a/tests/testthat/test-phonenumber.R +++ b/tests/testthat/test-phonenumber.R @@ -1,16 +1,14 @@ -context("PhoneNumberProvider works") - test_that("PhoneNumberProvider works", { aa <- PhoneNumberProvider_en_US$new() - expect_is(aa, "PhoneNumberProvider") - expect_is(aa, "R6") + expect_s3_class(aa, "PhoneNumberProvider") + expect_s3_class(aa, "R6") - expect_is(aa$render, "function") - expect_is(aa$render(), "character") + expect_type(aa$render, "closure") + expect_type(aa$render(), "character") - expect_is(PhoneNumberProvider_fr_FR$new()$render(), "character") - expect_is(PhoneNumberProvider_sk_SK$new()$render(), "character") - expect_is(PhoneNumberProvider_en_AU$new()$render(), "character") - expect_is(PhoneNumberProvider_es_PE$new()$render(), "character") + expect_type(PhoneNumberProvider_fr_FR$new()$render(), "character") + expect_type(PhoneNumberProvider_sk_SK$new()$render(), "character") + expect_type(PhoneNumberProvider_en_AU$new()$render(), "character") + expect_type(PhoneNumberProvider_es_PE$new()$render(), "character") }) diff --git a/tests/testthat/test-sequences.R b/tests/testthat/test-sequences.R index 0481c60..114e183 100644 --- a/tests/testthat/test-sequences.R +++ b/tests/testthat/test-sequences.R @@ -1,21 +1,18 @@ -context("SequenceProvider") - test_that("SequenceProvider works", { aa <- SequenceProvider$new() - expect_is(aa, "R6") - expect_is(aa, "SequenceProvider") + expect_s3_class(aa, "R6") + expect_s3_class(aa, "SequenceProvider") - expect_is(aa$render, "function") - expect_is(aa$render(), "character") + expect_type(aa$render, "closure") + expect_type(aa$render(), "character") }) -context("ch_gene_sequence") test_that("ch_gene_sequence works", { aa <- ch_gene_sequence() - expect_is(aa, "character") + expect_type(aa, "character") expect_equal(length(ch_gene_sequence(n = 10)), 10) expect_equal(length(ch_gene_sequence(n = 100)), 100) diff --git a/tests/testthat/test-settings.R b/tests/testthat/test-settings.R index 0a55723..eaef505 100644 --- a/tests/testthat/test-settings.R +++ b/tests/testthat/test-settings.R @@ -1,9 +1,7 @@ -context("charlatan_settings") - test_that("charlatan_settings - default", { aa <- charlatan_settings() - expect_is(aa, "list") + expect_type(aa, "list") expect_named(aa, "global_messy") expect_null(aa$global_messy) }) @@ -11,7 +9,7 @@ test_that("charlatan_settings - default", { test_that("charlatan_settings - set messy to TRUE", { aa <- charlatan_settings(messy = TRUE) - expect_is(aa, "list") + expect_type(aa, "list") expect_named(aa, "global_messy") expect_true(aa$global_messy) }) diff --git a/tests/testthat/test-ssn.R b/tests/testthat/test-ssn.R index 266b37d..56d02bf 100644 --- a/tests/testthat/test-ssn.R +++ b/tests/testthat/test-ssn.R @@ -1,14 +1,12 @@ -context("SSNProvider works") - test_that("SSNProvider works", { for (loc in SSNProvider_en_US$new()$allowed_locales()) { aa <- cr_loc_spec_provider("SSNProvider", loc) expect_equal(aa$locale, loc) - expect_is(aa, "SSNProvider") - expect_is(aa, "R6") + expect_s3_class(aa, "SSNProvider") + expect_s3_class(aa, "R6") - expect_is(aa$render, "function") - expect_is(aa$render(), "character") + expect_type(aa$render, "closure") + expect_type(aa$render(), "character") } }) test_that("SSNProvider en_US", { @@ -21,11 +19,8 @@ test_that("SSNProvider nl_NL", { expect_match(aa$render(), "\\d{9}") }) - -context("ch_ssn works") - test_that("ch_ssn", { - expect_is(ch_ssn(), "character") + expect_type(ch_ssn(), "character") expect_match(ch_ssn(), "\\d\\d\\d-\\d\\d-\\d\\d\\d\\d") expect_equal(length(ch_ssn(3)), 3) }) diff --git a/tests/testthat/test-taxonomy.R b/tests/testthat/test-taxonomy.R index 120475e..a0c631e 100644 --- a/tests/testthat/test-taxonomy.R +++ b/tests/testthat/test-taxonomy.R @@ -1,19 +1,17 @@ -context("TaxonomyProvider") - test_that("TaxonomyProvider works", { charlatan_settings() aa <- TaxonomyProvider_en_US$new() - expect_is(aa, "R6") - expect_is(aa, "TaxonomyProvider") + expect_s3_class(aa, "R6") + expect_s3_class(aa, "TaxonomyProvider") - expect_is(aa$genus, "function") - expect_is(aa$epithet, "function") - expect_is(aa$species, "function") + expect_type(aa$genus, "closure") + expect_type(aa$epithet, "closure") + expect_type(aa$species, "closure") - expect_is(aa$genus(), "character") - expect_is(aa$epithet(), "character") - expect_is(aa$species(), "character") + expect_type(aa$genus(), "character") + expect_type(aa$epithet(), "character") + expect_type(aa$species(), "character") expect_true(grepl( "[[:digit:]]", @@ -27,11 +25,10 @@ test_that("TaxonomyProvider works", { }) -context("ch_taxonomic_genus") test_that("ch_taxonomic_genus works", { aa <- ch_taxonomic_genus() - expect_is(aa, "character") + expect_type(aa, "character") expect_equal(length(ch_taxonomic_genus(n = 10)), 10) expect_equal(length(ch_taxonomic_genus(n = 100)), 100) @@ -39,11 +36,11 @@ test_that("ch_taxonomic_genus works", { }) -context("ch_taxonomic_epithet") + test_that("ch_taxonomic_epithet works", { aa <- ch_taxonomic_epithet() - expect_is(aa, "character") + expect_type(aa, "character") expect_equal(length(ch_taxonomic_epithet(n = 10)), 10) expect_equal(length(ch_taxonomic_epithet(n = 100)), 100) @@ -51,11 +48,10 @@ test_that("ch_taxonomic_epithet works", { }) -context("ch_taxonomic_species") test_that("ch_taxonomic_species works", { aa <- ch_taxonomic_species() - expect_is(aa, "character") + expect_type(aa, "character") expect_equal(length(ch_taxonomic_species(n = 10)), 10) expect_equal(length(ch_taxonomic_species(n = 100)), 100) diff --git a/tests/testthat/test-useragent.R b/tests/testthat/test-useragent.R index 478c70e..dcf7e26 100644 --- a/tests/testthat/test-useragent.R +++ b/tests/testthat/test-useragent.R @@ -1,19 +1,19 @@ test_that("UserAgentProvider works", { aa <- UserAgentProvider_en_US$new() - expect_is(aa, "UserAgentProvider") - expect_is(aa, "R6") + expect_s3_class(aa, "UserAgentProvider") + expect_s3_class(aa, "R6") for (loc in aa$allowed_locales()) { prov <- cr_loc_spec_provider("UserAgentProvider", loc) - expect_is(prov$mac_processor(), "character") - expect_is(prov$linux_processor(), "character") - expect_is(prov$user_agent(), "character") - expect_is(prov$chrome(), "character") + expect_type(prov$mac_processor(), "character") + expect_type(prov$linux_processor(), "character") + expect_type(prov$user_agent(), "character") + expect_type(prov$chrome(), "character") expect_match(prov$chrome(), "Chrome") expect_match(prov$firefox(), "Firefox") expect_match(prov$safari(), "Safari") expect_match(prov$opera(), "Opera") - expect_is(prov$internet_explorer(), "character") + expect_type(prov$internet_explorer(), "character") expect_match(prov$windows_platform_token(), "Win") expect_match(prov$linux_platform_token(), "Linux") expect_match(prov$mac_platform_token(), "Mac") diff --git a/tests/testthat/test-zzz.R b/tests/testthat/test-zzz.R index b4cce96..e8925d3 100644 --- a/tests/testthat/test-zzz.R +++ b/tests/testthat/test-zzz.R @@ -80,6 +80,6 @@ test_that("checksum_util works for our usecases", { # ISBN 13 expect_equal(checksum_util(c(9, 7, 8, 0, 3, 0, 6, 4, 0, 6, 1, 5), rep(c(1, 3), 6)), 93) # SSN dutch - # 111222333 en 123456782 - expect_equal(checksum_util(c(1, 1, 1, 2, 2, 2, 3, 3), 9:2), 69) + expect_equal(checksum_util(c(1, 1, 1, 2, 2, 2, 3, 3), 9:2) %% 11, 3) + expect_equal(checksum_util(c(1, 2, 3, 4, 5, 6, 7, 8), 9:2) %% 11, 2) }) diff --git a/vignettes/charlatan.Rmd b/vignettes/charlatan.Rmd index 5e1ef86..a65562f 100644 --- a/vignettes/charlatan.Rmd +++ b/vignettes/charlatan.Rmd @@ -24,9 +24,9 @@ knitr::opts_chunk$set( ) ``` -`charlatan` makes fake data, inspired from and borrowing some code from Python's [faker](https://github.com/joke2k/faker) +`charlatan` makes realistic looking fake data, inspired from and borrowing some code from Python's [faker](https://github.com/joke2k/faker) -Why would you want to make fake data? Here's some possible use cases to +Why would you want to make fake data that looks real? Here's some possible use cases to give you a sense for what you can do with this package: * Students in a classroom setting learning any task that needs a dataset. @@ -41,9 +41,12 @@ assign to fake scholarly artifacts * Generate fake taxonomic names for a biological dataset * Get a set of fake sequences to use to test code/software that uses sequence data +See the [**Creating realistic data**](https://docs.ropensci.org/charlatan/articles/creating-realistic-data.html) +vignette for a few realistic examples. + ## Contributing -See the [**Contributing to charlatan**](https://docs.ropensci.org/charlatan/articles/contributing.html) vignette +See the [**Contributing to charlatan**](https://docs.ropensci.org/charlatan/articles/contributing.html) vignette. ## Package API @@ -68,7 +71,7 @@ install.packages("charlatan") Development version from Github ```{r eval=FALSE} -devtools::install_github("ropensci/charlatan") +remotes::install_github("ropensci/charlatan") ``` ```{r} @@ -89,9 +92,13 @@ x$color_name() ## locale support -Adding more locales through time, e.g., +Here we create 3 jobs, for different locales: -Locale support for job data +- English USA +- French, France +- Croatian, Croatia +- Ukrainian, Ukraine +- Chinese, Taiwan ```{r} ch_job(locale = "en_US", n = 3) @@ -108,7 +115,6 @@ ch_color_name(locale = "en_US", n = 3) ch_color_name(locale = "uk_UA", n = 3) ``` -More coming soon ... ## generate a dataset @@ -120,7 +126,24 @@ ch_generate() ch_generate("job", "phone_number", n = 30) ``` -## Data types +## Data types, localized + +We can create locale specific versions of: + +- Colors +- Companies +- Elements _(of the periodic table)_ +- Files +- Internet +- Jobs +- Lorem +- Persons +- Phone numbers +- Social Security Numbers +- Taxonomies +- UserAgent + +Examples: ### person name @@ -153,6 +176,25 @@ ch_job() ch_job(10) ``` +## Data types, universal + +Some data types are not localized (arguably the files and user_agents, are mostly universal too). + +- Currency +- credit card +- Sequence (DNA) +- Numerics (doubles, integers, numbers from a distribution; uniform, normal, log-normal, and beta) +- Miscellaneous (booleans, language codes) +- DOIs (Digital Object Identifiers, used in scientific journals) +- Coordinates (GPS coordinates) + +### currency + +```{r} +ch_currency(3) +``` + + ### credit cards ```{r} @@ -170,6 +212,7 @@ ch_credit_card_security_code() ch_credit_card_security_code(10) ``` + ## Missing data `charlatan` makes it very easy to generate fake data with missing entries. First, you need to run `MissingDataProvider()` and then make an appropriate `make_missing()` call specifying the data type to be generated. This method picks a random number (`N`) of slots in the input `make_missing` vector and then picks `N` random positions that will be replaced with NA matching the input class. diff --git a/vignettes/creating-realistic-data.Rmd b/vignettes/creating-realistic-data.Rmd index 477f92a..cbf3e83 100644 --- a/vignettes/creating-realistic-data.Rmd +++ b/vignettes/creating-realistic-data.Rmd @@ -2,11 +2,15 @@ title: "Creating realistic data" author: - "Roel M. Hogervorst" -output: rmarkdown::html_vignette +output: + html_document: + toc: true + toc_float: true + theme: readable vignette: > %\VignetteIndexEntry{Creating realistic data} - %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} + %\VignetteEngine{knitr::rmarkdown} --- ```{r, include = FALSE} @@ -21,95 +25,103 @@ library(charlatan) ``` # Introduction -Charlatan creates realistic looking data. By now you have seen some examples of -the high level and low level APIs. But maybe you would like to see some -examples of generating data for specific use-cases? Then this vignette is for -you. It will show you how to create fake transactional data, fake health care -(PII) data and finally an example of a plumber API that returns fake data. - -But first a slight detour into different ways of faking data. - -# Other options for faking data - -Simulation of data (creating fake data that looks realistic) is not always the -best option, there are -other options that we will discuss first. - -- use real data -- use pseudonomous or anonymous data -- create a dataset from scratch - -Using **real actual data** is great for live systems. You want actual data for -actual predictions or actual inference. It is, however smart to reduce your data to -only the columns you need. - -Using real actual data is a bad idea for demonstration -use-cases. Personal Identifyable Information (PII) are sensitive data and need -to be handled with care. Even if you strip away the full names it is relatively -easy to pinpoint specific people on the basis of several data points. - - -**Pseudonymous or anonymous data** is a safer way to deal with personal identifyable -data. By stripping away PII or replacing values with other random values you make -it harder to link the data back to actual people. The main pro in using this kind -of data is that you keep the data structure intact. The relationship between -variables remain, and you can do predictions/inference on that. - -It is quite a lot of work to make your data truly anonymous. You need surprisingly -little data to de-anonomize data and link it back to actual people. - - -**Creating a fake dataset from scratch** is relatively easy when the data is -small. Using the build-in functions like`sample`, `runif`, and `rnorm` etc. is -very doable. It is slightly faster than using this package. - -Using completely random values does make it difficult to talk to stakeholders, -they would not understand the random values. It is also really a lot of work -to generate more complex data or many different columns. - - -# What this package does, and does not do - -This package creates realistic looking values, but does not help you in creating -relations in a data set. For instance you can create streets, cities and postal -codes, but those components are unrelated, the postal code is not related to -the street nor to the city. - -This package creates realistic names, jobs, streets, business names, -phone numbers and much more. It also can create those things for different -countries and languages. For example: - -- You could create a dataset with real Czech names like 'František Krejčí' or 'Nikol Machová'. -- You can create addresses that look like they come from New Zealand:"68 Morris Concourse Tererongo 6128" or "485 Manawarongo Way, Pedersen 3196". -- You can create Danish jobs like "Børsmægler" or "Ventilationsmontør". +Charlatan creates realistic looking data. By now you have seen some +examples of the high level and low level APIs. But maybe you would like +to see some examples of generating data for specific use-cases? Then +this vignette is for you. It will show you how to create fake +transactional data, fake health care (PII) data and finally an example +of a plumber API that returns fake data. + +But first a slight detour into different ways of faking data. + +## Other options for faking data + +Simulation of data (creating fake data that looks realistic) is not +always the best option, there are other options that we will discuss +first. + +- use real data +- use pseudonomous or anonymous data +- create a dataset from scratch + +Using **real actual data** is great for live systems. You want actual +data for actual predictions or actual inference. It is, however smart to +reduce your data to only the columns you need. + +Using real actual data is a bad idea for demonstration use-cases. +Personal Identifyable Information (PII) are sensitive data and need to +be handled with care. Even if you strip away the full names it is +relatively easy to pinpoint specific people on the basis of several data +points. + +**Pseudonymous or anonymous data** is a safer way to deal with personal +identifyable data. By stripping away PII or replacing values with other +random values you make it harder to link the data back to actual people. +The main pro in using this kind of data is that you keep the data +structure intact. The relationship between variables remain, and you can +do predictions/inference on that. + +It is quite a lot of work to make your data truly anonymous. You need +surprisingly little data to de-anonomize data and link it back to actual +people. + +**Creating a fake dataset from scratch** is relatively easy when the +data is small. Using the build-in functions like`sample`, `runif`, and +`rnorm` etc. is very doable. It is slightly faster than using this +package. + +Using completely random values does make it difficult to talk to +stakeholders, they would not understand the random values. It is also +really a lot of work to generate more complex data or many different +columns. + +## What this package does, and does not do + +This package creates realistic looking values, but does not help you in +creating relations in a data set. For instance you can create streets, +cities and postal codes, but those components are unrelated, the postal +code is not related to the street nor to the city. + +This package creates realistic **names**, **jobs**, **streets**, **business names**, +**phone numbers** and much more. It also can create those things for +different countries and languages (locales). For example: + +- You could create a dataset with real Czech names like 'František + Krejčí' or 'Nikol Machová'. +- You can create addresses that look like they come from New + Zealand: "68 Morris Concourse Tererongo 6128" or "485 Manawarongo + Way, Pedersen 3196". +- You can create Danish jobs like "Børsmægler" or + "Ventilationsmontør". # Examples -Next are a few examples of faked data with the help of the {charlatan} package. -The examples are with the en_US locale, but work for many locales. +Next are a few examples of faked data with the help of the {charlatan} +package. The examples are with the en_US locale, but work for many +locales. ## Fake business transactional data -This example shows transactional data, from an ecommerce website for example, -and will also show you how to add some logical structure to your data. -_This example comes from an issue opened on our github._ -Let's imagine we sell clothes on the internet. What would that data -look like? +This example shows transactional data, from an ecommerce website for +example, and will also show you how to add some logical structure to +your data. *This example comes from an issue opened on our github.* + +Let's imagine we sell clothes on the internet. What would that data look +like? I would need: -- ids for items -- item information -- a price paid -- customer information (Who bought it, where do we ship it) +- ids for items +- item information +- a price paid +- customer information (Who bought it, where do we ship it) ### Steps for creating realistic looking business transactional data -- create products -- create orders -- combine the two - +- create products +- create orders +- combine the two ```{r} # setup @@ -118,18 +130,15 @@ n <- 5 set.seed(1235) ``` +We first create a few categories and subcategories. This is too specific +for the {charlatan} package (and different for every store). I imagine +you have a better idea for this data then I have. -We first create a few categories and subcategories. This is too specific for -the {charlatan} package (and -different for every store). I imagine you have a better idea for this data then -I have. - - -In this example I have categories Shoes, Jeans and Dresses. -All Shoes have a prefix that -starts with 1, all Jeans have prefix starting with 2, and Dresses start with 5. -We combine the prefix with a random number to have consistent product ids ( -I have no idea if clothing stores actually do this, but it looked neat). +In this example I have categories Shoes, Jeans and Dresses. All Shoes +have a prefix that starts with 1, all Jeans have prefix starting with 2, +and Dresses start with 5. We combine the prefix with a random number to +have consistent product ids ( I have no idea if clothing stores actually +do this, but it looked neat). ```{r} # create product data @@ -137,15 +146,19 @@ products <- data.frame( prefix = c(rep(1, 5), rep(2, 2), rep(5, 2)), product_id = fraudster_cl$integer(n = 9, min = 1000, max = 9999), main_category = c(rep("Shoes", 5), rep("Jeans", 2), rep("Dresses", 2)), - sub_category = c("Dress shoes", "Tennis shoes", "Boots", "Hiking boots", "Country & Western style boots", "Regular fit", "Straight fit", "Summer dress", "Evening gown") + sub_category = c( + "Dress shoes", "Tennis shoes", "Boots", "Hiking boots", "Country & Western style boots", + "Regular fit", "Straight fit", + "Summer dress", "Evening gown" + ) ) ## when you have {dplyr} installed there are way cleaner ways to do this products$product_id <- as.integer(sprintf("%s%s", as.character(products$prefix), products$product_id)) products ``` -Then we create the orders with a price, a product id, and location. -Orders also have an email address and are shipped to an address. +Then we create the orders with a price, a product id, and location. +Orders also have an email address and are shipped to an address. ```{r} # create orders @@ -169,15 +182,16 @@ example_transactions <- merge(orders, products) example_transactions[, c("order_id", "location_id", "product_id", "main_category", "sub_category", "price_paid", "customer_name", "order_email", "shipping_address")] ``` -Notice that customer_name and email are completely unrelated. You could create -a customer 'table' like the product table above to create a bit more structure. - +Notice that customer_name and email are completely unrelated. You could +create a customer 'table' like the product table above to create a bit +more structure. ## Protected health information + Here is how you simulate protected health information with {charlatan}. -Here we use the low level api. +Here we use the low level api. -_This example also comes from an issue in our github._ +*This example also comes from an issue in our github.* First a setup: @@ -195,9 +209,9 @@ pnp <- PhoneNumberProvider_en_US$new() set.seed(1235) ``` -We don't have a list of counties in the US (there are 3007 of them). -So we will use a random word from the `LoremProvider` with county. -It is probably nicer if you wrap this into a function. +We don't have a list of counties in the US (there are 3007 of them). So +we will use a random word from the `LoremProvider` with county. It is +probably nicer if you wrap this into a function. Generate a single 'record' for a person: @@ -220,8 +234,7 @@ prot_health <- list( prot_health ``` -We can also create medical records in sequence with a custom -function. +We can also create medical records in sequence with a custom function. In the following example I create a sequence of events based on a date. ```{r} @@ -236,16 +249,20 @@ gen_med_record <- function(date_value, events = 4, event_types = c("admission", } result <- gen_med_record(date_value = as.Date("2022-03-01"), events = 5) +## And add the generated data to this dataframe too result$medical_record_number <- prot_health$medical_record_number +result$last_name <- prot_health$last_name +result$date_of_birth <- prot_health$dob result ``` +## Plumber api -### plumber api -You can also create a plumber API. -For this to work you need the [{plumber}](https://CRAN.R-project.org/package=plumber) package installed. +You can also create a plumber API that returns realistic data. For this example to work you need the +[{plumber}](https://CRAN.R-project.org/package=plumber) package +installed. -```r +``` r # plumber.R fraudster_cl <- fraudster('en_US') @@ -263,13 +280,14 @@ function(n=1){ function(n=1){ list(address=fraudster_cl$company()) } - ``` + Then run the file like this to start an API: `plumber::plumb("R/plumber.R") %>% plumber::pr_run()` # Conclusion + As you can see this package helps you in generating plausible data, but -to add structure (relationships between variables) to your data you need to do -work yourself. +to add structure (relationships between variables) to your data you need +to do work yourself.