@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,32 @@
1
+ /*!
2
+ * (C) Ionic http://ionicframework.com - MIT License
3
+ */
4
+ import { newSpecPage } from "@stencil/core/testing";
5
+ import { Picker } from "../picker";
6
+ it('picker should be assigned an incrementing id', async () => {
7
+ const page = await newSpecPage({
8
+ components: [Picker],
9
+ html: `<ion-picker is-open="true"></ion-picker>`,
10
+ });
11
+ let picker;
12
+ picker = page.body.querySelector('ion-picker');
13
+ expect(picker).not.toBe(null);
14
+ expect(picker.getAttribute('id')).toBe('ion-overlay-1');
15
+ // Remove the picker from the DOM
16
+ picker.remove();
17
+ await page.waitForChanges();
18
+ // Create a new picker to verify the id is incremented
19
+ picker = document.createElement('ion-picker');
20
+ picker.isOpen = true;
21
+ page.body.appendChild(picker);
22
+ await page.waitForChanges();
23
+ picker = page.body.querySelector('ion-picker');
24
+ expect(picker.getAttribute('id')).toBe('ion-overlay-2');
25
+ // Presenting the same picker again should reuse the existing id
26
+ picker.isOpen = false;
27
+ await page.waitForChanges();
28
+ picker.isOpen = true;
29
+ await page.waitForChanges();
30
+ picker = page.body.querySelector('ion-picker');
31
+ expect(picker.getAttribute('id')).toBe('ion-overlay-2');
32
+ });
@@ -0,0 +1,35 @@
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 { PickerColumnCmp } from "../picker-column";
7
+ /**
8
+ * Stencil has an issue where having multiple spec tests in the same file,
9
+ * will cause an exception to be thrown. This test is located in a separate file
10
+ * to avoid this issue: https://github.com/ionic-team/stencil/issues/4053
11
+ */
12
+ describe('picker-column', () => {
13
+ it('should add aria-label to the picker column option', async () => {
14
+ const col = {
15
+ options: [
16
+ {
17
+ text: 'C#',
18
+ ariaLabel: 'C Sharp',
19
+ },
20
+ {
21
+ text: 'Java',
22
+ },
23
+ ],
24
+ name: 'programmingLanguages',
25
+ };
26
+ const page = await newSpecPage({
27
+ components: [PickerColumnCmp],
28
+ template: () => h("ion-picker-column", { col: col }),
29
+ });
30
+ const firstOption = page.body.querySelector('ion-picker-column .picker-opt:nth-child(1)');
31
+ const secondOption = page.body.querySelector('ion-picker-column .picker-opt:nth-child(2)');
32
+ expect(firstOption.getAttribute('aria-label')).toBe('C Sharp');
33
+ expect(secondOption.getAttribute('aria-label')).toBe(null);
34
+ });
35
+ });
@@ -0,0 +1,29 @@
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 { PickerColumnCmp } from "../picker-column";
7
+ describe('picker-column: dynamic options', () => {
8
+ /**
9
+ * Issue: https://github.com/ionic-team/ionic-framework/issues/21763
10
+ */
11
+ it('should add an option', async () => {
12
+ const defaultOptions = [
13
+ { text: 'Dog', value: 'dog' },
14
+ { text: 'Cat', value: 'cat' },
15
+ ];
16
+ const page = await newSpecPage({
17
+ components: [PickerColumnCmp],
18
+ template: () => h("ion-picker-column", { col: { options: defaultOptions, name: 'animals' } }),
19
+ });
20
+ const pickerCol = page.body.querySelector('ion-picker-column');
21
+ pickerCol.col = {
22
+ options: [...defaultOptions, { text: 'Carrot', value: 'carrot' }],
23
+ name: 'vegetables',
24
+ };
25
+ await page.waitForChanges();
26
+ const pickerOpt = pickerCol.querySelector('.picker-opt:nth(2)');
27
+ expect(pickerOpt.getAttribute('style')).toContain('transform');
28
+ });
29
+ });
@@ -0,0 +1,17 @@
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 { PickerColumnCmp } from "../picker-column";
7
+ describe('picker-column', () => {
8
+ it('should add class to host of component', async () => {
9
+ const col = { cssClass: 'test-class', options: [], name: 'col' };
10
+ const page = await newSpecPage({
11
+ components: [PickerColumnCmp],
12
+ template: () => h("ion-picker-column", { col: col }),
13
+ });
14
+ const pickerCol = page.body.querySelector('ion-picker-column');
15
+ expect(pickerCol.classList.contains('test-class')).toBe(true);
16
+ });
17
+ });
@@ -0,0 +1,16 @@
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 { Popover } from "../../popover";
7
+ describe('popover: htmlAttributes inheritance', () => {
8
+ it('should correctly inherit attributes on host', async () => {
9
+ const page = await newSpecPage({
10
+ components: [Popover],
11
+ template: () => h("ion-popover", { overlayIndex: 1, htmlAttributes: { 'data-testid': 'basic-popover' } }),
12
+ });
13
+ const popover = page.body.querySelector('ion-popover');
14
+ await expect(popover.getAttribute('data-testid')).toBe('basic-popover');
15
+ });
16
+ });
@@ -0,0 +1,32 @@
1
+ /*!
2
+ * (C) Ionic http://ionicframework.com - MIT License
3
+ */
4
+ import { newSpecPage } from "@stencil/core/testing";
5
+ import { Popover } from "../popover";
6
+ it('popover should be assigned an incrementing id', async () => {
7
+ const page = await newSpecPage({
8
+ components: [Popover],
9
+ html: `<ion-popover is-open="true"></ion-popover>`,
10
+ });
11
+ let popover;
12
+ popover = page.body.querySelector('ion-popover');
13
+ expect(popover).not.toBe(null);
14
+ expect(popover.getAttribute('id')).toBe('ion-overlay-1');
15
+ // Remove the popover from the DOM
16
+ popover.remove();
17
+ await page.waitForChanges();
18
+ // Create a new popover to verify the id is incremented
19
+ popover = document.createElement('ion-popover');
20
+ popover.isOpen = true;
21
+ page.body.appendChild(popover);
22
+ await page.waitForChanges();
23
+ popover = page.body.querySelector('ion-popover');
24
+ expect(popover.getAttribute('id')).toBe('ion-overlay-2');
25
+ // Presenting the same popover again should reuse the existing id
26
+ popover.isOpen = false;
27
+ await page.waitForChanges();
28
+ popover.isOpen = true;
29
+ await page.waitForChanges();
30
+ popover = page.body.querySelector('ion-popover');
31
+ expect(popover.getAttribute('id')).toBe('ion-overlay-2');
32
+ });
@@ -0,0 +1,53 @@
1
+ /*!
2
+ * (C) Ionic http://ionicframework.com - MIT License
3
+ */
4
+ import { isTriggerElement, getIndexOfItem, getNextItem, getPrevItem } from "../utils";
5
+ describe('isTriggerElement', () => {
6
+ it('should return true is element is a trigger', () => {
7
+ const el = document.createElement('div');
8
+ el.setAttribute('data-ion-popover-trigger', 'true');
9
+ expect(isTriggerElement(el)).toEqual(true);
10
+ });
11
+ it('should return false is element is not a trigger', () => {
12
+ const el = document.createElement('div');
13
+ expect(isTriggerElement(el)).toEqual(false);
14
+ });
15
+ });
16
+ describe('getIndexOfItem', () => {
17
+ it('should return the correct index in an array of ion-items', () => {
18
+ const array = createArrayOfElements(['ion-item', 'ion-item', 'ion-item']);
19
+ expect(getIndexOfItem(array, array[1])).toEqual(1);
20
+ });
21
+ it('should return -1 when ion-item not found', () => {
22
+ const el = document.createElement('ion-item');
23
+ const array = createArrayOfElements(['ion-item', 'ion-item']);
24
+ expect(getIndexOfItem(array, el)).toEqual(-1);
25
+ });
26
+ it('should return -1 if a non-ion-item is passed in', () => {
27
+ const array = createArrayOfElements(['ion-item', 'div', 'ion-item']);
28
+ expect(getIndexOfItem(array, array[1])).toEqual(-1);
29
+ });
30
+ });
31
+ describe('getNextItem', () => {
32
+ it('should get the next item in an array of ion-items', () => {
33
+ const array = createArrayOfElements(['ion-item', 'ion-item', 'ion-item']);
34
+ expect(getNextItem(array, array[1])).toEqual(array[2]);
35
+ });
36
+ it('should return undefined if there is no next item', () => {
37
+ const array = createArrayOfElements(['ion-item', 'ion-item', 'ion-item']);
38
+ expect(getNextItem(array, array[2])).toEqual(undefined);
39
+ });
40
+ });
41
+ describe('getPrevItem', () => {
42
+ it('should get the previous item in an array of ion-items', () => {
43
+ const array = createArrayOfElements(['ion-item', 'ion-item', 'ion-item']);
44
+ expect(getPrevItem(array, array[1])).toEqual(array[0]);
45
+ });
46
+ it('should return undefined if there is no previous item', () => {
47
+ const array = createArrayOfElements(['ion-item', 'ion-item', 'ion-item']);
48
+ expect(getPrevItem(array, array[0])).toEqual(undefined);
49
+ });
50
+ });
51
+ const createArrayOfElements = (tags) => {
52
+ return tags.map((tag) => document.createElement(tag));
53
+ };
@@ -0,0 +1,46 @@
1
+ /*!
2
+ * (C) Ionic http://ionicframework.com - MIT License
3
+ */
4
+ import { newSpecPage } from "@stencil/core/testing";
5
+ import { RadioGroup } from "../../radio-group/radio-group";
6
+ import { Radio } from "../radio";
7
+ describe('ion-radio', () => {
8
+ it('should set a default value', async () => {
9
+ const radio = new Radio();
10
+ await radio.connectedCallback();
11
+ expect(radio.value).toEqual('ion-rb-0');
12
+ });
13
+ it('should update the checked state when updating the value', async () => {
14
+ const page = await newSpecPage({
15
+ components: [Radio, RadioGroup],
16
+ html: `
17
+ <ion-radio-group value="a">
18
+ <ion-radio value="other-value"></ion-radio>
19
+ </ion-radio-group>
20
+ `,
21
+ });
22
+ const radio = page.body.querySelector('ion-radio');
23
+ expect(radio.classList.contains('radio-checked')).toBe(false);
24
+ radio.value = 'a';
25
+ await page.waitForChanges();
26
+ expect(radio.classList.contains('radio-checked')).toBe(true);
27
+ });
28
+ });
29
+ describe('ion-radio: disabled', () => {
30
+ it('clicking disabled radio should not set checked state', async () => {
31
+ const page = await newSpecPage({
32
+ components: [Radio, RadioGroup],
33
+ html: `
34
+ <ion-radio-group>
35
+ <ion-radio disabled="true" value="a">Radio</ion-radio>
36
+ </ion-radio-group>
37
+ `,
38
+ });
39
+ const radio = page.body.querySelector('ion-radio');
40
+ const radioGroup = page.body.querySelector('ion-radio-group');
41
+ expect(radioGroup.value).toBe(undefined);
42
+ radio.click();
43
+ await page.waitForChanges();
44
+ expect(radioGroup.value).toBe(undefined);
45
+ });
46
+ });
@@ -0,0 +1,23 @@
1
+ /*!
2
+ * (C) Ionic http://ionicframework.com - MIT License
3
+ */
4
+ import { newSpecPage } from "@stencil/core/testing";
5
+ import { Range } from "../../range";
6
+ describe('range: label', () => {
7
+ it('should prioritize the label prop over the slot', async () => {
8
+ var _a, _b;
9
+ const page = await newSpecPage({
10
+ components: [Range],
11
+ html: `
12
+ <ion-range label="Label prop">
13
+ <div slot="label">Label slot</div>
14
+ </ion-range>
15
+ `,
16
+ });
17
+ const range = page.body.querySelector('ion-range');
18
+ const propEl = (_a = range === null || range === void 0 ? void 0 : range.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.label-text');
19
+ const slotEl = (_b = range === null || range === void 0 ? void 0 : range.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('slot[name="label"]');
20
+ expect(propEl).not.toBeNull();
21
+ expect(slotEl).toBeNull();
22
+ });
23
+ });
@@ -0,0 +1,205 @@
1
+ /*!
2
+ * (C) Ionic http://ionicframework.com - MIT License
3
+ */
4
+ import { newSpecPage } from "@stencil/core/testing";
5
+ import { Item } from "../../item/item";
6
+ import { Range } from "../range";
7
+ let sharedRange;
8
+ describe('Range', () => {
9
+ beforeEach(() => {
10
+ sharedRange = new Range();
11
+ });
12
+ describe('ensureValueInBounds()', () => {
13
+ it('should return the clamped value for a range single knob component', () => {
14
+ sharedRange.min = 0;
15
+ sharedRange.max = 100;
16
+ const valueTests = [
17
+ [50, 50],
18
+ [-100, 0],
19
+ [1000, 100],
20
+ [0, 0],
21
+ [100, 100],
22
+ ];
23
+ valueTests.forEach((test) => {
24
+ // Casting as any since we are accessing a private API on the range component
25
+ expect(sharedRange.ensureValueInBounds(test[0])).toBe(test[1]);
26
+ });
27
+ });
28
+ it('should return the clamped value for a range dual knob component', () => {
29
+ sharedRange.min = 0;
30
+ sharedRange.max = 100;
31
+ sharedRange.dualKnobs = true;
32
+ const valueTests = [
33
+ [
34
+ { lower: 0, upper: 0 },
35
+ { lower: 0, upper: 0 },
36
+ ],
37
+ [
38
+ { lower: -100, upper: 0 },
39
+ { lower: 0, upper: 0 },
40
+ ],
41
+ [
42
+ { lower: 0, upper: 10000 },
43
+ { lower: 0, upper: 100 },
44
+ ],
45
+ [
46
+ { lower: -100, upper: 200 },
47
+ { lower: 0, upper: 100 },
48
+ ],
49
+ [
50
+ { lower: 0, upper: 100 },
51
+ { lower: 0, upper: 100 },
52
+ ],
53
+ [
54
+ { lower: 200, upper: -100 },
55
+ { lower: 100, upper: 0 },
56
+ ],
57
+ ];
58
+ valueTests.forEach((test) => {
59
+ // Casting as any since we are accessing a private API on the range component
60
+ expect(sharedRange.ensureValueInBounds(test[0])).toEqual(test[1]);
61
+ });
62
+ });
63
+ });
64
+ });
65
+ describe('range id', () => {
66
+ it('should render custom id if passed', async () => {
67
+ const page = await newSpecPage({
68
+ components: [Range],
69
+ html: `<ion-range id="my-custom-range">
70
+ <div slot="label">Range</div>
71
+ </ion-range>`,
72
+ });
73
+ const range = page.body.querySelector('ion-range');
74
+ expect(range.getAttribute('id')).toBe('my-custom-range');
75
+ });
76
+ });
77
+ describe('range: item adjustments', () => {
78
+ it('should add start and end adjustment with no content', async () => {
79
+ const page = await newSpecPage({
80
+ components: [Item, Range],
81
+ html: `
82
+ <ion-item>
83
+ <ion-range aria-label="Range"></ion-range>
84
+ </ion-item>
85
+ `,
86
+ });
87
+ const range = page.body.querySelector('ion-range');
88
+ expect(range.classList.contains('range-item-start-adjustment')).toBe(true);
89
+ expect(range.classList.contains('range-item-end-adjustment')).toBe(true);
90
+ });
91
+ it('should add start adjustment with end label and no adornments', async () => {
92
+ const page = await newSpecPage({
93
+ components: [Item, Range],
94
+ html: `
95
+ <ion-item>
96
+ <ion-range label="Range" label-placement="end"></ion-range>
97
+ </ion-item>
98
+ `,
99
+ });
100
+ const range = page.body.querySelector('ion-range');
101
+ expect(range.classList.contains('range-item-start-adjustment')).toBe(true);
102
+ expect(range.classList.contains('range-item-end-adjustment')).toBe(false);
103
+ });
104
+ it('should add end adjustment with start label and no adornments', async () => {
105
+ const page = await newSpecPage({
106
+ components: [Item, Range],
107
+ html: `
108
+ <ion-item>
109
+ <ion-range label="Range" label-placement="start"></ion-range>
110
+ </ion-item>
111
+ `,
112
+ });
113
+ const range = page.body.querySelector('ion-range');
114
+ expect(range.classList.contains('range-item-start-adjustment')).toBe(false);
115
+ expect(range.classList.contains('range-item-end-adjustment')).toBe(true);
116
+ });
117
+ it('should add end adjustment with fixed label and no adornments', async () => {
118
+ const page = await newSpecPage({
119
+ components: [Item, Range],
120
+ html: `
121
+ <ion-item>
122
+ <ion-range label="Range" label-placement="fixed"></ion-range>
123
+ </ion-item>
124
+ `,
125
+ });
126
+ const range = page.body.querySelector('ion-range');
127
+ expect(range.classList.contains('range-item-start-adjustment')).toBe(false);
128
+ expect(range.classList.contains('range-item-end-adjustment')).toBe(true);
129
+ });
130
+ it('should add start adjustment with floating label', async () => {
131
+ const page = await newSpecPage({
132
+ components: [Item, Range],
133
+ html: `
134
+ <ion-item>
135
+ <ion-range label="Range" label-placement="floating"></ion-range>
136
+ </ion-item>
137
+ `,
138
+ });
139
+ const range = page.body.querySelector('ion-range');
140
+ expect(range.classList.contains('range-item-start-adjustment')).toBe(true);
141
+ expect(range.classList.contains('range-item-end-adjustment')).toBe(true);
142
+ });
143
+ it('should add start adjustment with stacked label', async () => {
144
+ const page = await newSpecPage({
145
+ components: [Item, Range],
146
+ html: `
147
+ <ion-item>
148
+ <ion-range label="Range" label-placement="stacked"></ion-range>
149
+ </ion-item>
150
+ `,
151
+ });
152
+ const range = page.body.querySelector('ion-range');
153
+ expect(range.classList.contains('range-item-start-adjustment')).toBe(true);
154
+ expect(range.classList.contains('range-item-end-adjustment')).toBe(true);
155
+ });
156
+ it('should not add adjustment when not in an item', async () => {
157
+ const page = await newSpecPage({
158
+ components: [Item, Range],
159
+ html: `
160
+ <ion-range label="Range" label-placement="stacked"></ion-range>
161
+ `,
162
+ });
163
+ const range = page.body.querySelector('ion-range');
164
+ expect(range.classList.contains('range-item-start-adjustment')).toBe(false);
165
+ expect(range.classList.contains('range-item-end-adjustment')).toBe(false);
166
+ });
167
+ // TODO FW-2997 remove this
168
+ it('should not add adjustment with legacy syntax', async () => {
169
+ const page = await newSpecPage({
170
+ components: [Item, Range],
171
+ html: `
172
+ <ion-range legacy="true"></ion-range>
173
+ `,
174
+ });
175
+ const range = page.body.querySelector('ion-range');
176
+ expect(range.classList.contains('range-item-start-adjustment')).toBe(false);
177
+ expect(range.classList.contains('range-item-end-adjustment')).toBe(false);
178
+ });
179
+ it('should not add start adjustment when with start adornment', async () => {
180
+ const page = await newSpecPage({
181
+ components: [Item, Range],
182
+ html: `
183
+ <ion-range label="Range" label-placement="end">
184
+ <div slot="start">Start Content</div>
185
+ </ion-range>
186
+ `,
187
+ });
188
+ const range = page.body.querySelector('ion-range');
189
+ expect(range.classList.contains('range-item-start-adjustment')).toBe(false);
190
+ expect(range.classList.contains('range-item-end-adjustment')).toBe(false);
191
+ });
192
+ it('should not add end adjustment when with end adornment', async () => {
193
+ const page = await newSpecPage({
194
+ components: [Item, Range],
195
+ html: `
196
+ <ion-range label="Range" label-placement="start">
197
+ <div slot="end">Start Content</div>
198
+ </ion-range>
199
+ `,
200
+ });
201
+ const range = page.body.querySelector('ion-range');
202
+ expect(range.classList.contains('range-item-start-adjustment')).toBe(false);
203
+ expect(range.classList.contains('range-item-end-adjustment')).toBe(false);
204
+ });
205
+ });
@@ -0,0 +1,46 @@
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 { RefresherContent } from "../refresher-content";
7
+ describe('refresher-content: custom html', () => {
8
+ it('should not allow for custom html by default', async () => {
9
+ const page = await newSpecPage({
10
+ components: [RefresherContent],
11
+ html: `<ion-refresher-content pulling-text="<button class='custom-pulling-html'>Custom Pulling Text</button>" refreshing-text="<button class='custom-refreshing-html'>Custom Refreshing Text</button>"></ion-refresher-content>`,
12
+ });
13
+ const pullingContent = page.body.querySelector('.refresher-pulling-text');
14
+ expect(pullingContent.textContent).toContain('Custom Pulling Text');
15
+ expect(pullingContent.querySelector('button.custom-pulling-html')).toBe(null);
16
+ const refreshingContent = page.body.querySelector('.refresher-refreshing-text');
17
+ expect(refreshingContent.textContent).toContain('Custom Refreshing Text');
18
+ expect(refreshingContent.querySelector('button.custom-refreshing-html')).toBe(null);
19
+ });
20
+ it('should allow for custom html', async () => {
21
+ config.reset({ innerHTMLTemplatesEnabled: true });
22
+ const page = await newSpecPage({
23
+ components: [RefresherContent],
24
+ html: `<ion-refresher-content pulling-text="<button class='custom-pulling-html'>Custom Pulling Text</button>" refreshing-text="<button class='custom-refreshing-html'>Custom Refreshing Text</button>"></ion-refresher-content>`,
25
+ });
26
+ const pullingContent = page.body.querySelector('.refresher-pulling-text');
27
+ expect(pullingContent.textContent).toContain('Custom Pulling Text');
28
+ expect(pullingContent.querySelector('button.custom-pulling-html')).not.toBe(null);
29
+ const refreshingContent = page.body.querySelector('.refresher-refreshing-text');
30
+ expect(refreshingContent.textContent).toContain('Custom Refreshing Text');
31
+ expect(refreshingContent.querySelector('button.custom-refreshing-html')).not.toBe(null);
32
+ });
33
+ it('should not allow for custom html', async () => {
34
+ config.reset({ innerHTMLTemplatesEnabled: false });
35
+ const page = await newSpecPage({
36
+ components: [RefresherContent],
37
+ html: `<ion-refresher-content pulling-text="<button class='custom-pulling-html'>Custom Pulling Text</button>" refreshing-text="<button class='custom-html'>Custom Refreshing Text</button>"></ion-refresher-content>`,
38
+ });
39
+ const pullingContent = page.body.querySelector('.refresher-pulling-text');
40
+ expect(pullingContent.textContent).toContain('Custom Pulling Text');
41
+ expect(pullingContent.querySelector('button.custom-pulling-html')).toBe(null);
42
+ const refreshingContent = page.body.querySelector('.refresher-refreshing-text');
43
+ expect(refreshingContent.textContent).toContain('Custom Refreshing Text');
44
+ expect(refreshingContent.querySelector('button.custom-refreshing-html')).toBe(null);
45
+ });
46
+ });