Nothing
test_that(".parse_assistant_selection parses user input correctly", {
# Test "all" option
expect_equal(
.parse_assistant_selection("4"),
c("claude", "copilot", "agents")
)
# Test individual selections
expect_equal(
.parse_assistant_selection("1"),
"claude"
)
expect_equal(
.parse_assistant_selection("2"),
"copilot"
)
expect_equal(
.parse_assistant_selection("3"),
"agents"
)
# Test comma-separated
expect_equal(
.parse_assistant_selection("1,3"),
c("claude", "agents")
)
expect_equal(
.parse_assistant_selection("1,2,3"),
c("claude", "copilot", "agents")
)
# Test with spaces
expect_equal(
.parse_assistant_selection("1, 3"),
c("claude", "agents")
)
# Test invalid input
expect_equal(
.parse_assistant_selection("5"),
character(0)
)
expect_equal(
.parse_assistant_selection("invalid"),
character(0)
)
# Test empty
expect_equal(
.parse_assistant_selection(""),
character(0)
)
})
test_that(".create_ai_instructions creates correct files", {
skip_on_cran()
# Create temp directory
temp_dir <- tempdir()
test_dir <- file.path(temp_dir, "test-ai-instructions")
dir.create(test_dir, showWarnings = FALSE, recursive = TRUE)
# Ensure clean state
unlink(file.path(test_dir, "CLAUDE.md"), force = TRUE)
unlink(file.path(test_dir, ".github"), recursive = TRUE, force = TRUE)
unlink(file.path(test_dir, "AGENTS.md"), force = TRUE)
# Test Claude
.create_ai_instructions("claude", test_dir)
expect_true(file.exists(file.path(test_dir, "CLAUDE.md")))
# Test Copilot (creates .github directory)
.create_ai_instructions("copilot", test_dir)
expect_true(dir.exists(file.path(test_dir, ".github")))
expect_true(file.exists(file.path(test_dir, ".github", "copilot-instructions.md")))
# Test AGENTS.md
.create_ai_instructions("agents", test_dir)
expect_true(file.exists(file.path(test_dir, "AGENTS.md")))
# Test multiple assistants
test_dir2 <- file.path(temp_dir, "test-ai-multiple")
dir.create(test_dir2, showWarnings = FALSE, recursive = TRUE)
.create_ai_instructions(c("claude", "copilot", "agents"), test_dir2)
expect_true(file.exists(file.path(test_dir2, "CLAUDE.md")))
expect_true(file.exists(file.path(test_dir2, ".github", "copilot-instructions.md")))
expect_true(file.exists(file.path(test_dir2, "AGENTS.md")))
# Cleanup
unlink(test_dir, recursive = TRUE)
unlink(test_dir2, recursive = TRUE)
})
test_that(".create_ai_instructions file content is correct", {
skip_on_cran()
temp_dir <- tempdir()
test_dir <- file.path(temp_dir, "test-ai-content")
dir.create(test_dir, showWarnings = FALSE, recursive = TRUE)
# Create CLAUDE.md
.create_ai_instructions("claude", test_dir)
# Read and verify content
claude_content <- readLines(file.path(test_dir, "CLAUDE.md"), warn = FALSE)
# Check for key Framework concepts
expect_true(any(grepl("Framework", claude_content)))
expect_true(any(grepl("scaffold\\(\\)", claude_content)))
expect_true(any(grepl("data_read", claude_content)))
expect_true(any(grepl("result_save", claude_content)))
# Cleanup
unlink(test_dir, recursive = TRUE)
})
test_that(".create_ai_instructions handles empty assistants list", {
skip_on_cran()
temp_dir <- tempdir()
test_dir <- file.path(temp_dir, "test-ai-empty")
dir.create(test_dir, showWarnings = FALSE, recursive = TRUE)
# Should not create any files
.create_ai_instructions(character(0), test_dir)
expect_false(file.exists(file.path(test_dir, "CLAUDE.md")))
expect_false(file.exists(file.path(test_dir, ".github")))
expect_false(file.exists(file.path(test_dir, "AGENTS.md")))
# Cleanup
unlink(test_dir, recursive = TRUE)
})
test_that(".update_frameworkrc updates file correctly", {
skip_on_cran()
temp_dir <- tempdir()
test_rc <- file.path(temp_dir, "test-frameworkrc")
# Create initial .frameworkrc with some content
writeLines(c(
"# Framework configuration",
'FW_AUTHOR_NAME="Test User"',
'FW_AUTHOR_EMAIL="test@example.com"'
), test_rc)
# Update with AI settings
.update_frameworkrc(test_rc, "yes", c("claude", "agents"))
# Read and verify
content <- readLines(test_rc, warn = FALSE)
expect_true(any(grepl('FW_AI_SUPPORT="yes"', content, fixed = TRUE)))
expect_true(any(grepl('FW_AI_ASSISTANTS="claude,agents"', content, fixed = TRUE)))
# Original content should still be there
expect_true(any(grepl('FW_AUTHOR_NAME="Test User"', content, fixed = TRUE)))
# Update again (should replace, not duplicate)
.update_frameworkrc(test_rc, "never", character(0))
content2 <- readLines(test_rc, warn = FALSE)
expect_true(any(grepl('FW_AI_SUPPORT="never"', content2, fixed = TRUE)))
expect_false(any(grepl('FW_AI_ASSISTANTS=', content2)))
# Should only have one FW_AI_SUPPORT line
ai_support_lines <- grep("^FW_AI_SUPPORT=", content2)
expect_length(ai_support_lines, 1)
# Cleanup
unlink(test_rc)
})
test_that(".update_frameworkrc creates new file if it doesn't exist", {
skip_on_cran()
temp_dir <- tempdir()
test_rc <- file.path(temp_dir, "test-frameworkrc-new")
# Ensure file doesn't exist
if (file.exists(test_rc)) {
unlink(test_rc)
}
# Update (should create new file)
.update_frameworkrc(test_rc, "yes", c("claude"))
expect_true(file.exists(test_rc))
content <- readLines(test_rc, warn = FALSE)
expect_true(any(grepl('FW_AI_SUPPORT="yes"', content, fixed = TRUE)))
expect_true(any(grepl('FW_AI_ASSISTANTS="claude"', content, fixed = TRUE)))
# Cleanup
unlink(test_rc)
})
test_that("AI instruction templates exist", {
# Verify AI context template files are in package
project_template <- system.file("templates", "ai-context.project.md", package = "framework")
sensitive_template <- system.file("templates", "ai-context.project_sensitive.md", package = "framework")
course_template <- system.file("templates", "ai-context.course.md", package = "framework")
presentation_template <- system.file("templates", "ai-context.presentation.md", package = "framework")
expect_true(file.exists(project_template))
expect_true(file.exists(sensitive_template))
expect_true(file.exists(course_template))
expect_true(file.exists(presentation_template))
})
test_that("AI instruction templates are not empty", {
# Check project template
project_template <- system.file("templates", "ai-context.project.md", package = "framework")
if (file.exists(project_template)) {
project_content <- readLines(project_template, warn = FALSE)
expect_gt(length(project_content), 10)
}
# Check sensitive template
sensitive_template <- system.file("templates", "ai-context.project_sensitive.md", package = "framework")
if (file.exists(sensitive_template)) {
sensitive_content <- readLines(sensitive_template, warn = FALSE)
expect_gt(length(sensitive_content), 10)
}
# Check course template
course_template <- system.file("templates", "ai-context.course.md", package = "framework")
if (file.exists(course_template)) {
course_content <- readLines(course_template, warn = FALSE)
expect_gt(length(course_content), 10)
}
# Check presentation template
presentation_template <- system.file("templates", "ai-context.presentation.md", package = "framework")
if (file.exists(presentation_template)) {
presentation_content <- readLines(presentation_template, warn = FALSE)
expect_gt(length(presentation_content), 10)
}
})
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.