Unit Tests for Find, Replace, Find in Files, File Filters

https://trello.com/c/qvHL6r4i/45-unit-tests-for-existing-find-replace-find-in-files-features

- - - - -

**Find**

- [x] Invoke Find with selection (make sure search text is selection)
    * added: "should get single selection as initial query"

- [x] Invoke Find without selection (make sure search text is empty)
    * added: "should use empty initial query for single cursor selection", and
    * added: "should use empty initial query for multiple cursor selection"

- [x] Invoke Find next while Find is open with no text
    * existing: "should no-op on Find Next with blank search"

- [x] Invoke Find to ensure all tickmarks are present and results are highlighted
    * added: "should have a scroll track marker for every match"

- [x] Invoke Find with Case sensitive to ensure that all case sensitive matches are found
    * existing: "should find all case-sensitive matches with mixed-case text"
    * existing: "should support case-sensitive regexp"

- [x] Invoke Find without Case sensitive to ensure that all matches are found
    * existing: "should find all case-insensitive matches with lowercase text"
    * existing: "should find all case-insensitive matches with mixed-case text"
    * existing: "should support case-insensitive regexp"

- [x] Invoke Find with Regex to ensure that regex is found
    * existing: "should find based on regexp"
    * existing: "should support case-sensitive regexp"
    * existing: "should support case-insensitive regexp"

- - - - -

**Replace**

- [x] Invoke Replace with a selection (make sure search text is selection)
    * added: "should get single selection as initial query"

- [x] Invoke Replace without a selection (make sure search text is empty)
    * added: "should use empty initial query for single cursor selection", and
    * added: "should use empty initial query for multiple cursor selection"

- [x] Invoke Replace with plain text
    * existing: "should find and replace one string"
    * existing: "should use replace keyboard shortcut for single Replace while search bar open"

- [x] Invoke Replace All with Plain text to ensure all instances are replaced
    * added: "should find and replace all"

- [x] Invoke Replace with RegEx
    * existing: "should find and replace a regexp with $n substitutions", etc.

- [x] Invoke Replace with Regex capture groups and replace parameter
    * existing: "should find and replace a regexp with $n substitutions"

- [x] Replace Yes/No/Skip to ensure next instance is found
    * added: "should find and skip then replace string"

- [x] Replace Yes/No/Skip to ensure instance is Replaced or Not
    * added: "should find and skip then replace string"

- - - - -

**Find in Files**

Added tests for:
- [x] Results for Project are displayed
- [x] Results for Folder are displayed
- [x] Results for File are displayed
- [x] Start and End offsets are found
- [x] Dialog is dismissed and Panel is displayed for Results
- [x] Dialog is kept and Panel is not displayed for No Results
- [ ] <del>More than 100 Results are paginated</del>
    * Doesn't seem like it worth the effort
- [x] Selecting a Result changes to that file, scrolls to that line, and text is selected
- [x] Double-click on a Result adds file to Working Set
- [x] Change one of the find hits to ensure results panel is updated

- - - - -

**File Filters**

Added tests for:
- [x] Respect file exclusion filter when searching project
- [x] Respect file exclusion filter when searching folder
- [x] Ignore file exclusion filter when searching single file
- [x] Show error if file exclusion filter results in zero files to search