Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions test/test-template-engine.js
Original file line number Diff line number Diff line change
Expand Up @@ -784,11 +784,14 @@ describe('html rendering', () => {
assert(container.querySelector('#target').children[0] !== foo);
});

// TODO: #254: Uncomment “moves” lines when we leverage “moveBefore”.
it('native map does not cause disconnectedCallback on prefix removal', () => {
let connects = 0;
// let moves = 0;
let disconnects = 0;
class TestPrefixRemoval extends HTMLElement {
connectedCallback() { connects++; }
// connectedMoveCallback() { moves++; }
disconnectedCallback() { disconnects++; }
}
customElements.define('test-prefix-removal', TestPrefixRemoval);
Expand All @@ -807,28 +810,35 @@ describe('html rendering', () => {

document.body.append(container);
assert(connects === 0);
// assert(moves === 0);
assert(disconnects === 0);

render(container, getTemplate({ items: [{ id: 'foo' }, { id: 'bar' }] }));
assert(connects === 2);
// assert(moves === 0);
assert(disconnects === 0);

render(container, getTemplate({ items: [{ id: 'bar' }] }));
assert(connects === 2);
// assert(moves === 1);
assert(disconnects === 1);

render(container, getTemplate({ items: [] }));
assert(connects === 2);
// assert(moves === 1);
assert(disconnects === 2);

container.remove();
});

// TODO: #254: Uncomment “moves” lines when we leverage “moveBefore”.
it('native map does not cause disconnectedCallback on suffix removal', () => {
let connects = 0;
// let moves = 0;
let disconnects = 0;
class TestSuffixRemoval extends HTMLElement {
connectedCallback() { connects++; }
// connectedMoveCallback() { moves++; }
disconnectedCallback() { disconnects++; }
}
customElements.define('test-suffix-removal', TestSuffixRemoval);
Expand All @@ -847,18 +857,22 @@ describe('html rendering', () => {

document.body.append(container);
assert(connects === 0);
// assert(moves === 0);
assert(disconnects === 0);

render(container, getTemplate({ items: [{ id: 'foo' }, { id: 'bar' }] }));
assert(connects === 2);
// assert(moves === 0);
assert(disconnects === 0);

render(container, getTemplate({ items: [{ id: 'foo' }] }));
assert(connects === 2);
// assert(moves === 0);
assert(disconnects === 1);

render(container, getTemplate({ items: [] }));
assert(connects === 2);
// assert(moves === 0);
assert(disconnects === 2);

container.remove();
Expand All @@ -867,9 +881,11 @@ describe('html rendering', () => {
// TODO: #254: See https://chromestatus.com/feature/5135990159835136.
it.todo('native map does not cause disconnectedCallback on list shuffle', () => {
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Again — I did test this all out and indeed it does do the thing. One curiosity is that without the connectedMoveCallback registered, the behavior is different. My guess is that this is not the final behavior, but I will probably ask around to see if I can get more information there.

let connects = 0;
let moves = 0;
let disconnects = 0;
class TestListShuffle extends HTMLElement {
connectedCallback() { connects++; }
connectedMoveCallback() { moves++; }
disconnectedCallback() { disconnects++; }
}
customElements.define('test-list-shuffle', TestListShuffle);
Expand All @@ -888,18 +904,22 @@ describe('html rendering', () => {

document.body.append(container);
assert(connects === 0);
assert(moves === 0);
assert(disconnects === 0);

render(container, getTemplate({ items: [{ id: 'foo' }, { id: 'bar' }] }));
assert(connects === 2);
assert(moves === 0);
assert(disconnects === 0);

render(container, getTemplate({ items: [{ id: 'bar' }, { id: 'foo' }] }));
assert(connects === 2);
assert(moves === 1);
assert(disconnects === 0);

render(container, getTemplate({ items: [] }));
assert(connects === 2);
assert(moves === 1);
assert(disconnects === 2);

container.remove();
Expand Down
2 changes: 1 addition & 1 deletion ts/x-element.d.ts.map

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion ts/x-template.d.ts.map

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions x-element.js
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,12 @@ export default class XElement extends HTMLElement {
XElement.#connectHost(this);
}

// TODO: #254: Uncomment once we leverage “moveBefore”.
// /**
// * Extends HTMLElement.prototype.connectedMoveCallback.
// */
// connectedMoveCallback() {}
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We’ll eventually want to add this to the base element for completeness / self-documentation, similar to other lifecycle methods.


/**
* Extends HTMLElement.prototype.attributeChangedCallback.
* @param {string} attribute
Expand Down
Loading