@ionic/core 7.5.6-dev.11700168085.18cb70d3 → 7.5.6-dev.11700492285.1581ed02

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/components/ion-datetime.js +2 -2
  2. package/dist/cjs/ion-datetime_3.cjs.entry.js +2 -2
  3. package/dist/collection/collection-manifest.json +4 -4
  4. package/dist/collection/components/accordion/test/accordion.spec.js +195 -0
  5. package/dist/collection/components/action-sheet/test/action-sheet-id.spec.js +32 -0
  6. package/dist/collection/components/action-sheet/test/basic/action-sheet.spec.js +18 -0
  7. package/dist/collection/components/alert/test/alert-id.spec.js +32 -0
  8. package/dist/collection/components/alert/test/alert.spec.js +37 -0
  9. package/dist/collection/components/back-button/test/back-button.spec.js +86 -0
  10. package/dist/collection/components/breadcrumb/test/aria.spec.js +22 -0
  11. package/dist/collection/components/breadcrumbs/test/breadcrumbs.spec.js +58 -0
  12. package/dist/collection/components/button/test/form-reference/button.spec.js +26 -0
  13. package/dist/collection/components/card/test/aria.spec.js +16 -0
  14. package/dist/collection/components/checkbox/test/checkbox.spec.js +20 -0
  15. package/dist/collection/components/datetime/datetime.js +2 -2
  16. package/dist/collection/components/datetime/test/a11y/datetime.spec.js +43 -0
  17. package/dist/collection/components/datetime/test/comparison.spec.js +43 -0
  18. package/dist/collection/components/datetime/test/data.spec.js +456 -0
  19. package/dist/collection/components/datetime/test/format.spec.js +124 -0
  20. package/dist/collection/components/datetime/test/helpers.spec.js +72 -0
  21. package/dist/collection/components/datetime/test/manipulation.spec.js +433 -0
  22. package/dist/collection/components/datetime/test/parse.spec.js +222 -0
  23. package/dist/collection/components/datetime/test/state.spec.js +114 -0
  24. package/dist/collection/components/infinite-scroll-content/test/infinite-scroll-content.spec.js +37 -0
  25. package/dist/collection/components/input/test/input.spec.js +85 -0
  26. package/dist/collection/components/input/test/item/input.spec.js +24 -0
  27. package/dist/collection/components/item/test/a11y/item.spec.js +48 -0
  28. package/dist/collection/components/loading/test/basic/loading.spec.js +16 -0
  29. package/dist/collection/components/loading/test/loading-id.spec.js +32 -0
  30. package/dist/collection/components/loading/test/loading.spec.js +37 -0
  31. package/dist/collection/components/modal/test/a11y/modal.spec.js +22 -0
  32. package/dist/collection/components/modal/test/basic/modal.spec.js +16 -0
  33. package/dist/collection/components/modal/test/can-dismiss/modal.spec.js +191 -0
  34. package/dist/collection/components/modal/test/modal-id.spec.js +32 -0
  35. package/dist/collection/components/nav/test/nav-controller.spec.js +749 -0
  36. package/dist/collection/components/picker/test/picker-id.spec.js +32 -0
  37. package/dist/collection/components/picker-column/test/picker-column-aria.spec.js +35 -0
  38. package/dist/collection/components/picker-column/test/picker-column-dynamic.spec.js +29 -0
  39. package/dist/collection/components/picker-column/test/picker-column.spec.js +17 -0
  40. package/dist/collection/components/popover/test/basic/popover.spec.js +16 -0
  41. package/dist/collection/components/popover/test/popover-id.spec.js +32 -0
  42. package/dist/collection/components/popover/test/util.spec.js +53 -0
  43. package/dist/collection/components/radio/test/radio.spec.js +46 -0
  44. package/dist/collection/components/range/test/label/range.spec.js +23 -0
  45. package/dist/collection/components/range/test/range.spec.js +205 -0
  46. package/dist/collection/components/refresher-content/test/refresher-content.spec.js +46 -0
  47. package/dist/collection/components/router/test/matching.spec.js +250 -0
  48. package/dist/collection/components/router/test/parser.spec.js +133 -0
  49. package/dist/collection/components/router/test/path.spec.js +218 -0
  50. package/dist/collection/components/router/test/router.spec.js +55 -0
  51. package/dist/collection/components/searchbar/test/searchbar.spec.js +15 -0
  52. package/dist/collection/components/segment/test/segment.spec.js +37 -0
  53. package/dist/collection/components/select/test/select.spec.js +59 -0
  54. package/dist/collection/components/textarea/test/textarea.spec.js +59 -0
  55. package/dist/collection/components/toast/test/toast-id.spec.js +32 -0
  56. package/dist/collection/components/toast/test/toast.spec.js +120 -0
  57. package/dist/collection/components/toggle/test/toggle.spec.js +55 -0
  58. package/dist/collection/global/test/config-controller.spec.js +77 -0
  59. package/dist/collection/utils/animation/test/animation.spec.js +431 -0
  60. package/dist/collection/utils/keyboard/test/keyboard-controller.spec.js +21 -0
  61. package/dist/collection/utils/keyboard/test/keyboard.spec.js +214 -0
  62. package/dist/collection/utils/sanitization/test/sanitization.spec.js +43 -0
  63. package/dist/collection/utils/test/aria.spec.js +79 -0
  64. package/dist/collection/utils/test/attributes.spec.js +53 -0
  65. package/dist/collection/utils/test/hardware-back-button.spec.js +53 -0
  66. package/dist/collection/utils/test/overlays/overlays.spec.js +102 -0
  67. package/dist/collection/utils/test/platform.spec.js +132 -0
  68. package/dist/collection/utils/test/ready.spec.js +39 -0
  69. package/dist/collection/utils/test/theme.spec.js +56 -0
  70. package/dist/docs.json +21 -21
  71. package/dist/esm/ion-datetime_3.entry.js +2 -2
  72. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  73. package/dist/ionic/ionic.esm.js +1 -1
  74. package/dist/ionic/p-40903d34.system.js +1 -1
  75. package/dist/ionic/p-ad61e508.entry.js +4 -0
  76. package/dist/ionic/p-d91e93ac.system.entry.js +4 -0
  77. package/hydrate/index.js +2 -2
  78. package/package.json +2 -1
  79. package/dist/ionic/p-b76c6241.system.entry.js +0 -4
  80. package/dist/ionic/p-b781d6b2.entry.js +0 -4
@@ -0,0 +1,55 @@
1
+ /*!
2
+ * (C) Ionic http://ionicframework.com - MIT License
3
+ */
4
+ import { mockWindow } from "@stencil/core/testing";
5
+ import { findChainForSegments, findChainForIDs } from "../utils/matching";
6
+ import { readRoutes } from "../utils/parser";
7
+ import { chainToSegments, generatePath, parsePath } from "../utils/path";
8
+ import { mockRouteElement } from "./parser.spec";
9
+ describe('ionic-conference-app', () => {
10
+ it('should match conference-app routing', () => {
11
+ const root = conferenceAppRouting();
12
+ const routes = readRoutes(root);
13
+ expect(getRouteIDs('/', routes)).toEqual(['page-tabs', 'tab-schedule', 'page-schedule']);
14
+ expect(getRouteIDs('/speaker', routes)).toEqual(['page-tabs', 'tab-speaker', 'page-speaker-list']);
15
+ expect(getRouteIDs('/map', routes)).toEqual(['page-tabs', 'page-map']);
16
+ expect(getRouteIDs('/about', routes)).toEqual(['page-tabs', 'page-about']);
17
+ expect(getRouteIDs('/tutorial', routes)).toEqual(['page-tutorial']);
18
+ expect(getRoutePath([{ id: 'PAGE-TABS' }, { id: 'tab-schedule' }, { id: 'page-schedule' }], routes)).toEqual('/');
19
+ expect(getRoutePath([{ id: 'page-tabs' }, { id: 'TAB-SPEAKER' }], routes)).toEqual('/speaker');
20
+ expect(getRoutePath([{ id: 'page-tabs' }, { id: 'TAB-SPEAKER' }, { id: 'page-speaker-list' }], routes)).toEqual('/speaker');
21
+ expect(getRoutePath([{ id: 'page-tabs' }, { id: 'PAGE-MAP' }], routes)).toEqual('/map');
22
+ expect(getRoutePath([{ id: 'page-tabs' }, { id: 'page-about' }], routes)).toEqual('/about');
23
+ expect(getRoutePath([{ id: 'page-tutorial' }], routes)).toEqual('/tutorial');
24
+ });
25
+ let win;
26
+ beforeEach(() => {
27
+ win = mockWindow();
28
+ });
29
+ function conferenceAppRouting() {
30
+ const p2 = mockRouteElement(win, '/', 'tab-schedule');
31
+ const p3 = mockRouteElement(win, '/', 'PAGE-SCHEDULE');
32
+ p2.appendChild(p3);
33
+ const p4 = mockRouteElement(win, '/speaker', 'tab-speaker');
34
+ const p5 = mockRouteElement(win, '/', 'page-speaker-list');
35
+ p4.appendChild(p5);
36
+ const p6 = mockRouteElement(win, '/map', 'page-map');
37
+ const p7 = mockRouteElement(win, '/about', 'page-about');
38
+ const p1 = mockRouteElement(win, '/', 'page-tabs');
39
+ p1.appendChild(p2);
40
+ p1.appendChild(p4);
41
+ p1.appendChild(p6);
42
+ p1.appendChild(p7);
43
+ const p8 = mockRouteElement(win, '/tutorial', 'page-tutorial');
44
+ const container = win.document.createElement('div');
45
+ container.appendChild(p1);
46
+ container.appendChild(p8);
47
+ return container;
48
+ }
49
+ });
50
+ function getRouteIDs(path, routes) {
51
+ return findChainForSegments(parsePath(path).segments, routes).map((r) => r.id);
52
+ }
53
+ function getRoutePath(ids, routes) {
54
+ return generatePath(chainToSegments(findChainForIDs(ids, routes)));
55
+ }
@@ -0,0 +1,15 @@
1
+ /*!
2
+ * (C) Ionic http://ionicframework.com - MIT License
3
+ */
4
+ import { newSpecPage } from "@stencil/core/testing";
5
+ import { Searchbar } from "../searchbar";
6
+ describe('searchbar: rendering', () => {
7
+ it('should inherit attributes', async () => {
8
+ const page = await newSpecPage({
9
+ components: [Searchbar],
10
+ html: '<ion-searchbar name="search"></ion-searchbar>',
11
+ });
12
+ const nativeEl = page.body.querySelector('ion-searchbar input');
13
+ expect(nativeEl.getAttribute('name')).toBe('search');
14
+ });
15
+ });
@@ -0,0 +1,37 @@
1
+ /*!
2
+ * (C) Ionic http://ionicframework.com - MIT License
3
+ */
4
+ import { newSpecPage } from "@stencil/core/testing";
5
+ import { SegmentButton } from "../../segment-button/segment-button";
6
+ import { Segment } from "../segment";
7
+ it('should disable segment buttons added to disabled segment async', async () => {
8
+ const page = await newSpecPage({
9
+ components: [Segment, SegmentButton],
10
+ html: `<ion-segment disabled="true"></ion-segment>`,
11
+ });
12
+ const segment = page.body.querySelector('ion-segment');
13
+ segment.innerHTML = `
14
+ <ion-segment-button>
15
+ <ion-label>Segment Button</ion-label>
16
+ </ion-segment-button>`;
17
+ await page.waitForChanges();
18
+ const segmentButton = page.body.querySelector('ion-segment-button');
19
+ expect(segmentButton.disabled).toBe(true);
20
+ });
21
+ it('should set checked state when value is set asynchronously', async () => {
22
+ const page = await newSpecPage({
23
+ components: [Segment, SegmentButton],
24
+ html: `
25
+ <ion-segment value="first">
26
+ <ion-segment-button>
27
+ <ion-label>First</ion-label>
28
+ </ion-segment-button>
29
+ </ion-segment>
30
+ `,
31
+ });
32
+ const segmentButton = page.body.querySelector('ion-segment-button');
33
+ expect(segmentButton.classList.contains('segment-button-checked')).toBe(false);
34
+ segmentButton.value = 'first';
35
+ await page.waitForChanges();
36
+ expect(segmentButton.classList.contains('segment-button-checked')).toBe(true);
37
+ });
@@ -0,0 +1,59 @@
1
+ /*!
2
+ * (C) Ionic http://ionicframework.com - MIT License
3
+ */
4
+ import { h } from "@stencil/core";
5
+ import { newSpecPage } from "@stencil/core/testing";
6
+ import { Select } from "../select";
7
+ describe('ion-select', () => {
8
+ it('should render hidden input for form validation', async () => {
9
+ const page = await newSpecPage({
10
+ components: [Select],
11
+ template: () => h("ion-select", { value: "my value", name: "my name", disabled: true }),
12
+ });
13
+ const select = page.body.querySelector('ion-select');
14
+ const hiddenInput = select.querySelector('input[type="hidden"]');
15
+ expect(hiddenInput).not.toBe(null);
16
+ expect(hiddenInput.value).toBe('my value');
17
+ expect(hiddenInput.disabled).toBe(true);
18
+ expect(hiddenInput.name).toBe('my name');
19
+ });
20
+ it('should render label prop if only prop provided', async () => {
21
+ const page = await newSpecPage({
22
+ components: [Select],
23
+ html: `
24
+ <ion-select label="Label Prop Text"></ion-select>
25
+ `,
26
+ });
27
+ const select = page.body.querySelector('ion-select');
28
+ const propEl = select.shadowRoot.querySelector('.label-text');
29
+ const slotEl = select.shadowRoot.querySelector('slot[name="label"]');
30
+ expect(propEl).not.toBe(null);
31
+ expect(slotEl).toBe(null);
32
+ });
33
+ it('should render label slot if only slot provided', async () => {
34
+ const page = await newSpecPage({
35
+ components: [Select],
36
+ html: `
37
+ <ion-select><div slot="label">Label Prop Slot</div></ion-select>
38
+ `,
39
+ });
40
+ const select = page.body.querySelector('ion-select');
41
+ const propEl = select.shadowRoot.querySelector('.label-text');
42
+ const slotEl = select.shadowRoot.querySelector('slot[name="label"]');
43
+ expect(propEl).toBe(null);
44
+ expect(slotEl).not.toBe(null);
45
+ });
46
+ it('should render label prop if both prop and slot provided', async () => {
47
+ const page = await newSpecPage({
48
+ components: [Select],
49
+ html: `
50
+ <ion-select label="Label Prop Text"><div slot="label">Label Prop Slot</div></ion-select>
51
+ `,
52
+ });
53
+ const select = page.body.querySelector('ion-select');
54
+ const propEl = select.shadowRoot.querySelector('.label-text');
55
+ const slotEl = select.shadowRoot.querySelector('slot[name="label"]');
56
+ expect(propEl).not.toBe(null);
57
+ expect(slotEl).toBe(null);
58
+ });
59
+ });
@@ -0,0 +1,59 @@
1
+ /*!
2
+ * (C) Ionic http://ionicframework.com - MIT License
3
+ */
4
+ import { newSpecPage } from "@stencil/core/testing";
5
+ import { Textarea } from "../textarea";
6
+ it('should inherit attributes', async () => {
7
+ const page = await newSpecPage({
8
+ components: [Textarea],
9
+ html: '<ion-textarea title="my title" tabindex="-1" data-form-type="password"></ion-textarea>',
10
+ });
11
+ const nativeEl = page.body.querySelector('ion-textarea textarea');
12
+ expect(nativeEl.getAttribute('title')).toBe('my title');
13
+ expect(nativeEl.getAttribute('tabindex')).toBe('-1');
14
+ expect(nativeEl.getAttribute('data-form-type')).toBe('password');
15
+ });
16
+ /**
17
+ * Textarea uses emulated slots, so the internal
18
+ * behavior will not exactly match IonSelect's slots.
19
+ * For example, Textarea does not render an actual `<slot>` element
20
+ * internally, so we do not check for that here. Instead,
21
+ * we check to see which label text is being used.
22
+ * If Textarea is updated to use Shadow DOM (and therefore native slots),
23
+ * then we can update these tests to more closely match the Select tests.
24
+ **/
25
+ describe('textarea: label rendering', () => {
26
+ it('should render label prop if only prop provided', async () => {
27
+ const page = await newSpecPage({
28
+ components: [Textarea],
29
+ html: `
30
+ <ion-textarea label="Label Prop Text"></ion-textarea>
31
+ `,
32
+ });
33
+ const textarea = page.body.querySelector('ion-textarea');
34
+ const labelText = textarea.querySelector('.label-text-wrapper');
35
+ expect(labelText.textContent).toBe('Label Prop Text');
36
+ });
37
+ it('should render label slot if only slot provided', async () => {
38
+ const page = await newSpecPage({
39
+ components: [Textarea],
40
+ html: `
41
+ <ion-textarea><div slot="label">Label Prop Slot</div></ion-textarea>
42
+ `,
43
+ });
44
+ const textarea = page.body.querySelector('ion-textarea');
45
+ const labelText = textarea.querySelector('.label-text-wrapper');
46
+ expect(labelText.textContent).toBe('Label Prop Slot');
47
+ });
48
+ it('should render label prop if both prop and slot provided', async () => {
49
+ const page = await newSpecPage({
50
+ components: [Textarea],
51
+ html: `
52
+ <ion-textarea label="Label Prop Text"><div slot="label">Label Prop Slot</div></ion-textarea>
53
+ `,
54
+ });
55
+ const textarea = page.body.querySelector('ion-textarea');
56
+ const labelText = textarea.querySelector('.label-text-wrapper');
57
+ expect(labelText.textContent).toBe('Label Prop Text');
58
+ });
59
+ });
@@ -0,0 +1,32 @@
1
+ /*!
2
+ * (C) Ionic http://ionicframework.com - MIT License
3
+ */
4
+ import { newSpecPage } from "@stencil/core/testing";
5
+ import { Toast } from "../toast";
6
+ it('toast should be assigned an incrementing id', async () => {
7
+ const page = await newSpecPage({
8
+ components: [Toast],
9
+ html: `<ion-toast is-open="true"></ion-toast>`,
10
+ });
11
+ let toast;
12
+ toast = page.body.querySelector('ion-toast');
13
+ expect(toast).not.toBe(null);
14
+ expect(toast.getAttribute('id')).toBe('ion-overlay-1');
15
+ // Remove the toast from the DOM
16
+ toast.remove();
17
+ await page.waitForChanges();
18
+ // Create a new toast to verify the id is incremented
19
+ toast = document.createElement('ion-toast');
20
+ toast.isOpen = true;
21
+ page.body.appendChild(toast);
22
+ await page.waitForChanges();
23
+ toast = page.body.querySelector('ion-toast');
24
+ expect(toast.getAttribute('id')).toBe('ion-overlay-2');
25
+ // Presenting the same toast again should reuse the existing id
26
+ toast.isOpen = false;
27
+ await page.waitForChanges();
28
+ toast.isOpen = true;
29
+ await page.waitForChanges();
30
+ toast = page.body.querySelector('ion-toast');
31
+ expect(toast.getAttribute('id')).toBe('ion-overlay-2');
32
+ });
@@ -0,0 +1,120 @@
1
+ /*!
2
+ * (C) Ionic http://ionicframework.com - MIT License
3
+ */
4
+ import { h } from "@stencil/core";
5
+ import { newSpecPage } from "@stencil/core/testing";
6
+ import { config } from "../../../global/config";
7
+ import { Toast } from "../toast";
8
+ describe('toast: custom html', () => {
9
+ it('should not allow for custom html by default', async () => {
10
+ const page = await newSpecPage({
11
+ components: [Toast],
12
+ html: `<ion-toast message="<button class='custom-html'>Custom Text</button>"></ion-toast>`,
13
+ });
14
+ const toast = page.body.querySelector('ion-toast');
15
+ const content = toast.shadowRoot.querySelector('.toast-message');
16
+ expect(content.textContent).toContain('Custom Text');
17
+ expect(content.querySelector('button.custom-html')).toBe(null);
18
+ });
19
+ it('should allow for custom html', async () => {
20
+ config.reset({ innerHTMLTemplatesEnabled: true });
21
+ const page = await newSpecPage({
22
+ components: [Toast],
23
+ html: `<ion-toast message="<button class='custom-html'>Custom Text</button>"></ion-toast>`,
24
+ });
25
+ const toast = page.body.querySelector('ion-toast');
26
+ const content = toast.shadowRoot.querySelector('.toast-message');
27
+ expect(content.textContent).toContain('Custom Text');
28
+ expect(content.querySelector('button.custom-html')).not.toBe(null);
29
+ });
30
+ it('should not allow for custom html', async () => {
31
+ config.reset({ innerHTMLTemplatesEnabled: false });
32
+ const page = await newSpecPage({
33
+ components: [Toast],
34
+ html: `<ion-toast message="<button class='custom-html'>Custom Text</button>"></ion-toast>`,
35
+ });
36
+ const toast = page.body.querySelector('ion-toast');
37
+ const content = toast.shadowRoot.querySelector('.toast-message');
38
+ expect(content.textContent).toContain('Custom Text');
39
+ expect(content.querySelector('button.custom-html')).toBe(null);
40
+ });
41
+ });
42
+ /**
43
+ * These tests check if the aria-hidden attributes are being
44
+ * removed on present. Without this functionality, screen readers
45
+ * would not announce toast content correctly.
46
+ */
47
+ describe('toast: a11y smoke test', () => {
48
+ it('should have aria-hidden content when dismissed', async () => {
49
+ const page = await newSpecPage({
50
+ components: [Toast],
51
+ html: `<ion-toast message="Message" header="Header"></ion-toast>`,
52
+ });
53
+ const toast = page.body.querySelector('ion-toast');
54
+ const header = toast.shadowRoot.querySelector('.toast-header');
55
+ const message = toast.shadowRoot.querySelector('.toast-message');
56
+ expect(header.getAttribute('aria-hidden')).toBe('true');
57
+ expect(message.getAttribute('aria-hidden')).toBe('true');
58
+ });
59
+ it('should not have aria-hidden content when presented', async () => {
60
+ const page = await newSpecPage({
61
+ components: [Toast],
62
+ html: `
63
+ <ion-app>
64
+ <ion-toast animated="false" message="Message" header="Header"></ion-toast>
65
+ </ion-app>
66
+ `,
67
+ });
68
+ const toast = page.body.querySelector('ion-toast');
69
+ /**
70
+ * Wait for present method to resolve
71
+ * and for state change to take effect.
72
+ */
73
+ await toast.present();
74
+ await page.waitForChanges();
75
+ const header = toast.shadowRoot.querySelector('.toast-header');
76
+ const message = toast.shadowRoot.querySelector('.toast-message');
77
+ expect(header.getAttribute('aria-hidden')).toBe(null);
78
+ expect(message.getAttribute('aria-hidden')).toBe(null);
79
+ });
80
+ });
81
+ describe('toast: duration config', () => {
82
+ it('should have duration set to 0', async () => {
83
+ const page = await newSpecPage({
84
+ components: [Toast],
85
+ html: `<ion-toast></ion-toast>`,
86
+ });
87
+ const toast = page.body.querySelector('ion-toast');
88
+ expect(toast.duration).toBe(0);
89
+ });
90
+ it('should have duration set to 5000', async () => {
91
+ config.reset({ toastDuration: 5000 });
92
+ const page = await newSpecPage({
93
+ components: [Toast],
94
+ html: `<ion-toast></ion-toast>`,
95
+ });
96
+ const toast = page.body.querySelector('ion-toast');
97
+ expect(toast.duration).toBe(5000);
98
+ });
99
+ });
100
+ describe('toast: htmlAttributes', () => {
101
+ it('should correctly inherit attributes on host', async () => {
102
+ const page = await newSpecPage({
103
+ components: [Toast],
104
+ template: () => h("ion-toast", { overlayIndex: 1, htmlAttributes: { 'data-testid': 'basic-toast' } }),
105
+ });
106
+ const toast = page.body.querySelector('ion-toast');
107
+ await expect(toast.getAttribute('data-testid')).toBe('basic-toast');
108
+ });
109
+ });
110
+ describe('toast: button cancel', () => {
111
+ it('should render the cancel button with part button-cancel', async () => {
112
+ const page = await newSpecPage({
113
+ components: [Toast],
114
+ template: () => h("ion-toast", { overlayIndex: 1, buttons: [{ text: 'Cancel', role: 'cancel' }] }),
115
+ });
116
+ const toast = page.body.querySelector('ion-toast');
117
+ const buttonCancel = toast.shadowRoot.querySelector('.toast-button-cancel');
118
+ expect(buttonCancel.getAttribute('part')).toBe('button cancel');
119
+ });
120
+ });
@@ -0,0 +1,55 @@
1
+ /*!
2
+ * (C) Ionic http://ionicframework.com - MIT License
3
+ */
4
+ import { newSpecPage } from "@stencil/core/testing";
5
+ import { config } from "../../../global/config";
6
+ import { Toggle } from "../toggle";
7
+ describe('toggle', () => {
8
+ beforeEach(() => {
9
+ config.reset({});
10
+ });
11
+ const newToggle = async () => {
12
+ const { rootInstance } = await newSpecPage({
13
+ components: [Toggle],
14
+ html: `<ion-toggle></ion-toggle>`,
15
+ });
16
+ return rootInstance;
17
+ };
18
+ describe('enableOnOffLabels', () => {
19
+ it('should disable on/off labels when setting to false on component', async () => {
20
+ const t = await newToggle();
21
+ t.enableOnOffLabels = false;
22
+ config.reset({
23
+ toggleOnOffLabels: true,
24
+ });
25
+ expect(t.enableOnOffLabels).toBe(false);
26
+ });
27
+ it('should enable on/off labels when setting to true on global config', async () => {
28
+ config.reset({
29
+ toggleOnOffLabels: true,
30
+ });
31
+ const t = await newToggle();
32
+ expect(t.enableOnOffLabels).toBe(true);
33
+ });
34
+ it('should enable on/off labels when setting to true on component', async () => {
35
+ const t = await newToggle();
36
+ t.enableOnOffLabels = true;
37
+ expect(t.enableOnOffLabels).toBe(true);
38
+ });
39
+ });
40
+ });
41
+ describe('ion-toggle: disabled', () => {
42
+ it('clicking disabled toggle should not toggle checked state', async () => {
43
+ const page = await newSpecPage({
44
+ components: [Toggle],
45
+ html: `
46
+ <ion-toggle disabled="true">Toggle</ion-toggle>
47
+ `,
48
+ });
49
+ const toggle = page.body.querySelector('ion-toggle');
50
+ expect(toggle.checked).toBe(false);
51
+ toggle.click();
52
+ await page.waitForChanges();
53
+ expect(toggle.checked).toBe(false);
54
+ });
55
+ });
@@ -0,0 +1,77 @@
1
+ /*!
2
+ * (C) Ionic http://ionicframework.com - MIT License
3
+ */
4
+ import { Config } from "../config";
5
+ describe('Config', () => {
6
+ it('should get a value from the config', () => {
7
+ const config = new Config();
8
+ config.reset({ mode: 'ios' });
9
+ expect(config.get('mode')).toEqual('ios');
10
+ expect(config.getBoolean('mode')).toBe(false);
11
+ });
12
+ it('should get a boolean value', () => {
13
+ const config = new Config();
14
+ config.reset({
15
+ bool0: false,
16
+ bool1: 'false',
17
+ bool2: true,
18
+ bool3: 'true',
19
+ bool4: 'hola',
20
+ bool5: 0,
21
+ bool6: 1,
22
+ });
23
+ expect(config.getBoolean('bool0')).toEqual(false);
24
+ expect(config.getBoolean('bool1')).toEqual(false);
25
+ expect(config.getBoolean('bool2')).toEqual(true);
26
+ expect(config.getBoolean('bool3')).toEqual(true);
27
+ expect(config.getBoolean('bool4')).toEqual(false);
28
+ expect(config.getBoolean('bool5')).toEqual(false);
29
+ expect(config.getBoolean('bool6')).toEqual(true);
30
+ });
31
+ it('should get a number value', () => {
32
+ const config = new Config();
33
+ config.reset({
34
+ nu0: 0,
35
+ nu1: -1,
36
+ nu2: '200',
37
+ nu3: '2.3',
38
+ nu4: -100.2,
39
+ });
40
+ expect(config.getNumber('nu0')).toEqual(0);
41
+ expect(config.getNumber('nu1')).toEqual(-1);
42
+ expect(config.getNumber('nu2')).toEqual(200);
43
+ expect(config.getNumber('nu3')).toEqual(2.3);
44
+ expect(config.getNumber('nu4')).toEqual(-100.2);
45
+ });
46
+ it('should not get fallback', () => {
47
+ const config = new Config();
48
+ config.reset({
49
+ text0: '',
50
+ text1: 'hola',
51
+ bool0: false,
52
+ bool1: 0,
53
+ nu0: '0',
54
+ nu1: 0,
55
+ nu2: 10,
56
+ });
57
+ expect(config.get('text0', 'HEY')).toEqual('');
58
+ expect(config.get('text1', 'HEY')).toEqual('hola');
59
+ expect(config.getBoolean('bool0', true)).toEqual(false);
60
+ expect(config.getBoolean('bool1', true)).toEqual(false);
61
+ expect(config.getNumber('nu0', 100)).toEqual(0);
62
+ expect(config.getNumber('nu1', 100)).toEqual(0);
63
+ expect(config.getNumber('nu2', 100)).toEqual(10);
64
+ });
65
+ it('should get fallback', () => {
66
+ const config = new Config();
67
+ expect(config.get('text0', 'HEY')).toEqual('HEY');
68
+ expect(config.getBoolean('bool0', true)).toEqual(true);
69
+ expect(config.getNumber('nu0', 100)).toEqual(100);
70
+ });
71
+ it('should set value', () => {
72
+ const config = new Config();
73
+ expect(config.get('text0', 'HEY')).toEqual('HEY');
74
+ config.set('text0', 'hola');
75
+ expect(config.get('text0', 'HEY')).toEqual('hola');
76
+ });
77
+ });