1
0
forked from icd/rentgen

Compare commits

...

2 Commits

Author SHA1 Message Date
8bf58a2cb1 refactor(test): extract JavaScript test code to test-lib.js
- Created tests/test-lib.js with testBackgroundComputation() function
- Updated test_verify.py to load and execute test library via Marionette
- Modified Dockerfile to copy both test-lib.js and test_verify.py to /app/tests/
- Improved code organization and reusability

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-26 17:46:26 +01:00
1668d4e911 refactor(build): move Makefile commands to npm scripts
- Added docker:verify and docker:clean scripts to package.json
- Removed Makefile (all commands now in package.json)
- Updated compose.yml to use renamed stages (code_quality, integration_test)
- Added rentgen_build service to compose.yml

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-26 17:41:39 +01:00
8 changed files with 841 additions and 541 deletions

View File

@ -47,10 +47,8 @@ FROM node:lts AS runtime
WORKDIR /app WORKDIR /app
# Copy built artifacts from builder # Copy built extension from builder
COPY --from=builder /app/web-ext-artifacts /app/web-ext-artifacts COPY --from=builder /app /app
COPY --from=builder /app/package.json /app/package-lock.json ./
COPY --from=builder /app/node_modules ./node_modules
# Install Firefox and Xvfb for headless execution (cached layer) # Install Firefox and Xvfb for headless execution (cached layer)
RUN apt-get update && apt-get install -y \ RUN apt-get update && apt-get install -y \
@ -84,9 +82,10 @@ CMD ["echo", "Use verify stage for testing"]
# Integration test stage - automated testing with exit code # Integration test stage - automated testing with exit code
FROM runtime AS integration_test FROM runtime AS integration_test
# Copy verification script # Copy verification scripts
COPY tests/test_verify.py /app/test_verify.py COPY tests/test_verify.py /app/tests/test_verify.py
RUN chmod +x /app/test_verify.py COPY tests/test-lib.js /app/tests/test-lib.js
RUN chmod +x /app/tests/test_verify.py
# Run verification and exit with proper exit code # Run verification and exit with proper exit code
CMD ["python3", "/app/test_verify.py"] CMD ["python3", "/app/tests/test_verify.py"]

View File

@ -1,20 +0,0 @@
.PHONY: verify clean help
# Default target - run verification
verify:
@echo "Building and verifying Rentgen extension..."
docker compose up --force-recreate --build --abort-on-container-exit --exit-code-from rentgen_verify
@echo "✓ Verification completed successfully!"
# Clean up Docker resources
clean:
docker compose down --rmi local --volumes --remove-orphans
# Help target
help:
@echo "Rentgen Extension - Makefile"
@echo ""
@echo "Available targets:"
@echo " make verify - Build and verify extension (exits with error if verification fails)"
@echo " make clean - Clean up Docker resources"
@echo " make help - Show this help message"

View File

@ -1,7 +1,12 @@
services: services:
rentgen_check: rentgen_build:
build: . build: .
rentgen_check:
build:
context: .
target: code_quality
rentgen_run: rentgen_run:
build: build:
context: . context: .
@ -12,5 +17,5 @@ services:
rentgen_verify: rentgen_verify:
build: build:
context: . context: .
target: verify target: integration_test
restart: "no" restart: "no"

View File

@ -29,7 +29,7 @@
"content_scripts": [ "content_scripts": [
{ {
"matches": ["<all_urls>"], "matches": ["<all_urls>"],
"js": ["lib/test-content-script.js"], "js": ["lib/tests/test-content-script.js"],
"run_at": "document_end" "run_at": "document_end"
} }
], ],

1257
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -19,7 +19,9 @@
"create-package:firefox": "web-ext build --overwrite-dest --artifacts-dir ../web-ext-artifacts", "create-package:firefox": "web-ext build --overwrite-dest --artifacts-dir ../web-ext-artifacts",
"create-package:chrome": "cd dist-chrome && 7z a -tzip ../web-ext-artifacts/rentgen-chrome-0.1.10.zip * && cd ..", "create-package:chrome": "cd dist-chrome && 7z a -tzip ../web-ext-artifacts/rentgen-chrome-0.1.10.zip * && cd ..",
"typecheck": "tsc --noEmit", "typecheck": "tsc --noEmit",
"lint": "web-ext lint" "lint": "web-ext lint",
"docker:verify": "docker compose up --force-recreate --build --abort-on-container-exit --exit-code-from rentgen_verify",
"docker:clean": "docker compose down --rmi local --volumes --remove-orphans"
}, },
"repository": { "repository": {
"type": "git", "type": "git",

36
tests/test-lib.js Normal file
View File

@ -0,0 +1,36 @@
// Test library for Marionette-based extension verification
// This JavaScript code runs in the browser context via Marionette
/**
* Test that background script performs computation correctly
* @param {number} testValue - Input value for computation
* @returns {Promise<number|null>} - Computed result or null on failure
*/
function testBackgroundComputation(testValue) {
// Check if content script loaded
if (!document.body.getAttribute('data-rentgen-injected')) {
return -1; // Content script not loaded
}
// Dispatch test request to content script
document.dispatchEvent(new CustomEvent('rentgen_test_request', {
detail: { value: testValue, timestamp: Date.now() }
}));
// Wait for background response
return new Promise((resolve) => {
let attempts = 0;
const checkInterval = setInterval(() => {
attempts++;
const computed = document.body.getAttribute('data-rentgen-computed');
if (computed) {
clearInterval(checkInterval);
resolve(parseInt(computed));
} else if (attempts > 50) {
clearInterval(checkInterval);
resolve(null);
}
}, 100);
});
}

View File

@ -70,36 +70,17 @@ def test_addition():
test_value = 17 test_value = 17
expected = 37 expected = 37
result = client.execute_script(""" # Load test library
const testValue = arguments[0]; test_lib_path = os.path.join(os.path.dirname(__file__), 'test-lib.js')
with open(test_lib_path, 'r') as f:
test_lib = f.read()
// Check if content script loaded # Execute test
if (!document.body.getAttribute('data-rentgen-injected')) { result = client.execute_script(
return -1; // Content script not loaded test_lib + "\nreturn testBackgroundComputation(arguments[0]);",
} script_args=[test_value],
script_timeout=10000
// Dispatch test request to content script )
document.dispatchEvent(new CustomEvent('rentgen_test_request', {
detail: { value: testValue, timestamp: Date.now() }
}));
// Wait for background response
return new Promise((resolve) => {
let attempts = 0;
const checkInterval = setInterval(() => {
attempts++;
const computed = document.body.getAttribute('data-rentgen-computed');
if (computed) {
clearInterval(checkInterval);
resolve(parseInt(computed));
} else if (attempts > 50) {
clearInterval(checkInterval);
resolve(null);
}
}, 100);
});
""", script_args=[test_value], script_timeout=10000)
client.close() client.close()