/********************************************************************************
* Copyright (c) 2017-2018 TypeFox and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* This Source Code may also be made available under the following Secondary
* Licenses when the conditions for such availability set forth in the Eclipse
* Public License v. 2.0 are satisfied: GNU General Public License, version 2
* with the GNU Classpath Exception which is available at
* https://www.gnu.org/software/classpath/license.html.
*
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
********************************************************************************/
/** @jsx svg */
import { svg } from '../../lib/jsx';
import { expect, describe, it } from 'vitest';
import { init } from "snabbdom";
import { SModelElementImpl } from "../model/smodel";
import { ModelRenderer } from './viewer';
import { ThunkView } from './thunk-view';
import toHTML from 'snabbdom-to-html';
/**
* @vitest-environment happy-dom
*/
describe('ThunkView', () => {
let renderCount = 0;
class Foo extends SModelElementImpl {
foo: string;
}
class FooView extends ThunkView {
doRender() {
return ;
}
selector() {
return 'g';
}
watchedArgs(foo: Foo) {
return [foo.foo];
}
}
const context = new ModelRenderer(undefined!, 'main', []);
const patcher = init([]);
it('renders on change', () => {
const element = new Foo();
element.foo = 'first';
const view = new FooView();
const vnode = view.render(element, context);
const domElement =
document.createElement('div');
domElement.setAttribute('id', 'sprotty');
patcher(domElement, vnode);
expect(toHTML(vnode)).to.be.equal('');
const vnode1 = view.render(element, context);
patcher(vnode, vnode1);
expect(toHTML(vnode1)).to.be.equal('');
element.foo = 'second';
const vnode2 = view.render(element, context);
patcher(vnode1, vnode2);
expect(toHTML(vnode2)).to.be.equal('');
});
});