Files
clean-copy/app/TESTING_SANDBOX.md

370 lines
9.3 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# CleanCopy E2E Manual Testing Sandbox
Use this document to manually verify that all clipboard sanitization rules work correctly end-to-end.
## How to Use
1. Make sure CleanCopy is running in the system tray.
2. Copy the **"Copy this"** block to your clipboard (`Ctrl+C`).
3. Press the CleanCopy hotkey (`Alt + Shift + C` or your configured shortcut).
4. Paste the result into a text editor and compare with the **Expected Output**.
### Prerequisites
- CleanCopy is running in the system tray (lavender clipboard icon).
- All cleaning rules are **enabled** in Settings -> Rules (unless a scenario says otherwise).
- You have a text editor open to paste and inspect results.
## [URL] Scenario 1: Tracking Parameter Scrubber
Tests the removal of marketing and analytic trackers while preserving legitimate query variables.
### Copy this
```text
https://example.com/shop/item-102?utm_source=newsletter&utm_medium=email&utm_campaign=summer_sale&gclid=CL_12345&fbclid=FB_67890&si=SI_abcde&q=running+shoes&category=activewear
```
### Expected Output
```text
https://example.com/shop/item-102?q=running+shoes&category=activewear
```
_(Tracks `utm_source`, `utm_medium`, `utm_campaign`, `gclid`, `fbclid`, and `si` are stripped; `q` and `category` are kept.)_
## [URL] Scenario 2: Custom URL Parameters
Tests that user-defined custom tracking params (added in Settings -> Rules) are also stripped.
### Setup
In Settings -> Rules, type `foo,bar` in the custom tracking parameters input and wait for the save indicator.
### Copy this
```text
https://example.com/page?foo=abc&bar=123&keep=this&utm_source=x
```
### Expected Output
```text
https://example.com/page?keep=this
```
_(Custom params `foo` and `bar` are stripped alongside built-in `utm_source`.)_
## [URL] Scenario 3: URL with Only Tracked Parameters
Tests that a URL with no legitimate params is cleaned of the entire query string.
### Copy this
```text
https://example.com/article?utm_source=newsletter&utm_medium=email&gclid=abc123&fbclid=xyz789
```
### Expected Output
```text
https://example.com/article
```
_(All params were trackers — the `?` is removed entirely.)_
## [URL] Scenario 4: Multiple URLs in One Clipboard
Tests that all URLs in a single clipboard block get their trackers stripped independently.
### Copy this
```text
Check these links:
https://store.com/deal?utm_source=ad&product=shoes
https://blog.com/post?gclid=123&id=456
```
### Expected Output
```text
Check these links:
https://store.com/deal?product=shoes
https://blog.com/post?id=456
```
_(Both URLs have their trackers stripped independently.)_
## [URL] Scenario 5: Already-Clean URL Passes Through
Tests that a URL with no tracking parameters is left completely untouched.
### Copy this
```text
https://example.com/docs/getting-started?section=install&version=2
```
### Expected Output
```text
https://example.com/docs/getting-started?section=install&version=2
```
_(No trackers present — URL is unchanged.)_
## [TYPOGRAPHY] Scenario 6: Smart Quotes & Dash Typography
Tests the transformation of curly quotes, smart apostrophes, en-dashes, and em-dashes.
### Copy this
```text
"The developer's code," she said — "should compile without warnings." The cost was $5$10.
```
### Expected Output
```text
"The developer's code," she said -- "should compile without warnings." The cost was $5-$10.
```
_(Curly double quotes → `"`, smart apostrophe → `'`, em-dash → `--`, en-dash → `-`.)_
## [TYPOGRAPHY] Scenario 7: Invisible Character Cleanup
Tests removal of zero-width spaces, null bytes, and other invisible Unicode characters.
### Copy this (these contain invisible characters)
```text
Hello World
```
_(Each letter above is separated by zero-width spaces U+200B.)_
### Expected Output
```text
Hello World
```
_(All zero-width spaces are removed, letters join together.)_
## [NEWLINES] Scenario 8: Messenger Line-Break Collapse
Tests that single line wraps from chat apps are joined, while paragraph breaks are preserved.
### Copy this
```text
This is a long sentence that got split
across multiple lines by a chat app's
auto-wrap feature.
This second paragraph should remain on
its own separate line.
```
### Expected Output
```text
This is a long sentence that got split across multiple lines by a chat app's auto-wrap feature.
This second paragraph should remain on its own separate line.
```
_(Single line breaks → space; double-newline paragraph break preserved.)_
## [NEWLINES] Scenario 9: Hyphenated Line Break
Tests that words split with a hyphen at end-of-line are rejoined correctly.
### Copy this
```text
This is an example of inno-
vation that was split across lines.
```
### Expected Output
```text
This is an example of innovation that was split across lines.
```
_(The hyphen at end of line is removed and the word is joined.)_
## [NEWLINES] Scenario 10: Markdown List & Header Preservation
Tests that Markdown structure (headers, lists) is not collapsed.
### Copy this
```text
# Main Header
* Item 1 in list
* Item 2 in list
Here is some body text.
```
### Expected Output
```text
# Main Header
* Item 1 in list
* Item 2 in list
Here is some body text.
```
_(Markdown lists and headers are preserved — the line-joining cleanser skips them.)_
## [COMBINED] Scenario 11: Multiple Cleansers Combined
Tests all rules running simultaneously on a single dirty clipboard block.
### Copy this
```text
"Check this link—it's amazing!"
https://store.com/deal?utm_source=ad&fbclid=999
```
### Expected Output
```text
"Check this link--it's amazing!"
https://store.com/deal
```
_(Whitespace trimmed, quotes/dashes fixed, trackers stripped.)_
## [COMBINED] Scenario 12: Mixed Content Stress Test
Tests all three cleansers on different lines within a single clipboard block.
### Copy this
```text
Here's a message from WhatsApp:
Hey check out this link https://shop.com/sale?utm_source=sms&cid=abc123
The price was $20$50 for the "Premium" plan — totally worth it according
to the review I read yesterday.
```
### Expected Output
```text
Here's a message from WhatsApp:
Hey check out this link https://shop.com/sale?cid=abc123
The price was $20-$50 for the "Premium" plan -- totally worth it according to the review I read yesterday.
```
_(Line break joined, trackers stripped, en-dash → `-`, em-dash → `--`, smart quotes → straight quotes.)_
## [EDGE] Scenario 13: Empty / Whitespace-Only Clipboard
Tests that an empty or whitespace-only clipboard does not cause errors.
### Copy this
```text
```
_(Just whitespace — spaces or tabs.)_
### Expected Output
```text
```
_(Empty string — no crash, no garbage output.)_
## [EDGE] Scenario 14: Non-URL Text Unchanged
Tests that plain text without URLs passes through all cleansers without modification.
### Copy this
```text
The quick brown fox jumps over the lazy dog. Nothing to clean here!
```
### Expected Output
```text
The quick brown fox jumps over the lazy dog. Nothing to clean here!
```
_(No trackers, no smart quotes, no line breaks — text is unchanged.)_
## [UI] Scenario 15: Settings Toggle Each Rule Off
Tests that each cleaning rule can be individually disabled and verified.
### Steps
1. Open Settings -> Rules.
2. Toggle OFF **"Strip tracking parameters"**.
3. Copy a URL with trackers (from Scenario 1).
4. Trigger CleanCopy, paste, and verify trackers are **still present**.
5. Re-enable the toggle and repeat — trackers should now be stripped.
6. Repeat for each rule: Smart Quotes, Line-Break Normalizer.
### Expected
Each rule's toggle independently controls that specific cleaning behavior.
## [UI] Scenario 16: Custom Params Debounce & Save Indicator
Tests that the custom params input debounces correctly and shows save feedback.
### Steps
1. Open Settings -> Rules.
2. Click the custom tracking parameters input.
3. Type `test1`.
4. Observe: a `...` indicator appears while debouncing.
5. Wait ~500ms: a `✓` checkmark appears indicating save.
6. Wait ~1.5s: the `✓` fades out.
7. Type `,test2` (appending to existing text).
8. Repeat the debounce observation.
### Expected
- `...` appears immediately on input change.
- `✓` appears after ~500ms debounce completes.
- `✓` fades out after ~1.5s.
- Input field does not shrink when indicators appear.
## [EDGE] Scenario 17: Ctrl+C Hotkey Uses Clipboard Monitor
Tests that setting the hotkey to `Ctrl+C` switches to the clipboard monitor approach and cleans clipboard changes from any source.
### Steps
1. Open Settings -> General.
2. Start recording a new hotkey.
3. Press `Ctrl+C` to set it as the hotkey.
4. Check the logs for `"Clipboard monitor started."`.
5. Open a text editor and type some text with smart quotes (e.g. `\u201cHello \u2014 World\u201d`).
6. Select the text and press `Ctrl+C`.
7. Paste the clipboard content.
8. Now right-click paste some other text with trackers (e.g. `https://example.com?utm_source=x&id=1`).
9. Paste again and verify trackers are stripped.
10. Change the hotkey back to `Alt+Shift+C`.
11. Check the logs for `"Clipboard monitor shutting down."`.
12. Verify `Alt+Shift+C` works as before.
### Expected
- Log shows `"Clipboard monitor started."` after setting Ctrl+C.
- Ctrl+C copy cleans smart quotes → straight quotes, em-dash → `--`.
- Right-click copy also triggers cleaning (clipboard monitor catches all sources).
- Log shows `"Clipboard monitor shutting down."` after changing away from Ctrl+C.
- Alt+Shift+C works via the global shortcut path as before.