diff --git a/packages/desktop-gui/cypress/integration/project_nav_spec.js b/packages/desktop-gui/cypress/integration/project_nav_spec.js
index 33c790fbf2..dd6e51fef8 100644
--- a/packages/desktop-gui/cypress/integration/project_nav_spec.js
+++ b/packages/desktop-gui/cypress/integration/project_nav_spec.js
@@ -128,13 +128,11 @@ describe('Project Nav', function () {
return b.displayName !== 'Chrome'
})
- let family = dropdownBrowsers[i].family
-
- family = family === 'electron' ? 'chrome' : family
+ let name = dropdownBrowsers[i].name
// first one is shown in selection, so skip first
cy.wrap($i).should('have.class',
- `fa-${family}`)
+ `browser-icon ./fonts/${name}.svg`)
})
})
@@ -150,7 +148,7 @@ describe('Project Nav', function () {
it('displays default browser icon in chosen', () => {
cy.get('.browsers-list>a').first()
- .find('.fa-chrome')
+ .find('.chrome')
})
})
})
@@ -195,8 +193,8 @@ describe('Project Nav', function () {
})
it('displays browser icon as spinner', () => {
- cy.get('.browsers-list>a').first().find('i')
- .should('have.class', 'fas fa-sync-alt fa-spin')
+ cy.get('.browsers-list>a').find('img')
+ .should('have.class', 'browser-icon ./fonts/loading.svg')
})
it('disables browser dropdown', () => {
@@ -213,8 +211,8 @@ describe('Project Nav', function () {
})
it('displays browser icon as opened', () => {
- cy.get('.browsers-list>a').first().find('i')
- .should('have.class', 'fas fa-check-circle')
+ cy.get('.browsers-list>a').first().find('img')
+ .should('have.class', 'browser-icon ./fonts/checkmark.svg')
})
it('disables browser dropdown', () => {
@@ -257,7 +255,7 @@ describe('Project Nav', function () {
it('displays default browser icon', () => {
cy.get('.browsers-list>a').first()
- .find('.fa-chrome')
+ .find('.chrome')
})
})
@@ -277,7 +275,7 @@ describe('Project Nav', function () {
it('displays default browser icon', () => {
cy.get('.browsers-list>a').first()
- .find('.fa-chrome')
+ .find('.chrome')
})
})
})
@@ -301,7 +299,7 @@ describe('Project Nav', function () {
it('displays local storage browser icon in chosen', () => {
cy.get('.browsers-list>a').first()
- .find('.fa-chrome')
+ .find('.chromium')
})
})
@@ -388,6 +386,8 @@ describe('Project Nav', function () {
it('displays generic icon', () => {
cy.get('.browsers-list>a').first()
.should('contain', 'Custom Foo')
+ .find('.browser-icon').should('have.class',
+ `browser-icon ./fonts/defaultBrowser.svg`)
})
it('pre-selects the custom browser', () => {
diff --git a/packages/desktop-gui/src/app/nav.scss b/packages/desktop-gui/src/app/nav.scss
index acb96cd55a..91b0e52132 100644
--- a/packages/desktop-gui/src/app/nav.scss
+++ b/packages/desktop-gui/src/app/nav.scss
@@ -169,26 +169,20 @@
display: inline-block;
}
- .browser-icon {
- color: #4573d9;
+ .browser-icon {
+ width: 16px;
+ height: 16px;
}
- .chrome > .browser-icon {
- color: #1da261;
- }
- .canary > .browser-icon {
- color: #f29b14;
- }
- .chromium > .browser-icon {
- color: #4573d9;
- }
- .electron > .browser-icon {
- color: #2b2e3a;
- }
- .firefox > .browser-icon {
- color: #ff720d;
+ .selected .browser-icon {
+ position: relative;
+ top: -1px;
}
+ .electron .browser-icon {
+ position: relative;
+ top: -1px;
+ }
.dropdown-menu {
left: auto;
@@ -196,6 +190,7 @@
}
}
+
.nav .browser-info {
color: #999;
margin-left: 6px;
diff --git a/packages/desktop-gui/src/dropdown/dropdown.jsx b/packages/desktop-gui/src/dropdown/dropdown.jsx
index ebce51d024..d558255493 100644
--- a/packages/desktop-gui/src/dropdown/dropdown.jsx
+++ b/packages/desktop-gui/src/dropdown/dropdown.jsx
@@ -49,7 +49,7 @@ class Dropdown extends Component {
_button () {
if (this.props.others.length) {
return (
-
+
{this._buttonContent()}
)
diff --git a/packages/desktop-gui/src/project-nav/browsers.jsx b/packages/desktop-gui/src/project-nav/browsers.jsx
index 957846c94d..54c1a91d64 100644
--- a/packages/desktop-gui/src/project-nav/browsers.jsx
+++ b/packages/desktop-gui/src/project-nav/browsers.jsx
@@ -6,6 +6,15 @@ import MarkdownRenderer from '../lib/markdown-renderer'
import projectsApi from '../projects/projects-api'
+import electron from './icons/electron.svg'
+import chrome from './icons/chrome.svg'
+import canary from './icons/canary.svg'
+import chromium from './icons/chromium.svg'
+import loading from './icons/loading.svg'
+import checkmark from './icons/checkmark.svg'
+import firefox from './icons/firefox.svg'
+import defaultBrowser from './icons/defaultBrowser.svg'
+
@observer
export default class Browsers extends Component {
render () {
@@ -58,19 +67,42 @@ export default class Browsers extends Component {
let prefixText
if (project.browserState === 'opening') {
- icon = 'fas fa-sync-alt fa-spin'
+ icon = loading
prefixText = 'Opening'
} else if (project.browserState === 'opened') {
- icon = 'fas fa-check-circle green far'
+ icon = checkmark
prefixText = 'Running'
} else {
- icon = `fab fa-${browser.icon}`
+ icon = getIcon(browser.name)
prefixText = ''
}
+ function getIcon (browserName) {
+ switch (browserName) {
+ case 'electron': {
+ return electron
+ }
+ case 'chrome': {
+ return chrome
+ }
+ case 'canary': {
+ return canary
+ }
+ case 'chromium': {
+ return chromium
+ }
+ case 'firefox': {
+ return firefox
+ }
+ default: {
+ return defaultBrowser
+ }
+ }
+ }
+
return (
- {' '}
+
{' '}
{prefixText}{' '}
{browser.displayName}{' '}
{browser.majorVersion}
diff --git a/packages/desktop-gui/src/project-nav/icons/canary.svg b/packages/desktop-gui/src/project-nav/icons/canary.svg
new file mode 100644
index 0000000000..109007f96e
--- /dev/null
+++ b/packages/desktop-gui/src/project-nav/icons/canary.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/desktop-gui/src/project-nav/icons/checkmark.svg b/packages/desktop-gui/src/project-nav/icons/checkmark.svg
new file mode 100644
index 0000000000..4f1db975db
--- /dev/null
+++ b/packages/desktop-gui/src/project-nav/icons/checkmark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/desktop-gui/src/project-nav/icons/chrome.svg b/packages/desktop-gui/src/project-nav/icons/chrome.svg
new file mode 100644
index 0000000000..ef756605fe
--- /dev/null
+++ b/packages/desktop-gui/src/project-nav/icons/chrome.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/desktop-gui/src/project-nav/icons/chromium.svg b/packages/desktop-gui/src/project-nav/icons/chromium.svg
new file mode 100644
index 0000000000..e9ecd6a2b1
--- /dev/null
+++ b/packages/desktop-gui/src/project-nav/icons/chromium.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/desktop-gui/src/project-nav/icons/defaultBrowser.svg b/packages/desktop-gui/src/project-nav/icons/defaultBrowser.svg
new file mode 100644
index 0000000000..2cf9196997
--- /dev/null
+++ b/packages/desktop-gui/src/project-nav/icons/defaultBrowser.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/desktop-gui/src/project-nav/icons/electron.svg b/packages/desktop-gui/src/project-nav/icons/electron.svg
new file mode 100644
index 0000000000..3a45a11f58
--- /dev/null
+++ b/packages/desktop-gui/src/project-nav/icons/electron.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/desktop-gui/src/project-nav/icons/firefox.svg b/packages/desktop-gui/src/project-nav/icons/firefox.svg
new file mode 100644
index 0000000000..004dbc7d0c
--- /dev/null
+++ b/packages/desktop-gui/src/project-nav/icons/firefox.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/desktop-gui/src/project-nav/icons/loading.svg b/packages/desktop-gui/src/project-nav/icons/loading.svg
new file mode 100644
index 0000000000..5af3cba42d
--- /dev/null
+++ b/packages/desktop-gui/src/project-nav/icons/loading.svg
@@ -0,0 +1,52 @@
+
+
\ No newline at end of file
diff --git a/packages/driver/src/cy/assertions.js b/packages/driver/src/cy/assertions.js
index 0e5a613d02..7fde3d5d60 100644
--- a/packages/driver/src/cy/assertions.js
+++ b/packages/driver/src/cy/assertions.js
@@ -284,7 +284,18 @@ const create = function (state, queue, retryFn) {
// assertions
if (cmdHasFunctionArg(cmd)) {
let index = cmd.get('assertionIndex')
- const assertions = cmd.get('assertions')
+ let assertions = cmd.get('assertions')
+
+ // https://github.com/cypress-io/cypress/issues/4981
+ // `assertions` is undefined because assertions added by
+ // `should` command are not handled yet.
+ // So, don't increase i and go back to the last command.
+ if (!assertions) {
+ i -= 1
+ cmd = cmds[i - 1]
+ index = cmd.get('assertionIndex')
+ assertions = cmd.get('assertions')
+ }
// always increase the assertionIndex
// so our next assertion matches up
diff --git a/packages/driver/src/cy/keyboard.ts b/packages/driver/src/cy/keyboard.ts
index bf92fdc292..840c69ad5a 100644
--- a/packages/driver/src/cy/keyboard.ts
+++ b/packages/driver/src/cy/keyboard.ts
@@ -263,7 +263,8 @@ const shouldUpdateValue = (el: HTMLElement, key: KeyDetails, options) => {
debug('skipping inserting value since number input would be invalid', key.text, potentialValue)
// when typing in a number input, only certain whitelisted chars will insert text
if (!key.text.match(isValidNumberInputChar)) {
- options.prevVal = ''
+ // https://github.com/cypress-io/cypress/issues/6055
+ // Should not remove old valid values when a new one is not a valid number char, just dismiss it with return
return
}
diff --git a/packages/driver/test/cypress/integration/commands/actions/type_spec.js b/packages/driver/test/cypress/integration/commands/actions/type_spec.js
index 76d6f90130..f1942627c8 100644
--- a/packages/driver/test/cypress/integration/commands/actions/type_spec.js
+++ b/packages/driver/test/cypress/integration/commands/actions/type_spec.js
@@ -1252,6 +1252,13 @@ describe('src/cy/commands/actions/type', () => {
.should('have.value', '-123.12')
})
+ // https://github.com/cypress-io/cypress/issues/6055
+ it('can type negative numbers and dismiss invalid characters', () => {
+ cy.get('#number-without-value')
+ .type('-a42')
+ .should('have.value', '-42')
+ })
+
it('can type {del}', () => {
cy.get('#number-with-value')
.type('{selectAll}{del}')
diff --git a/packages/driver/test/cypress/integration/commands/assertions_spec.js b/packages/driver/test/cypress/integration/commands/assertions_spec.js
index 4e578a7846..8ecdacda7d 100644
--- a/packages/driver/test/cypress/integration/commands/assertions_spec.js
+++ b/packages/driver/test/cypress/integration/commands/assertions_spec.js
@@ -211,6 +211,29 @@ describe('src/cy/commands/assertions', () => {
})
})
+ it('can be chained', () => {
+ cy.wrap('ab')
+ .should((subject) => {
+ expect(subject).to.be.a('string')
+ expect(subject).to.contain('a')
+ })
+ .should((subject) => {
+ expect(subject).to.contain('b')
+ expect(subject).to.have.length(2)
+ })
+ .and((subject) => {
+ expect(subject).to.eq('ab')
+ expect(subject).not.to.contain('c')
+ })
+ .then(function () {
+ expect(this.logs.length).to.eq(8)
+
+ this.logs.slice(1).forEach((log) => {
+ expect(log.get('name')).to.eq('assert')
+ })
+ })
+ })
+
context('remote jQuery instances', () => {
beforeEach(function () {
this.remoteWindow = cy.state('window')