Files
clean-copy/app/TESTING_SANDBOX.md
T

370 lines
9.3 KiB
Markdown
Raw Normal View History

# 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.