| Index: client/tests/client/view/view_tests.dart
|
| diff --git a/client/tests/client/view/view_tests.dart b/client/tests/client/view/view_tests.dart
|
| index 80c6c332a941d57308a134ef6348b6a397b96ab6..8328568b7e07166c99f0e8b1bb1f8941b3451a8e 100644
|
| --- a/client/tests/client/view/view_tests.dart
|
| +++ b/client/tests/client/view/view_tests.dart
|
| @@ -9,8 +9,194 @@
|
| #import('../../../testing/unittest/unittest.dart');
|
| #import('../../../view/view.dart');
|
|
|
| -#source('ViewTests.dart');
|
| -
|
| void main() {
|
| - new ViewTests().run();
|
| + test('does not render immediately', () {
|
| + final view = new TestView();
|
| + expect(view.isRendered) == false;
|
| +
|
| + view.addToDocument(document.body);
|
| + expect(view.isRendered) == true;
|
| + });
|
| +
|
| + group('addToDocument()', () {
|
| + test('causes view to render', () {
|
| + final view = new TestView();
|
| + view.addToDocument(document.body);
|
| + expect(view.isRendered) == true;
|
| + });
|
| +
|
| + test('calls afterRender()', () {
|
| + var result = '';
|
| + final view = new TestView();
|
| + view.renderFn = () {
|
| + result += 'render';
|
| + return new Element.html('<div class="test"></div>');
|
| + };
|
| +
|
| + view.afterRenderFn = (node) { result += 'after'; };
|
| +
|
| + view.addToDocument(document.body);
|
| + expect(result) == 'renderafter';
|
| + });
|
| +
|
| + test('calls enterDocument()', () {
|
| + final view = new TestView();
|
| + bool entered = false;
|
| + view.enterDocumentFn = () { entered = true; };
|
| +
|
| + view.addToDocument(document.body);
|
| + expect(entered) == true;
|
| + });
|
| + });
|
| +
|
| + group('afterRender()', () {
|
| + test('passes rendered node', () {
|
| + final rendered = new Element.html('<div class="node"></div>');
|
| + final view = new TestView();
|
| + view.renderFn = () => rendered;
|
| + view.afterRenderFn = (node) { expect(node) == rendered; };
|
| +
|
| + view.addToDocument(document.body);
|
| + });
|
| + });
|
| +
|
| + group('childViewAdded()', () {
|
| + test('calls enterDocument() if parent is in document', () {
|
| + final parent = new TestView();
|
| + parent.addToDocument(document.body);
|
| +
|
| + bool entered = false;
|
| + final child = new TestView();
|
| + child.enterDocumentFn = () { entered = true; };
|
| +
|
| + // Add the child.
|
| + parent.childViews = [child];
|
| + parent.childViewAdded(child);
|
| +
|
| + expect(entered) == true;
|
| + });
|
| +
|
| + test('does not call enterDocument() if parent is not in document', () {
|
| + final parent = new TestView();
|
| +
|
| + bool entered = false;
|
| + final child = new TestView();
|
| + child.enterDocumentFn = () { entered = true; };
|
| +
|
| + // Add the child.
|
| + parent.childViews = [child];
|
| + parent.childViewAdded(child);
|
| +
|
| + expect(entered) == false;
|
| + });
|
| +
|
| + test('calls enterDocument() each time added', () {
|
| + final parent = new TestView();
|
| + parent.addToDocument(document.body);
|
| +
|
| + var entered = 0;
|
| + final child = new TestView();
|
| + child.enterDocumentFn = () { entered++; };
|
| +
|
| + // Add the child.
|
| + parent.childViews = [child];
|
| + parent.childViewAdded(child);
|
| + parent.childViewRemoved(child);
|
| + parent.childViewAdded(child);
|
| + parent.childViewRemoved(child);
|
| + parent.childViewAdded(child);
|
| + parent.childViewRemoved(child);
|
| +
|
| + expect(entered) == 3;
|
| + });
|
| + });
|
| +
|
| + group('childViewRemoved()', () {
|
| + test('calls exitDocument() if parent is in document', () {
|
| + final parent = new TestView();
|
| + parent.addToDocument(document.body);
|
| +
|
| + bool exited = false;
|
| + final child = new TestView();
|
| + child.exitDocumentFn = () { exited = true; };
|
| +
|
| + // Remove the child.
|
| + parent.childViews = [];
|
| + parent.childViewRemoved(child);
|
| +
|
| + expect(exited) == true;
|
| + });
|
| +
|
| + test('does not call exitDocument() if parent is not in document', () {
|
| + final parent = new TestView();
|
| +
|
| + bool exited = false;
|
| + final child = new TestView();
|
| + child.exitDocumentFn = () { exited = true; };
|
| +
|
| + // Remove the child.
|
| + parent.childViews = [];
|
| + parent.childViewRemoved(child);
|
| +
|
| + expect(exited) == false;
|
| + });
|
| +
|
| + test('calls exitDocument() each time removed', () {
|
| + final parent = new TestView();
|
| + parent.addToDocument(document.body);
|
| +
|
| + var exited = 0;
|
| + final child = new TestView();
|
| + child.exitDocumentFn = () { exited++; };
|
| +
|
| + // Add the child.
|
| + parent.childViews = [child];
|
| + parent.childViewAdded(child);
|
| + parent.childViewRemoved(child);
|
| + parent.childViewAdded(child);
|
| + parent.childViewRemoved(child);
|
| + parent.childViewAdded(child);
|
| + parent.childViewRemoved(child);
|
| +
|
| + expect(exited) == 3;
|
| + });
|
| + });
|
| +
|
| + group('enterDocument()', () {
|
| + test('children are called before parents', () {
|
| + var result = '';
|
| +
|
| + final parent = new TestView();
|
| + parent.enterDocumentFn = () { result += 'parent'; };
|
| +
|
| + final child = new TestView();
|
| + child.enterDocumentFn = () { result += 'child'; };
|
| +
|
| + parent.childViews = [child];
|
| +
|
| + parent.addToDocument(document.body);
|
| + expect(result) == 'childparent';
|
| + });
|
| + });
|
| +}
|
| +
|
| +class TestView extends View {
|
| + Function renderFn;
|
| + Function afterRenderFn;
|
| + Function enterDocumentFn;
|
| + Function exitDocumentFn;
|
| + List<View> childViews;
|
| +
|
| + TestView() : super(), childViews = [] {
|
| + // Default behavior.
|
| + renderFn = () => new Element.html('<div class="test"></div>');
|
| + afterRenderFn = (node) {};
|
| + enterDocumentFn = () {};
|
| + exitDocumentFn = () {};
|
| + }
|
| +
|
| + Element render() => renderFn();
|
| + void afterRender(Element node) { afterRenderFn(node); }
|
| + void enterDocument() { enterDocumentFn(); }
|
| + void exitDocument() { exitDocumentFn(); }
|
| }
|
|
|