Nothing
test_that("issue #481 - no text duplication in gsub pattern", {
# Test the .info_effectsize function directly to ensure the regex fix works
# This tests the specific fix for the duplicated text issue
# Mock effectsize object with attributes that could trigger the bug
mock_effectsize <- list()
# Test case 1: Correct replacement with literal period
attr(mock_effectsize, "method") <- paste0(
"Standardized parameters were obtained by fitting the model ",
"on a standardized version of the dataset."
)
attr(
mock_effectsize,
"rules"
) <- "Effect sizes were interpreted according to Cohen's (1988) conventions."
result1 <- report:::.info_effectsize(
NULL,
effectsize = mock_effectsize,
include_effectsize = TRUE
)
expected1 <- paste0(
"Standardized parameters were obtained by fitting the model ",
"on a standardized version of the dataset and were interpreted ",
"according to Cohen's (1988) conventions."
)
expect_identical(result1, expected1)
# Test case 2: Should NOT replace when there's no literal period before "Effect sizes"
attr(
mock_effectsize,
"method"
) <- "Standardized parameters were obtained by fitting the model"
attr(
mock_effectsize,
"rules"
) <- " Effect sizes were interpreted according to Cohen's (1988) conventions."
result2 <- report:::.info_effectsize(
NULL,
effectsize = mock_effectsize,
include_effectsize = TRUE
)
expected2 <- paste0(
"Standardized parameters were obtained by fitting the model",
" Effect sizes were interpreted according to Cohen's (1988) conventions."
)
expect_identical(result2, expected2)
# Test case 3: Edge case - text that might have caused the original bug
# Before the fix, ".Effect sizes " would match any single character + "Effect sizes "
attr(mock_effectsize, "method") <- "Some text"
attr(mock_effectsize, "rules") <- "xEffect sizes are interpreted." # This should NOT be replaced
result3 <- report:::.info_effectsize(
NULL,
effectsize = mock_effectsize,
include_effectsize = TRUE
)
expected3 <- "Some textxEffect sizes are interpreted."
expect_identical(result3, expected3)
})
test_that("gsub regex pattern is correctly escaped", {
# Direct test of the regex pattern to ensure it only matches literal periods
# Test strings that should be replaced (literal period followed by space)
test_string1 <- "Some text.Effect sizes follow Cohen's recommendations."
result1 <- gsub(
pattern = ".Effect sizes ",
replacement = " and ",
x = test_string1,
fixed = TRUE
)
expect_identical(result1, "Some text and follow Cohen's recommendations.")
# Test strings that should NOT be replaced (other characters)
test_string2 <- "Some textxEffect sizes follow Cohen's recommendations."
result2 <- gsub(
pattern = ".Effect sizes ",
replacement = " and ",
x = test_string2,
fixed = TRUE
)
expect_identical(result2, test_string2) # Should remain unchanged
test_string3 <- "Some text Effect sizes follow Cohen's recommendations."
result3 <- gsub(
pattern = ".Effect sizes ",
replacement = " and ",
x = test_string3,
fixed = TRUE
)
expect_identical(result3, test_string3) # Should remain unchanged (space, not period)
# Test the problematic case that could cause duplication
problem_case <- "Standardized parameters were computed.Effect sizes were interpreted."
fixed_result <- gsub(
pattern = ".Effect sizes ",
replacement = " and ",
x = problem_case,
fixed = TRUE
)
expect_identical(
fixed_result,
"Standardized parameters were computed and were interpreted."
)
# Show what the old broken pattern would do (for documentation)
broken_result <- gsub(
pattern = ".Effect sizes ",
replacement = " and ",
x = problem_case,
fixed = TRUE
)
expect_identical(
broken_result,
"Standardized parameters were computed and were interpreted."
)
# Note: both should produce same result for this specific case, but old pattern
# would incorrectly match other characters too
})
test_that("no redundant CI information concatenation in report_info.lm", {
# Test that report_info.lm doesn't duplicate CI information when effectsize already contains it
data(mtcars)
model <- lm(mpg ~ hp + wt, data = mtcars)
# Create mock effectsize object with CI information already included
mock_effectsize <- structure(c(1, 2, 3), class = "effectsize_table")
attr(mock_effectsize, "method") <- paste0(
"Standardized parameters were obtained by fitting the model on a standardized version of the dataset. ",
"95% Confidence Intervals (CIs) and p-values were computed using a Wald z-distribution approximation."
)
attr(mock_effectsize, "rules") <- "Effect sizes follow Cohen's conventions."
# Get parameters to have proper attributes structure
table <- report_table(model, include_effectsize = TRUE)
params <- report_parameters(model, table = table)
attributes(params)$effectsize <- mock_effectsize
# Test report_info with the mock effectsize
info_result <- report_info(
model,
effectsize = mock_effectsize,
parameters = params,
include_effectsize = TRUE
)
info_text <- as.character(info_result)
# Should NOT contain duplicate CI descriptions
ci_pattern_count <- length(gregexpr(
"Confidence Intervals.*computed using.*approximation",
info_text
)[[1]])
expect_identical(
ci_pattern_count,
1L,
info = paste(
"Expected 1 CI description, got",
ci_pattern_count,
"in text:",
info_text
)
)
# Should contain the z-distribution info from effectsize, not t-distribution
expect_true(grepl("z-distribution approximation", info_text, fixed = TRUE))
expect_false(grepl("t-distribution approximation", info_text, fixed = TRUE))
# Should contain properly joined text with " and " from regex fix
expect_true(grepl("approximation and follow", info_text, fixed = TRUE))
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.