generated from Tinkoff/angular-open-source-starter
-
Notifications
You must be signed in to change notification settings - Fork 36
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix(core): don't ignore native attribute
maxlength
(#350)
- Loading branch information
1 parent
8fe9445
commit 8504f49
Showing
7 changed files
with
157 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
105 changes: 105 additions & 0 deletions
105
projects/demo-integrations/cypress/tests/others/native-maxlength-attribute.cy.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,105 @@ | ||
import {DemoPath} from '@demo/constants'; | ||
|
||
import {BROWSER_SUPPORTS_REAL_EVENTS} from '../../support/constants'; | ||
|
||
describe('Native attribute maxlength works', () => { | ||
describe('<input maxlength="3" /> & overwriteMode = shift', () => { | ||
beforeEach(() => { | ||
cy.visit(DemoPath.Cypress); | ||
cy.get('#maxlength input[maxlength="3"]') | ||
.should('have.prop', 'maxlength', 3) | ||
.as('input'); | ||
}); | ||
|
||
it('accepts 2 digits', () => { | ||
cy.get('@input').type('12').should('have.value', '12'); | ||
}); | ||
|
||
it('accepts 3 digits', () => { | ||
cy.get('@input').type('123').should('have.value', '123'); | ||
}); | ||
|
||
it( | ||
'can replace selected digit by new one (even if length of the value is already equal to maxlength-property)', | ||
BROWSER_SUPPORTS_REAL_EVENTS, | ||
() => { | ||
cy.get('@input').type('123').realPress(['Shift', 'ArrowLeft']); | ||
|
||
cy.get('@input').type('0').should('have.value', '120'); | ||
}, | ||
); | ||
|
||
describe('rejects to enter digits more than maxlength-property', () => { | ||
it('123| => Type 4 => 123|', () => { | ||
cy.get('@input') | ||
.type('1234') | ||
.should('have.value', '123') | ||
.should('have.prop', 'selectionStart', '123'.length) | ||
.should('have.prop', 'selectionEnd', '123'.length); | ||
}); | ||
|
||
it('12|3 => Type 0 => 12|3', () => { | ||
cy.get('@input') | ||
.type('123') | ||
.type('{leftArrow}') | ||
.type('0') | ||
.should('have.value', '123') | ||
.should('have.prop', 'selectionStart', '12'.length) | ||
.should('have.prop', 'selectionEnd', '12'.length); | ||
}); | ||
|
||
it('1|23 => Type 0 => 1|23', () => { | ||
cy.get('@input') | ||
.type('123') | ||
.type('{leftArrow}'.repeat(2)) | ||
.type('0') | ||
.should('have.value', '123') | ||
.should('have.prop', 'selectionStart', 1) | ||
.should('have.prop', 'selectionEnd', 1); | ||
}); | ||
|
||
it('|123 => Type 9 => |123', () => { | ||
cy.get('@input') | ||
.type('123') | ||
.type('{moveToStart}') | ||
.type('9') | ||
.should('have.value', '123') | ||
.should('have.prop', 'selectionStart', 0) | ||
.should('have.prop', 'selectionEnd', 0); | ||
}); | ||
}); | ||
}); | ||
|
||
describe('<input maxlength="6" /> & overwriteMode = replace', () => { | ||
beforeEach(() => { | ||
cy.visit(DemoPath.Cypress); | ||
cy.get('#maxlength input[maxlength="6"]') | ||
.should('have.prop', 'maxlength', 6) | ||
.as('input'); | ||
}); | ||
|
||
it('accepts valid 526ed3', () => { | ||
cy.get('@input').type('526ed3').should('have.value', '526ED3'); | ||
}); | ||
|
||
describe('does not allow to type characters more than [maxlength]', () => { | ||
it('many letters', () => { | ||
cy.get('@input') | ||
.type('aaabbbcccdddeeefff') | ||
.should('have.value', 'AAABBB'); | ||
}); | ||
|
||
it('many digits', () => { | ||
cy.get('@input').type('1234567890').should('have.value', '123456'); | ||
}); | ||
}); | ||
|
||
it("overwriteMode 'replace' works even if value's length is equal to [maxlength]", () => { | ||
cy.get('@input') | ||
.type('123456') | ||
.type('{leftArrow}'.repeat(3)) | ||
.type('09') | ||
.should('have.value', '123096'); | ||
}); | ||
}); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,7 @@ | ||
<tui-doc-page header="Cypress"> | ||
<ng-template pageTab="Tests"> | ||
<test-doc-example-1 id="predicate"></test-doc-example-1> | ||
|
||
<test-doc-example-2 id="maxlength"></test-doc-example-2> | ||
</ng-template> | ||
</tui-doc-page> |
35 changes: 35 additions & 0 deletions
35
projects/demo/src/pages/cypress/examples/2-native-max-length/component.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
import {ChangeDetectionStrategy, Component} from '@angular/core'; | ||
import {MaskitoOptions} from '@maskito/core'; | ||
import {maskitoNumberOptionsGenerator} from '@maskito/kit'; | ||
|
||
@Component({ | ||
selector: 'test-doc-example-2', | ||
template: ` | ||
<input | ||
maxlength="3" | ||
[maskito]="numberMask" | ||
/> | ||
<input | ||
maxlength="6" | ||
[maskito]="hexColorMask" | ||
/> | ||
`, | ||
changeDetection: ChangeDetectionStrategy.OnPush, | ||
}) | ||
export class TestDocExample2 { | ||
readonly numberMask = maskitoNumberOptionsGenerator({ | ||
thousandSeparator: ' ', | ||
}); | ||
|
||
readonly hexColorMask: MaskitoOptions = { | ||
mask: /^[A-F\d]*$/gi, | ||
overwriteMode: 'replace', | ||
postprocessors: [ | ||
({value, selection}) => ({ | ||
selection, | ||
value: value.toUpperCase(), | ||
}), | ||
], | ||
}; | ||
} |