* Add winPropAccessor to security.js, remove other replacers
* Add start of Cypress.resolveWindowReference
* Add regexes for dot and bracket access
* Some security_spec tests pass with new injection
* Add resolveWindowReference unit tests
* Old security_spec now passes with resolveWindowReference
* Inject stub resolveWindowReference so proxy still works outside of Cypress
* wip: rewrite HTML + JS with tokenizer
* Move to using esprima + hyntax to rewrite JS + HTML
* remove comment; oneLine makes the whole thing commented
* Fix tests, apple.com edge case
* wip: add getOrSet
* Revert "wip: add getOrSet"
This reverts commit a5c647c00f.
* release 3.5.0 [skip ci]
* use recast to replace window property accesses
* replace assignments to top properly
* fix yarn.lock
* bump deps
* update integration tests
* remove old security ts?
* fix integration spec
* always ignore js interception failure
* use globalThis instead of window
* add experimentalSourceRewriting flag
* restore regex-writer spec
* fix types
* update config_spec
* add source rewriting spec
* cleanup
* simplify rewriting logic, move rules into rewriter package
* create threaded rewriting tool for non-streaming use
* update @packages/rewriter to use threads for async
* use async rewriting where convenient
* add worker-shim.js
* add performance info to debug logs
* properly handle +=, -=, ...
* add proxy, rewriter to unit-tests stage
* cleanup
* use parse5 to rewrite HTML, strip SRI
* update tests
* reorganization, cleanup
* rewrite ALL parent, top identifiers except in a few cases
* handle many JS edge cases
* ensure parse5@5.1.1 is installed
* update yarn.lock
* update tests
* add debugging, add tests
* add attempted repro for .href issue
* implement source maps + extending inline source maps
* update opts passing in proxy layer
* fix sourcemap naming structure
* update tests to account for sourcemaps
* sourcemap tests
* remote source maps work
* comment
* update rewriter tests
* clean up TODOs in resolveWindowReference
* remove @types/nock
* clean up todos in deferred-source-map-cache
* fix rewriter build script
* fix concatStream import
* bump expectedresultcount
* clean up js-rules
* threading improvements, workaround for Electron segfault
* no visit_spec for now
* fix 6_visit_spec
* update MAX_WORKER_THREADS
* add repro for #3975
* cleanup
* cleanup
* make better use of namedTypes and builders
* get rid of the horrific closureDetectionTernary
ast-types keeps track of scope, so it is unneeded
* fix#3975, #3994
* add x-sourcemap, sourcemap header support
* snap-shot-it 7.9.3
* add deferred-source-map-cache-spec
* add tests
* Throw error in driver if AST rewriting fails
* Fix "location = 'relative-url'"
* fix max recursion depth
* slim down some fixtures
* fix window.location usage
* don't mess with `frames` at all
* no integration tests
* skip testing apple.com for now
* update wording: regex-based vs. ast-based
* skip real-world tests for now
* add some padding to process.exit workaround
* fix resolvers_spec
* fix html-spec
* cleanup
* Update packages/rewriter/lib/js-rules.ts
* Update packages/driver/src/cypress/resolvers.ts
* just import find by itself
* privatize typedefs for Cypress.state, remove .gitignore, remove dead code
Co-authored-by: Ben Kucera <14625260+Bkucera@users.noreply.github.com>
* remove npmInstall logic in helper/e2e script, force custom reporters to use our mocha
* remove mocha imports specs
* use mocha 7.0.1 in server/reporter, and for custom reporters
* update snapshots for new mocha version
* fix glob in server tests
* remove unneeded e2e/package.json deps
* 6480: Add feature-policy to problematic headers
* 6480: Create new middleware
* 6480: Fix code placement
* 6480: Add integration test
* 6480: Remove header when no directives left
* fix: chromium installed as a snap is properly detected
* add 5s timeout to browser detection
* remove .profile stuff
* use profilePath for alternative profile dirs
* rename legacyPathToProfiles
* update tests
Co-authored-by: Ben Kucera <14625260+Bkucera@users.noreply.github.com>
* Out-of-the-box TypeScript support for plugins
* Out-of-the-box TypeScript Support for tests.
* Fix server unit tests.
* Don't use bundled typescript.
* Added esModuleInterop option.
* Fixed unit tests.
* Added simple_tsify to integration test.
* Added integration tests for ts spec files.
* simple_tsify to ignore transpiling json files.
* transpile on flush.
* Fix lint failure.
* Added error message.
* Add error message for restart test runner for support file.
* Added JSDoc comment.
* Remove preset-typescript.
* Fix integration test failure.
* Fix type errors.
* Add e2e test for typescript
* Fix lint error.
* Add plugin support and e2e test.
* Fix server unit test failures.
* Update snapshots.
* Migrate typescript compilation code to browserify-preprocessor
* Remove unnecessary files and test.
They're tested in preprocessor.
* Fix test failures.
* Update @types/react.
* Update yarn.lock.
* Clear name: registerTS -> tsRegistered.
* Clarify why tsRegistered = true exists.
* Add working examples for support and plugins.
* Move TypeScript tests to its own file.
* Skip empty video chunks in writeVideoFrame
* add link to issue + context
* add video_capture_spec
Co-authored-by: Jennifer Shehane <jennifer@cypress.io>
* Detect if NODE_OPTIONS are present in binary; if not, respawn
* Always reset NODE_OPTIONS, even if no ORIGINAL_
Co-authored-by: Andrew Smith <andrew@andrew.codes>
* Exit with correct code # from stub process
* Clean up based on Brian's feedback
* how process.versions is null, i have no idea, but it is
* add repro for invalid header char
* Always pass NODE_OPTIONS with max-http-header-size (#5452)
* cli: set NODE_OPTIONS=--max-http-header-size=1024*1024 on spawn
* electron: remove redundant max-http-header-size
* server: add useCli option to make e2e tests go thru cli
* server: add test for XHR with body > 100kb via CLI
* clean up conditional
* cli: don't pass --max-http-header-size in dev w node < 11.10
* add original_node_options to restore o.g. user node_options
* force no color
* Revert "Use websockets to stub large XHR response bodies instead of hea… (#5525)"
This reverts commit 249db45363.
* fix yarn.lock
* update 4_xhr_spec snapshot
* make 6_visit_spec reproduce invalid header char error
* pass --http-parser=legacy
* still set headers if an ERR_INVALID_CHAR is raised
* add --http-parser=legacy in some more places
* update http_requests_spec
* readd spawn_spec
* improve debug logging
* remove unnecessary changes
* cleanup
* revert yarn.lock to develop
* use cp.spawn, not cp.fork
to work around the Electron patch: https://github.com/electron/electron/blob/39baf6879011c0fe8cc975c7585567c7ed0aeed8/patches/node/refactor_alter_child_process_fork_to_use_execute_script_with.patch
Co-authored-by: Andrew Smith <andrew@andrew.codes>
* decaffeinate: Rename saved_state.coffee from .coffee to .js
* decaffeinate: Convert saved_state.coffee to JS
* decaffeinate: Run post-processing cleanups on saved_state.coffee
* decaffeinate: Rename saved_state_spec.coffee from .coffee to .js
* decaffeinate: Convert saved_state_spec.coffee to JS
* decaffeinate: Run post-processing cleanups on saved_state_spec.coffee
* refactor saved state
- create a single saved_state module instead of having two
- export an object with methods instead of a function with methods
* Allow %, & in file name.
* Extract escapeFilenameInUrl
* Fix tests.
* Add test for ? (non-Windows).
* Remove platform condition. And handle when special chars are in the dir.
* Fix failure.
* Fix failure.
* add e2e test for specs with special characters
* minor refactor
Co-authored-by: Chris Breiding <chrisbreiding@users.noreply.github.com>
* Use CDP to record video for Electron
* Enable video recording in Electron headed
* Test video in headed + headless for all browsers
* Update e2e tests
* force websockets transport
* wip: ensure ws connections take place thru a known socket
* clean up yesterday's work
* remove dead code (request is undefined)
* update websocket tests
* add websocket tests
* update socket + server specs
* add token auth for file_server
* Fix cy.visit file_server
* restrict non-proxied URLs, serve error on runner URL non-proxied
* add e2e test for server splash page
* fix types
* use clientRoute, fix tests
* only run 6_non_proxied in electron
* use browser.path
* improve empty options type
* add ws assertions in e2e tests
* fix server_spec
* refactor socket whitelisting logic
* update server_spec
* respond to PR feedback
- added tests for non-clientRoute redirecting to clientRoute when not behind proxy
- cleaned up comments
- cleaned up logic in server.coffee
- moved error html to own file
- added unit test for socket whitelist + fixed removal bug
* deprecate old API for before:browser:launch
* trigger ci
* allow chrome preferences to be overwritten in before:browser:launch
* add e2e test for chrome preferences
* add launchOptions.windowSize, refactor plugin handling into browser/utils
* async/await-ify chrome.ts, update e2e.js
* add padding to warning, allow more than 1 warning in run mode
* remove psInclude
* bump snap-shot-it, remove patch-package
* fix failing tests, tighten up code
* remove unused Promise.all
* more code cleanup from coffeescript conversion
* fix expectedExitcode
* update snapshot with cross origin error message
* more code cleanup from coffeescript conversion
* remove global state, cleanup normalizing stdout in snapshots
* fix asserting on the expected exit code
* remove firefox a default browser in e2e tests
* remove dupe const
* make onStdout return first arg by default
* remove only
* make expectedExitCode: 0 the default, remove duplicate option from all e2e tests
* fix test for electron
* reuse _getArgs() properly, tighten up dupe code, move perf e2e tests to use new e2e.it helpers
* make e2e test pass properly, and capture snapshot
- this was being overlooked because expectedExitCode wasn’t being set
(until now its the default)
* revert firefox specific changes to reduce PR diff
* remove newline
* temp 02/04/20 [skip ci]
* add more scenarios / return values
* rename plugin deprecation project fixture
* prevent warnings in run mode from being called multiple times in the same browser launch
- add plugin integration tests
- cleanup some promise code in browsers/chrome
- refactor the e2e deprecation tests
* update e2e deprecation specs, test that deprecation warning is displayed once per spec on a run
* cleanup let -> const, coffescript conversion
* bump snap-shot-it, remove patch-package
(cherry picked from commit ba23be5349)
* bump cli snap-shot-it
* cleanup: let -> const, parseFloat, formatting
* revert cross origin normalization
* fix spacing
* add types for plugin events
* dont pad warning message in run mode
* add e2e test for adding extensions before:browser:launch
* fix failing electron unit test, consolidate creating default launch options
* add extensions for electron + warning if install fails
* fix failing tests, yield the right before:browser:launch args signature
* e2e test electron via devtools extension
* remove .only
* add stdout assertions to e2e/1_deprecated_spec
* remove snapshot whitespace
* rename deprecation event
* update deprecated browser launch args warning message
* throw error on unexpected bbl property
* add tests for warning + error on bbl
* update snapshot
* revive 2 useful tests to validate how launchOption args are merged
* try fix e2e fullscreen spec, update snapshots
* tighten up code for throwing errors on unknown launch options properties
- list out the unknown and expected properties using existing
conventions
- tighten up the error message a bit
* rename options -> launchOptions, add e2e test for adding unknown properties to launchOptions, removed dupe snapshots
* fix fullscreen e2e test
* only push user gesture arg if chromium
* add e2e tests for throwing + rejecting errors, run e2e tests on all browsers, avoid ps logic only in electron
* remove conditional args in fullscreen test
* dont automatically install the latest version of chrome in circle
* add stubs for new electron properties
* switch from using port 5555 to 5544 to avoid common conflicts
* temporarily commenting out windowSize launchOption so release is unblocked and all tests pass
- can add it back in later once the e2e tests pass in CI
* make the path to chrome profile correctly dynamic to account for all operating systems
* remove magic length(8) and slice out the first 4 custom args set from the plugin launch options
* add back --start-maximized in chrome
* deleting windowSize-related code... for now!
Co-authored-by: Zach Bloomquist <github@chary.us>
Co-authored-by: Brian Mann <brian.mann86@gmail.com>
Co-authored-by: Chris Breiding <chrisbreiding@users.noreply.github.com>
* WIP: throw specific error when cannot parse Cypress arguments
* test invalid config string
* add unit test
* rework error message, handle env, reporter options and config
* add args error unit tests
* rework snapshots
* use reporterOptions name
* update snapshot
* add process profiler for debugging
* remove existing CYPRESS_MEMORY check
* rename some columns, format PIDs a little nicer, start when debug is enabled or verbosedebug is enabled
* use shared method for determining if this is the electron process running
* finish adding enhanced grouping
* cleanup
* add tests for changes to other parts of cypress
* add tests for process_profiler
* use browser displayname to group
* fix ffmpeg and add tests
Co-authored-by: Brian Mann <brian.mann86@gmail.com>
* electron@7.x
* node12.8.1-chrome78-ff70
* Revert "node12.8.1-chrome78-ff70" for now
This reverts commit db2d521994.
* update sendCommand to log on all sendcommands
* promisification in 6.x
* Revert "Revert "node12.8.1-chrome78-ff70" for now"
This reverts commit 57fe764098.
* fix sendcommand
* fix cdp in electron
* fix desktop-gui test
* skip tests that will be fixed by #4973
* bump MAX_ALLOWED_FILE_SIZE :/
* update electron browser spec
* make new dialog code null-proof
* add failing e2e test for issue 5475
* bump electron packager
* add e2e snapshot
* update deprecated electron getters/setters
https://github.com/electron/electron/blob/7-1-x/docs/api/modernization/property-updates.md
* build and test on Mac
* move macbuildfilters to top
* 7.1.3
* electron@7.1.4
Co-authored-by: Brian Mann <brian.mann86@gmail.com>
Co-authored-by: Gleb Bahmutov <gleb.bahmutov@gmail.com>
decaffeinate: Run post-processing cleanups on project_spec.coffee
decaffeinate: Run post-processing cleanups on open_project.coffee
decaffeinate: Run post-processing cleanups on open_project_spec.coffee
Fixed error.
Fixed snapshot.
Removed returns.
* Alphabetize cli options for my own sanity
* begin added tag flag
* Fix some minor grammar in cli help output + be more specific for specs description
* update snapshot based on alphabetization change
* update snapshot to include --tag in help output
* update logic for pulling out space delimited args to look through --tag and --spec flags dynamically
* Support and pass along tag flag to run and record
- show err if passed without record flag
- sanitize args into comma separated string
- display tag in record errors
* fix some tests/snapshots where 'tag' was missing
* Actually try passing in tag through tests to ensure it prints.
* Merge branch 'develop' into issue-2561-tags
# Conflicts:
# cli/__snapshots__/cli_spec.js
# cli/lib/cli.js
# cli/lib/exec/run.js
# packages/server/lib/modes/run.js
# packages/server/lib/util/args.js
* Send 'tags' as an array to backend API
* Update json-schemas to query against 2.2.0 of postRun
- this will require a bump to json-schemas repo
* update test to reflect tags array
* update snapshot to display nightly tag
* rearrange args to alphabetical order in specs
* Add tags to runResponses / remove tag from incorrect instance post
* Fix failing specs / snapshots
* Update error messages + snapshots
* Fix snapshot that no longer displays tag arg
* fix args unit test
* remove extra slash
* add a few more cli tests
* another test just in case
* a quick unit test for displayFlags utility
Co-authored-by: Gleb Bahmutov <gleb.bahmutov@gmail.com>
* if cypress gets -- as leading argument, remove it
* start Eletron app args with --
* remove only
* update CLI to pass --no-sandbox before -- separator
* remove -- from args in cypress server
* do not use --no-sandbox in CLI when running in dev mode
* renames
* Refactor proxy into own package, implement middleware pattern
don't need these mocha opts anymore
fix test
no more zunder
READMEs
fix test
* pass request by reference
* fix cors path
* Move replace_stream to proxy, concat-stream util in network
* Pin dependency versions
* Revert addDefaultPort behavior
* Add READMEs for proxy, network
* Update README.md
* eslint --fix
* set to null not undefined
* use delete and bump node types
* import cors from package now
* parse-domain@2.3.4
* proxy package needs common-tags
* move pumpify dep
* load through where it's needed, remove unused passthru_stream
* remove unneeded getbuffer call
Co-authored-by: Gleb Bahmutov <gleb.bahmutov@gmail.com>
* clean up cookies_spec in preparation for more assertions
* add test for setting 2 cookies at each redirect
* clean up tests somewhat
* add failing test
* make buffers a singleton
* do not resolve visit on superdomain change with cached buffer
* Update request_spec that expects 1 GET per visit
* update server_specs that expect 1 request/visit
* improve variable names + logging in request.coffee
* always reset buffers before test run + on visit
* fix(deps): update parse-domain to 2.3.4 🌟
* update details now that s3.amazonaws.com is a public suffix
* bump max size
Co-authored-by: Renovate Bot <bot@renovateapp.com>
Co-authored-by: Zach Bloomquist <github@chary.us>
* Use win.destroy to destroy windows, log more events
* fix test
* Add tests for onbeforeunload, beforeunload exiting successfully
* add window.open beforeunload tests
* beforeunload, not beforeload
* just destroy those child windows
* WIP: log spec search steps
* add multiple files via glob test
* allow testFiles to be a string or a list of strings to match
* failing config tests: testFiles type change
Change `testFiles` from a string to either a string **or** array of strings; following similar pattern as `ignoreTestFiles`
* testFiles type change passing tests
* update verbiage related to testFiles type change
* enable running integration tests locally
See https://github.com/paulmillr/chokidar/issues/855 for more details.
* integration tests; failing
Seems to fail for similar reason as #4543 and is likely resolved with PR #4849
* correct test verbiage
Distinguish between the two tests; as they are subtly different.
* update TS types for testFiles type change
Updated the comments, but forgot to update the actual type. This commit rectifies that.
* correct CLI syntax in test
`--config` was not being passed the appropriate value. Now matches other test cases; such as that found in [args_spec](https://github.com/cypress-io/cypress/blob/92b91fe514e5ff6286b4d4e26d2df23062bdf869/packages/server/test/unit/args_spec.coffee#L210)
* remove unsupported syntax from tests
From looking at other tests, it does not appear that the syntax `--config=testFiles=glob1,glob2` is current supported. Removing the test for this test case.
* test the correct config value
Previously was testing `ignoreTestFiles` instead of `testFies`
* provide more accurate test assertion
* correct config's `testFiles` type
Should be a string or an array of strings.
* remove unnecessary newline
* tweak verbiage to better align with intention
Co-Authored-By: Ben Kucera <14625260+Bkucera@users.noreply.github.com>
Co-authored-by: Andrew Smith <andrew@andrew.codes>
* server: add test for XHR with body > 100kb via CLI
* Use websockets to stub large XHR response bodies instead of headers
* Properly cleanup outstanding XHRs on before:test:run
* Add lil unit test for xhr_ws_server
* Use reset:xhr:server to get around sending entire test:before:run:async payload
* Responding to feedback
* Implement feedback
* move data obj wrapping into xhrs controller
* try connecting to chrome remote interface
* linting
* print CRI targets for better debugging
* linting
* load empty tab first when connecting to CRI
* first load blank page, then navigate
* Page.navigate is working
* linting
* remove title
* add mocha banner
* more banners
* update some server unit tests
* update integration test
* document how to run single driver spec file
* set the focus back on the page before navigating from blank chrome tab
* update server unit test
* do not store Chrome remote interface reference for now
* record video of the Chrome tab using screencast API
* use dynamic port to connect to Chrome remote interface
* update unit tests
* refactoring
* wrap chrome remote interface in our interface, limit access to send
* resolved merge
* fix reference
* passing run unit spec
* stub canary search for CI to pass
* add build step to packages/server
* update chrome spec
* do not build js on install for server
* updated spec snapshots
* update 6_visit_spec snapshot
* update snapshot for 6_web_security_spec
* update snapshot for 3_plugins_spec
* update snapshot for 3_user_agent_spec
* update snapshot for 5_stdout_spec
* update snapshot for 2_browser_path_spec
* do not git ignore js files, add note why
* update several snapshots with video on Chrome
* update visit performance snapshot
* add chrome-remote-interface dependency
* cleanup coffeescript conversion to JS, fix some type errors, make parallel override clearer
* fix failing tests
* Fix snapshot - now we do record in Chrome, so warning message is no longer there.
* remove chrome warnings about not recording from snapshot
* Remove performance tests from 6_visit_spec snapshot
* Remove error from snapshot
* Add newline back to cy_visit_performance_spec snapshot
* Use CDP to control Chrome cookies + screenshot
* Add devtools types
* Cleanup
* Cleanup
* Add guards for minimum CDP version
* Fix failing tests
* Split cdp_automation_spec out of electron_spec
* Move takeScreenshot to cri-client
* Navigate to about:blank
* look for blank page url
* add note about avoiding Prettier
* disable prettier a little more
* call chrome remote interface close after each spec
* return promise when starting screencast
* update failing unit tests, add cri client close test
* update integration test
* Add verbose debug statements to cri-client
* Use connect.createRetryingSocket for CDP connection
* record video from chrome browsers
* add method for validating browser family
* update e2e spec snapshot
* update 4_request_spec snapshot
* update snapshot for spec 1_commands_outside_of_test_spec
* update snapshot for 3_plugins_spec
* update snapshot for spec 3_user_agent_spec
* try: Always log video capturing errors
* update snapshot for 2_browser_path_spec
* update snapshot for 2_cookies_spec
* better browser family test
* update snapshot for 5_stdout_spec
* update snapshot for 5_subdomain_spec
* Add protocol_spec tests
* do not capture video during performance test
* Add test for VIDEO_POST_PROCESSING_FAILED warning
* Add basic cookie validation in cy.setCookie
* Update cdp_automation to throw on Network.setCookie failure code
* Update tests 🎉
* Update snapshot
* Fix test
* Remove redundant logs, cleanup
* Add cri-client_spec, fix some small bugs, improve errors
* Update dep
* use client.on to register screencast callback
* use isCookieName
* strict-cookie-parser@3.1.0
* cleanup prettier, extract some functions, switch to browser.family
* moar cleanup and fixes
* add logging to the cri-client so we can see every message sent + received to the cdp protocol
* bump bluebird to 3.7.0 for .tapCatch addition
* Fix unit tests
* WIP: update e2e test to ensure that duration of the video matches what we expect
* Test duration of recorded video
* Run 6_video_compression in chrome + electron
* Cleanup
* finish ffmpeg duration verification
* Update 8_reporters_spec snapshot
* Fix cri-client test
* Update CRI close logic to monkey-patch browser.kill
* add isBrowserFamily back
* make it possible for remote-debugging-port to get overridden
* Make CDP timeout 5s; add unit, e2e tests for CDP failure; add user-friendly CDP failure error
* Update tests
* Use CYPRESS_REMOTE_DEBUGGING_PORT to set CDP port; update CDP error message
* Change new Buffer to Buffer.from
* Apply name validation on all cookie commands
* Just throw on Chrome start if the CDP version is < 1.3
* Fix cypress_spec
* Use CDP to set resolution + scale factor in Chrome e2e
* Revert "Use CDP to set resolution + scale factor in Chrome e2e"
This reverts commit a1b86d9413.
* use CYPRESS_FORCE_BROWSER_SCALE to force standard resolution
* don't do --window-size --kiosk
* Use CDP to set resolution + scale factor in Chrome e2e
* Revert "use CYPRESS_FORCE_BROWSER_SCALE to force standard resolution"
This reverts commit 22c5e78670.
* Use Page.captureScreenshot for Electron + Chrome, reduce logic
* Use before() task to force device metrics in Chrome
* Fix protocol_spec
* Update 7_record_spec to allow for before() hook
* Update 6_task_spec snapshot
* Appease eslint
* Update hooks in 5_spec_isolation snapshot
* some general promisification and cleanup
* feedback on pluginsfile
* cdp_automation feedback
* chrome.coff feedback
* feedback
* run e2e tests on port 4466, ensure no e2e test ever runs on 5566 to prevent conflicting with debugger port
* accept new 'remote:debugger:protocol' automation command to control device metrics overrides
* update web security e2e to run on electron + chrome
* run web security tests in electorn, disable context isolation
* pass disable-site-isolation-trials to Electron so webSecurity works
* Fix errors in e2e tests caused by extra log item
* fix cri-client unit tests
* fancy arrows in log message
Co-authored-by: Gleb Bahmutov <gleb.bahmutov@gmail.com>
Co-authored-by: Brian Mann <brian.mann86@gmail.com>
Co-authored-by: Jennifer Shehane <jennifer@cypress.io>