mirror of https://github.com/sveltejs/svelte
[feat] support `--style-props` for `<svelte:component>` (#7468)
* add test * support --style-props for <svelte:component> * refactor * add more test * support switching instance * add test with svelte:self * merge duplicated if statement * slight refactor * remove unnecessary anchor * reorder insertion Co-authored-by: tanhauhau <lhtan93@gmail.com>pull/7838/head
parent
75a7c3e68f
commit
e2538c594b
@ -0,0 +1,17 @@
|
|||||||
|
<script>
|
||||||
|
export let id;
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div {id}>
|
||||||
|
<p>Slider</p>
|
||||||
|
<span>Track</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
p {
|
||||||
|
color: var(--rail-color);
|
||||||
|
}
|
||||||
|
span {
|
||||||
|
color: var(--track-color);
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,41 @@
|
|||||||
|
export default {
|
||||||
|
props: {
|
||||||
|
railColor1: 'black',
|
||||||
|
trackColor1: 'red',
|
||||||
|
railColor2: 'green',
|
||||||
|
trackColor2: 'blue'
|
||||||
|
},
|
||||||
|
html: `
|
||||||
|
<div style="display: contents; --rail-color:black; --track-color:red;">
|
||||||
|
<div id="slider-1">
|
||||||
|
<p class="svelte-17ay6rc">Slider</p>
|
||||||
|
<span class="svelte-17ay6rc">Track</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div style="display: contents; --rail-color:green; --track-color:blue;">
|
||||||
|
<div id="slider-2">
|
||||||
|
<p class="svelte-17ay6rc">Slider</p>
|
||||||
|
<span class="svelte-17ay6rc">Track</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`,
|
||||||
|
test({ component, assert, target }) {
|
||||||
|
component.railColor1 = 'yellow';
|
||||||
|
component.trackColor2 = 'orange';
|
||||||
|
|
||||||
|
assert.htmlEqual(target.innerHTML, `
|
||||||
|
<div style="display: contents; --rail-color:yellow; --track-color:red;">
|
||||||
|
<div id="slider-1">
|
||||||
|
<p class="svelte-17ay6rc">Slider</p>
|
||||||
|
<span class="svelte-17ay6rc">Track</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div style="display: contents; --rail-color:green; --track-color:orange;">
|
||||||
|
<div id="slider-2">
|
||||||
|
<p class="svelte-17ay6rc">Slider</p>
|
||||||
|
<span class="svelte-17ay6rc">Track</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`);
|
||||||
|
}
|
||||||
|
};
|
@ -0,0 +1,25 @@
|
|||||||
|
<script>
|
||||||
|
import Slider from './Slider.svelte';
|
||||||
|
export let railColor1;
|
||||||
|
export let railColor2;
|
||||||
|
export let trackColor1;
|
||||||
|
export let trackColor2;
|
||||||
|
|
||||||
|
function identity(color) {
|
||||||
|
return color;
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<svelte:component
|
||||||
|
this={Slider}
|
||||||
|
id="slider-1"
|
||||||
|
--rail-color={railColor1}
|
||||||
|
--track-color={trackColor1}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<svelte:component
|
||||||
|
this={Slider}
|
||||||
|
id="slider-2"
|
||||||
|
--rail-color={railColor2}
|
||||||
|
--track-color={identity(trackColor2)}
|
||||||
|
/>
|
@ -0,0 +1,17 @@
|
|||||||
|
<script>
|
||||||
|
export let id;
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div {id}>
|
||||||
|
<p>Slider1</p>
|
||||||
|
<span>Track</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
p {
|
||||||
|
color: var(--rail-color);
|
||||||
|
}
|
||||||
|
span {
|
||||||
|
color: var(--track-color);
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,17 @@
|
|||||||
|
<script>
|
||||||
|
export let id;
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div {id}>
|
||||||
|
<p>Slider2</p>
|
||||||
|
<span>Track</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
p {
|
||||||
|
color: var(--rail-color);
|
||||||
|
}
|
||||||
|
span {
|
||||||
|
color: var(--track-color);
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,57 @@
|
|||||||
|
export default {
|
||||||
|
props: {
|
||||||
|
componentName: 'Slider1'
|
||||||
|
},
|
||||||
|
html: `
|
||||||
|
<div style="display: contents; --rail-color:rgb(0, 0, 0); --track-color:rgb(255, 0, 0);">
|
||||||
|
<div id="component1">
|
||||||
|
<p class="svelte-17ay6rc">Slider1</p>
|
||||||
|
<span class="svelte-17ay6rc">Track</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div style="display: contents; --rail-color:rgb(0, 255, 0); --track-color:rgb(0, 0, 255);">
|
||||||
|
<div id="component2">
|
||||||
|
<p class="svelte-17ay6rc">Slider1</p>
|
||||||
|
<span class="svelte-17ay6rc">Track</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`,
|
||||||
|
test({ target, window, assert, component }) {
|
||||||
|
|
||||||
|
function assert_slider_1() {
|
||||||
|
const railColor1 = target.querySelector('#component1 p');
|
||||||
|
const trackColor1 = target.querySelector('#component1 span');
|
||||||
|
const railColor2 = target.querySelector('#component2 p');
|
||||||
|
const trackColor2 = target.querySelector('#component2 span');
|
||||||
|
|
||||||
|
assert.equal(window.getComputedStyle(railColor1).color, 'rgb(0, 0, 0)');
|
||||||
|
assert.equal(window.getComputedStyle(trackColor1).color, 'rgb(255, 0, 0)');
|
||||||
|
assert.equal(window.getComputedStyle(railColor2).color, 'rgb(0, 255, 0)');
|
||||||
|
assert.equal(window.getComputedStyle(trackColor2).color, 'rgb(0, 0, 255)');
|
||||||
|
assert.equal(railColor1.textContent, 'Slider1');
|
||||||
|
assert.equal(railColor2.textContent, 'Slider1');
|
||||||
|
}
|
||||||
|
|
||||||
|
function assert_slider_2() {
|
||||||
|
const railColor1 = target.querySelector('#component1 p');
|
||||||
|
const trackColor1 = target.querySelector('#component1 span');
|
||||||
|
const railColor2 = target.querySelector('#component2 p');
|
||||||
|
const trackColor2 = target.querySelector('#component2 span');
|
||||||
|
|
||||||
|
assert.equal(window.getComputedStyle(railColor1).color, 'rgb(0, 0, 0)');
|
||||||
|
assert.equal(window.getComputedStyle(trackColor1).color, 'rgb(255, 0, 0)');
|
||||||
|
assert.equal(window.getComputedStyle(railColor2).color, 'rgb(0, 255, 0)');
|
||||||
|
assert.equal(window.getComputedStyle(trackColor2).color, 'rgb(0, 0, 255)');
|
||||||
|
assert.equal(railColor1.textContent, 'Slider2');
|
||||||
|
assert.equal(railColor2.textContent, 'Slider2');
|
||||||
|
}
|
||||||
|
|
||||||
|
assert_slider_1();
|
||||||
|
component.componentName = 'Slider2';
|
||||||
|
assert_slider_2();
|
||||||
|
component.componentName = undefined;
|
||||||
|
assert.equal(window.document.querySelector('div'), null);
|
||||||
|
component.componentName = 'Slider1';
|
||||||
|
assert_slider_1();
|
||||||
|
}
|
||||||
|
};
|
@ -0,0 +1,20 @@
|
|||||||
|
<script>
|
||||||
|
import Slider1 from './Slider1.svelte';
|
||||||
|
import Slider2 from './Slider2.svelte';
|
||||||
|
export let componentName = 'Slider1';
|
||||||
|
$: slider = componentName === 'Slider1' ? Slider1 : componentName === 'Slider2' ? Slider2 : undefined;
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<svelte:component
|
||||||
|
this={slider}
|
||||||
|
id="component1"
|
||||||
|
--rail-color="rgb(0, 0, 0)"
|
||||||
|
--track-color="rgb(255, 0, 0)"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<svelte:component
|
||||||
|
this={slider}
|
||||||
|
id="component2"
|
||||||
|
--rail-color="rgb(0, 255, 0)"
|
||||||
|
--track-color="rgb(0, 0, 255)"
|
||||||
|
/>
|
@ -0,0 +1,17 @@
|
|||||||
|
<script>
|
||||||
|
export let id;
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div {id}>
|
||||||
|
<p>Slider1</p>
|
||||||
|
<span>Track</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
p {
|
||||||
|
color: var(--rail-color);
|
||||||
|
}
|
||||||
|
span {
|
||||||
|
color: var(--track-color);
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,17 @@
|
|||||||
|
<script>
|
||||||
|
export let id;
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div {id}>
|
||||||
|
<p>Slider2</p>
|
||||||
|
<span>Track</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
p {
|
||||||
|
color: var(--rail-color);
|
||||||
|
}
|
||||||
|
span {
|
||||||
|
color: var(--track-color);
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,59 @@
|
|||||||
|
export default {
|
||||||
|
props: {
|
||||||
|
componentName: 'Slider1'
|
||||||
|
},
|
||||||
|
html: `
|
||||||
|
<section>
|
||||||
|
<div style="display: contents; --rail-color:rgb(0, 0, 0); --track-color:rgb(255, 0, 0);">
|
||||||
|
<div id="component1">
|
||||||
|
<p class="svelte-17ay6rc">Slider1</p>
|
||||||
|
<span class="svelte-17ay6rc">Track</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div style="display: contents; --rail-color:rgb(0, 255, 0); --track-color:rgb(0, 0, 255);">
|
||||||
|
<div id="component2">
|
||||||
|
<p class="svelte-17ay6rc">Slider1</p>
|
||||||
|
<span class="svelte-17ay6rc">Track</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
`,
|
||||||
|
test({ target, window, assert, component }) {
|
||||||
|
|
||||||
|
function assert_slider_1() {
|
||||||
|
const railColor1 = target.querySelector('#component1 p');
|
||||||
|
const trackColor1 = target.querySelector('#component1 span');
|
||||||
|
const railColor2 = target.querySelector('#component2 p');
|
||||||
|
const trackColor2 = target.querySelector('#component2 span');
|
||||||
|
|
||||||
|
assert.equal(window.getComputedStyle(railColor1).color, 'rgb(0, 0, 0)');
|
||||||
|
assert.equal(window.getComputedStyle(trackColor1).color, 'rgb(255, 0, 0)');
|
||||||
|
assert.equal(window.getComputedStyle(railColor2).color, 'rgb(0, 255, 0)');
|
||||||
|
assert.equal(window.getComputedStyle(trackColor2).color, 'rgb(0, 0, 255)');
|
||||||
|
assert.equal(railColor1.textContent, 'Slider1');
|
||||||
|
assert.equal(railColor2.textContent, 'Slider1');
|
||||||
|
}
|
||||||
|
|
||||||
|
function assert_slider_2() {
|
||||||
|
const railColor1 = target.querySelector('#component1 p');
|
||||||
|
const trackColor1 = target.querySelector('#component1 span');
|
||||||
|
const railColor2 = target.querySelector('#component2 p');
|
||||||
|
const trackColor2 = target.querySelector('#component2 span');
|
||||||
|
|
||||||
|
assert.equal(window.getComputedStyle(railColor1).color, 'rgb(0, 0, 0)');
|
||||||
|
assert.equal(window.getComputedStyle(trackColor1).color, 'rgb(255, 0, 0)');
|
||||||
|
assert.equal(window.getComputedStyle(railColor2).color, 'rgb(0, 255, 0)');
|
||||||
|
assert.equal(window.getComputedStyle(trackColor2).color, 'rgb(0, 0, 255)');
|
||||||
|
assert.equal(railColor1.textContent, 'Slider2');
|
||||||
|
assert.equal(railColor2.textContent, 'Slider2');
|
||||||
|
}
|
||||||
|
|
||||||
|
assert_slider_1();
|
||||||
|
component.componentName = 'Slider2';
|
||||||
|
assert_slider_2();
|
||||||
|
component.componentName = undefined;
|
||||||
|
assert.equal(window.document.querySelector('div'), null);
|
||||||
|
component.componentName = 'Slider1';
|
||||||
|
assert_slider_1();
|
||||||
|
}
|
||||||
|
};
|
@ -0,0 +1,22 @@
|
|||||||
|
<script>
|
||||||
|
import Slider1 from './Slider1.svelte';
|
||||||
|
import Slider2 from './Slider2.svelte';
|
||||||
|
export let componentName = 'Slider1';
|
||||||
|
$: slider = componentName === 'Slider1' ? Slider1 : componentName === 'Slider2' ? Slider2 : undefined;
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<svelte:component
|
||||||
|
this={slider}
|
||||||
|
id="component1"
|
||||||
|
--rail-color="rgb(0, 0, 0)"
|
||||||
|
--track-color="rgb(255, 0, 0)"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<svelte:component
|
||||||
|
this={slider}
|
||||||
|
id="component2"
|
||||||
|
--rail-color="rgb(0, 255, 0)"
|
||||||
|
--track-color="rgb(0, 0, 255)"
|
||||||
|
/>
|
||||||
|
</section>
|
@ -0,0 +1,29 @@
|
|||||||
|
<script>
|
||||||
|
export let id;
|
||||||
|
export let count = 0;
|
||||||
|
export let railColor1;
|
||||||
|
export let trackColor1;
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div {id}>
|
||||||
|
<p>Slider</p>
|
||||||
|
<span>Track</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{#if count === 0}
|
||||||
|
<svelte:self
|
||||||
|
id="nest-{id}"
|
||||||
|
count="{count + 1}"
|
||||||
|
--rail-color={railColor1}
|
||||||
|
--track-color={trackColor1}
|
||||||
|
/>
|
||||||
|
{/if}
|
||||||
|
|
||||||
|
<style>
|
||||||
|
p {
|
||||||
|
color: var(--rail-color);
|
||||||
|
}
|
||||||
|
span {
|
||||||
|
color: var(--track-color);
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,71 @@
|
|||||||
|
export default {
|
||||||
|
props: {
|
||||||
|
railColor1: 'black',
|
||||||
|
trackColor1: 'red',
|
||||||
|
railColor2: 'green',
|
||||||
|
trackColor2: 'blue',
|
||||||
|
nestRailColor1: 'white',
|
||||||
|
nestTrackColor1: 'gray',
|
||||||
|
nestRailColor2: 'aqua',
|
||||||
|
nestTrackColor2: 'pink'
|
||||||
|
},
|
||||||
|
html: `
|
||||||
|
<div style="display: contents; --rail-color:black; --track-color:red;">
|
||||||
|
<div id="slider-1">
|
||||||
|
<p class="svelte-17ay6rc">Slider</p>
|
||||||
|
<span class="svelte-17ay6rc">Track</span>
|
||||||
|
</div>
|
||||||
|
<div style="display: contents; --rail-color:white; --track-color:gray;">
|
||||||
|
<div id="nest-slider-1">
|
||||||
|
<p class="svelte-17ay6rc">Slider</p>
|
||||||
|
<span class="svelte-17ay6rc">Track</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div style="display: contents; --rail-color:green; --track-color:blue;">
|
||||||
|
<div id="slider-2">
|
||||||
|
<p class="svelte-17ay6rc">Slider</p>
|
||||||
|
<span class="svelte-17ay6rc">Track</span>
|
||||||
|
</div>
|
||||||
|
<div style="display: contents; --rail-color:aqua; --track-color:pink;">
|
||||||
|
<div id="nest-slider-2">
|
||||||
|
<p class="svelte-17ay6rc">Slider</p>
|
||||||
|
<span class="svelte-17ay6rc">Track</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`,
|
||||||
|
test({ component, assert, target }) {
|
||||||
|
component.railColor1 = 'yellow';
|
||||||
|
component.trackColor2 = 'orange';
|
||||||
|
component.nestRailColor1 = 'lime';
|
||||||
|
component.nestTrackColor2 = 'gold';
|
||||||
|
|
||||||
|
assert.htmlEqual(target.innerHTML, `
|
||||||
|
<div style="display: contents; --rail-color:yellow; --track-color:red;">
|
||||||
|
<div id="slider-1">
|
||||||
|
<p class="svelte-17ay6rc">Slider</p>
|
||||||
|
<span class="svelte-17ay6rc">Track</span>
|
||||||
|
</div>
|
||||||
|
<div style="display: contents; --rail-color:lime; --track-color:gray;">
|
||||||
|
<div id="nest-slider-1">
|
||||||
|
<p class="svelte-17ay6rc">Slider</p>
|
||||||
|
<span class="svelte-17ay6rc">Track</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div style="display: contents; --rail-color:green; --track-color:orange;">
|
||||||
|
<div id="slider-2">
|
||||||
|
<p class="svelte-17ay6rc">Slider</p>
|
||||||
|
<span class="svelte-17ay6rc">Track</span>
|
||||||
|
</div>
|
||||||
|
<div style="display: contents; --rail-color:aqua; --track-color:gold;">
|
||||||
|
<div id="nest-slider-2">
|
||||||
|
<p class="svelte-17ay6rc">Slider</p>
|
||||||
|
<span class="svelte-17ay6rc">Track</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`);
|
||||||
|
}
|
||||||
|
};
|
@ -0,0 +1,32 @@
|
|||||||
|
<script>
|
||||||
|
import Slider from './Slider.svelte';
|
||||||
|
export let railColor1;
|
||||||
|
export let railColor2;
|
||||||
|
export let trackColor1;
|
||||||
|
export let trackColor2;
|
||||||
|
export let nestRailColor1;
|
||||||
|
export let nestRailColor2;
|
||||||
|
export let nestTrackColor1;
|
||||||
|
export let nestTrackColor2;
|
||||||
|
|
||||||
|
function identity(color) {
|
||||||
|
return color;
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<Slider
|
||||||
|
id="slider-1"
|
||||||
|
--rail-color={railColor1}
|
||||||
|
--track-color={trackColor1}
|
||||||
|
railColor1={nestRailColor1}
|
||||||
|
trackColor1={nestTrackColor1}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<svelte:component
|
||||||
|
this={Slider}
|
||||||
|
id="slider-2"
|
||||||
|
--rail-color={railColor2}
|
||||||
|
--track-color={identity(trackColor2)}
|
||||||
|
railColor1={nestRailColor2}
|
||||||
|
trackColor1={nestTrackColor2}
|
||||||
|
/>
|
@ -0,0 +1,27 @@
|
|||||||
|
<script>
|
||||||
|
export let id;
|
||||||
|
export let count = 0;
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div {id}>
|
||||||
|
<p>Slider1</p>
|
||||||
|
<span>Track</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{#if count === 0}
|
||||||
|
<svelte:self
|
||||||
|
id="nest-{id}"
|
||||||
|
count={1}
|
||||||
|
--rail-color="rgb(255, 255, 0)"
|
||||||
|
--track-color="rgb(255, 0, 255)"
|
||||||
|
/>
|
||||||
|
{/if}
|
||||||
|
|
||||||
|
<style>
|
||||||
|
p {
|
||||||
|
color: var(--rail-color);
|
||||||
|
}
|
||||||
|
span {
|
||||||
|
color: var(--track-color);
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,27 @@
|
|||||||
|
<script>
|
||||||
|
export let id;
|
||||||
|
export let count = 0;
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div {id}>
|
||||||
|
<p>Slider2</p>
|
||||||
|
<span>Track</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{#if count === 0}
|
||||||
|
<svelte:self
|
||||||
|
id="nest-{id}"
|
||||||
|
count={1}
|
||||||
|
--rail-color="rgb(0, 255, 255)"
|
||||||
|
--track-color="rgb(255, 255, 255)"
|
||||||
|
/>
|
||||||
|
{/if}
|
||||||
|
|
||||||
|
<style>
|
||||||
|
p {
|
||||||
|
color: var(--rail-color);
|
||||||
|
}
|
||||||
|
span {
|
||||||
|
color: var(--track-color);
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,47 @@
|
|||||||
|
export default {
|
||||||
|
props: {},
|
||||||
|
html: `
|
||||||
|
<div style="display: contents; --rail-color:rgb(0, 0, 0); --track-color:rgb(255, 0, 0);">
|
||||||
|
<div id="component1">
|
||||||
|
<p class="svelte-q538ga">Slider1</p><span class="svelte-q538ga">Track</span>
|
||||||
|
</div>
|
||||||
|
<div style="display: contents; --rail-color:rgb(255, 255, 0); --track-color:rgb(255, 0, 255);">
|
||||||
|
<div id="nest-component1">
|
||||||
|
<p class="svelte-q538ga">Slider1</p><span class="svelte-q538ga">Track</span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div style="display: contents; --rail-color:rgb(0, 255, 0); --track-color:rgb(0, 0, 255);">
|
||||||
|
<div id="component2">
|
||||||
|
<p class="svelte-q538ga">Slider2</p><span class="svelte-q538ga">Track</span>
|
||||||
|
</div>
|
||||||
|
<div style="display: contents; --rail-color:rgb(0, 255, 255); --track-color:rgb(255, 255, 255);">
|
||||||
|
<div id="nest-component2">
|
||||||
|
<p class="svelte-q538ga">Slider2</p><span class="svelte-q538ga">Track</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`,
|
||||||
|
test({ target, window, assert }) {
|
||||||
|
const railColor1 = target.querySelector('#component1 p');
|
||||||
|
const trackColor1 = target.querySelector('#component1 span');
|
||||||
|
const railColor2 = target.querySelector('#component2 p');
|
||||||
|
const trackColor2 = target.querySelector('#component2 span');
|
||||||
|
const nestRailColor1 = target.querySelector('#nest-component1 p');
|
||||||
|
const nestTrackColor1 = target.querySelector('#nest-component1 span');
|
||||||
|
const nestRailColor2 = target.querySelector('#nest-component2 p');
|
||||||
|
const nestTrackColor2 = target.querySelector('#nest-component2 span');
|
||||||
|
|
||||||
|
assert.equal(window.getComputedStyle(railColor1).color, 'rgb(0, 0, 0)');
|
||||||
|
assert.equal(window.getComputedStyle(trackColor1).color, 'rgb(255, 0, 0)');
|
||||||
|
assert.equal(window.getComputedStyle(railColor2).color, 'rgb(0, 255, 0)');
|
||||||
|
assert.equal(window.getComputedStyle(trackColor2).color, 'rgb(0, 0, 255)');
|
||||||
|
assert.equal(window.getComputedStyle(nestRailColor1).color, 'rgb(255, 255, 0)');
|
||||||
|
assert.equal(window.getComputedStyle(nestTrackColor1).color, 'rgb(255, 0, 255)');
|
||||||
|
assert.equal(window.getComputedStyle(nestRailColor2).color, 'rgb(0, 255, 255)');
|
||||||
|
assert.equal(window.getComputedStyle(nestTrackColor2).color, 'rgb(255, 255, 255)');
|
||||||
|
assert.equal(railColor1.textContent, 'Slider1');
|
||||||
|
assert.equal(railColor2.textContent, 'Slider2');
|
||||||
|
assert.equal(nestRailColor1.textContent, 'Slider1');
|
||||||
|
assert.equal(nestRailColor2.textContent, 'Slider2');
|
||||||
|
}
|
||||||
|
};
|
@ -0,0 +1,16 @@
|
|||||||
|
<script>
|
||||||
|
import Slider1 from './Slider1.svelte';
|
||||||
|
import Slider2 from './Slider2.svelte';
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<Slider1
|
||||||
|
id="component1"
|
||||||
|
--rail-color="rgb(0, 0, 0)"
|
||||||
|
--track-color="rgb(255, 0, 0)"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<Slider2
|
||||||
|
id="component2"
|
||||||
|
--rail-color="rgb(0, 255, 0)"
|
||||||
|
--track-color="rgb(0, 0, 255)"
|
||||||
|
/>
|
@ -0,0 +1,27 @@
|
|||||||
|
<script>
|
||||||
|
export let id;
|
||||||
|
export let count = 0;
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div {id}>
|
||||||
|
<p>Slider1</p>
|
||||||
|
<span>Track</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{#if count === 0}
|
||||||
|
<svelte:self
|
||||||
|
id="nest-{id}"
|
||||||
|
count={1}
|
||||||
|
--rail-color="rgb(255, 255, 0)"
|
||||||
|
--track-color="rgb(255, 0, 255)"
|
||||||
|
/>
|
||||||
|
{/if}
|
||||||
|
|
||||||
|
<style>
|
||||||
|
p {
|
||||||
|
color: var(--rail-color);
|
||||||
|
}
|
||||||
|
span {
|
||||||
|
color: var(--track-color);
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,27 @@
|
|||||||
|
<script>
|
||||||
|
export let id;
|
||||||
|
export let count = 0;
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div {id}>
|
||||||
|
<p>Slider2</p>
|
||||||
|
<span>Track</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{#if count === 0}
|
||||||
|
<svelte:self
|
||||||
|
id="nest-{id}"
|
||||||
|
count={1}
|
||||||
|
--rail-color="rgb(0, 255, 255)"
|
||||||
|
--track-color="rgb(255, 255, 255)"
|
||||||
|
/>
|
||||||
|
{/if}
|
||||||
|
|
||||||
|
<style>
|
||||||
|
p {
|
||||||
|
color: var(--rail-color);
|
||||||
|
}
|
||||||
|
span {
|
||||||
|
color: var(--track-color);
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,84 @@
|
|||||||
|
export default {
|
||||||
|
props: {
|
||||||
|
componentName: 'Slider1'
|
||||||
|
},
|
||||||
|
html: `
|
||||||
|
<div style="display: contents; --rail-color:rgb(0, 0, 0); --track-color:rgb(255, 0, 0);">
|
||||||
|
<div id="component1">
|
||||||
|
<p class="svelte-q538ga">Slider1</p><span class="svelte-q538ga">Track</span>
|
||||||
|
</div>
|
||||||
|
<div style="display: contents; --rail-color:rgb(255, 255, 0); --track-color:rgb(255, 0, 255);">
|
||||||
|
<div id="nest-component1">
|
||||||
|
<p class="svelte-q538ga">Slider1</p><span class="svelte-q538ga">Track</span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div style="display: contents; --rail-color:rgb(0, 255, 0); --track-color:rgb(0, 0, 255);">
|
||||||
|
<div id="component2">
|
||||||
|
<p class="svelte-q538ga">Slider1</p><span class="svelte-q538ga">Track</span>
|
||||||
|
</div>
|
||||||
|
<div style="display: contents; --rail-color:rgb(255, 255, 0); --track-color:rgb(255, 0, 255);">
|
||||||
|
<div id="nest-component2">
|
||||||
|
<p class="svelte-q538ga">Slider1</p><span class="svelte-q538ga">Track</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`,
|
||||||
|
test({ target, window, assert, component }) {
|
||||||
|
|
||||||
|
function assert_slider_1() {
|
||||||
|
const railColor1 = target.querySelector('#component1 p');
|
||||||
|
const trackColor1 = target.querySelector('#component1 span');
|
||||||
|
const railColor2 = target.querySelector('#component2 p');
|
||||||
|
const trackColor2 = target.querySelector('#component2 span');
|
||||||
|
const nestRailColor1 = target.querySelector('#nest-component1 p');
|
||||||
|
const nestTrackColor1 = target.querySelector('#nest-component1 span');
|
||||||
|
const nestRailColor2 = target.querySelector('#nest-component2 p');
|
||||||
|
const nestTrackColor2 = target.querySelector('#nest-component2 span');
|
||||||
|
|
||||||
|
assert.equal(window.getComputedStyle(railColor1).color, 'rgb(0, 0, 0)');
|
||||||
|
assert.equal(window.getComputedStyle(trackColor1).color, 'rgb(255, 0, 0)');
|
||||||
|
assert.equal(window.getComputedStyle(railColor2).color, 'rgb(0, 255, 0)');
|
||||||
|
assert.equal(window.getComputedStyle(trackColor2).color, 'rgb(0, 0, 255)');
|
||||||
|
assert.equal(window.getComputedStyle(nestRailColor1).color, 'rgb(255, 255, 0)');
|
||||||
|
assert.equal(window.getComputedStyle(nestTrackColor1).color, 'rgb(255, 0, 255)');
|
||||||
|
assert.equal(window.getComputedStyle(nestRailColor2).color, 'rgb(255, 255, 0)');
|
||||||
|
assert.equal(window.getComputedStyle(nestTrackColor2).color, 'rgb(255, 0, 255)');
|
||||||
|
assert.equal(railColor1.textContent, 'Slider1');
|
||||||
|
assert.equal(railColor2.textContent, 'Slider1');
|
||||||
|
assert.equal(nestRailColor1.textContent, 'Slider1');
|
||||||
|
assert.equal(nestRailColor2.textContent, 'Slider1');
|
||||||
|
}
|
||||||
|
|
||||||
|
function assert_slider_2() {
|
||||||
|
const railColor1 = target.querySelector('#component1 p');
|
||||||
|
const trackColor1 = target.querySelector('#component1 span');
|
||||||
|
const railColor2 = target.querySelector('#component2 p');
|
||||||
|
const trackColor2 = target.querySelector('#component2 span');
|
||||||
|
const nestRailColor1 = target.querySelector('#nest-component1 p');
|
||||||
|
const nestTrackColor1 = target.querySelector('#nest-component1 span');
|
||||||
|
const nestRailColor2 = target.querySelector('#nest-component2 p');
|
||||||
|
const nestTrackColor2 = target.querySelector('#nest-component2 span');
|
||||||
|
|
||||||
|
assert.equal(window.getComputedStyle(railColor1).color, 'rgb(0, 0, 0)');
|
||||||
|
assert.equal(window.getComputedStyle(trackColor1).color, 'rgb(255, 0, 0)');
|
||||||
|
assert.equal(window.getComputedStyle(railColor2).color, 'rgb(0, 255, 0)');
|
||||||
|
assert.equal(window.getComputedStyle(trackColor2).color, 'rgb(0, 0, 255)');
|
||||||
|
assert.equal(window.getComputedStyle(nestRailColor1).color, 'rgb(0, 255, 255)');
|
||||||
|
assert.equal(window.getComputedStyle(nestTrackColor1).color, 'rgb(255, 255, 255)');
|
||||||
|
assert.equal(window.getComputedStyle(nestRailColor2).color, 'rgb(0, 255, 255)');
|
||||||
|
assert.equal(window.getComputedStyle(nestTrackColor2).color, 'rgb(255, 255, 255)');
|
||||||
|
assert.equal(railColor1.textContent, 'Slider2');
|
||||||
|
assert.equal(railColor2.textContent, 'Slider2');
|
||||||
|
assert.equal(nestRailColor1.textContent, 'Slider2');
|
||||||
|
assert.equal(nestRailColor2.textContent, 'Slider2');
|
||||||
|
}
|
||||||
|
|
||||||
|
assert_slider_1();
|
||||||
|
component.componentName = 'Slider2';
|
||||||
|
assert_slider_2();
|
||||||
|
component.componentName = undefined;
|
||||||
|
assert.equal(window.document.querySelector('div'), null);
|
||||||
|
component.componentName = 'Slider1';
|
||||||
|
assert_slider_1();
|
||||||
|
}
|
||||||
|
};
|
@ -0,0 +1,20 @@
|
|||||||
|
<script>
|
||||||
|
import Slider1 from './Slider1.svelte';
|
||||||
|
import Slider2 from './Slider2.svelte';
|
||||||
|
export let componentName = 'Slider1';
|
||||||
|
$: slider = componentName === 'Slider1' ? Slider1 : componentName === 'Slider2' ? Slider2 : undefined;
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<svelte:component
|
||||||
|
this={slider}
|
||||||
|
id="component1"
|
||||||
|
--rail-color="rgb(0, 0, 0)"
|
||||||
|
--track-color="rgb(255, 0, 0)"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<svelte:component
|
||||||
|
this={slider}
|
||||||
|
id="component2"
|
||||||
|
--rail-color="rgb(0, 255, 0)"
|
||||||
|
--track-color="rgb(0, 0, 255)"
|
||||||
|
/>
|
Loading…
Reference in new issue