blob: 1a852f7568d4eeb59927515972e54b3993dfc0d3 [file] [log] [blame]
<html>
<head>
<script src="../../http/tests/inspector/inspector-test.js"></script>
<script>
function test()
{
var TestWidget = class extends UI.Widget {
constructor(widgetName)
{
super();
this._widgetName = widgetName;
this._processWillShowCount = 0;
this._processWasHiddenCount = 0;
InspectorTest.addResult(this._widgetName + "()");
}
_processWillShow()
{
InspectorTest.assertEquals(this._processWillShowCount, this._processWasHiddenCount);
super._processWillShow();
++this._processWillShowCount;
}
_processWasHidden()
{
super._processWasHidden();
++this._processWasHiddenCount;
InspectorTest.assertEquals(this._processWillShowCount, this._processWasHiddenCount);
}
show(parentElement)
{
InspectorTest.addResult(this._widgetName + ".show()");
super.show(parentElement);
}
detach()
{
InspectorTest.addResult(this._widgetName + ".detach()");
super.detach();
}
doResize()
{
InspectorTest.addResult(this._widgetName + ".doResize()");
super.doResize();
}
wasShown()
{
InspectorTest.addResult(" " + this._widgetName + ".wasShown()");
if (this.showOnWasShown)
this.showOnWasShown.show(this.showRoot || this.element);
if (this.detachOnWasShown)
this.detachOnWasShown.detach();
if (this.resizeOnWasShown)
this.resizeOnWasShown.doResize();
}
willHide()
{
InspectorTest.addResult(" " + this._widgetName + ".willHide()");
if (this.showOnWillHide)
this.showOnWillHide.show(this.element);
if (this.detachOnWillHide)
this.detachOnWillHide.detach();
}
onResize()
{
InspectorTest.addResult(" " + this._widgetName + ".onResize()");
}
};
InspectorTest.runTestSuite([
function testShowWidget(next)
{
var widget = new TestWidget("Widget");
widget.show(UI.inspectorView.element);
widget.detach();
next();
},
function testAppendViaDOM(next)
{
try {
var widget = new TestWidget("Widget");
document.body.appendChild(widget.element);
} catch (e) {
InspectorTest.addResult(e);
}
next();
},
function testInsertViaDOM(next)
{
try {
var widget = new TestWidget("Widget");
document.body.insertBefore(widget.element, null);
} catch (e) {
InspectorTest.addResult(e);
}
next();
},
function testAttachToOrphanNode(next)
{
try {
var widget = new TestWidget("Widget");
var div = document.createElement("div");
widget.show(div);
} catch (e) {
InspectorTest.addResult(e);
}
next();
},
function testImmediateParent(next)
{
var parentWidget = new TestWidget("Parent");
var childWidget = new TestWidget("Child");
childWidget.show(parentWidget.element);
if (childWidget._parentWidget === parentWidget)
InspectorTest.addResult("OK");
else
InspectorTest.addResult("FAILED");
next();
},
function testDistantParent(next)
{
var parentWidget = new TestWidget("Parent");
var div = document.createElement("div");
parentWidget.element.appendChild(div);
var childWidget = new TestWidget("Child");
childWidget.show(div);
if (childWidget._parentWidget === parentWidget)
InspectorTest.addResult("OK");
else
InspectorTest.addResult("FAILED");
next();
},
function testEvents(next)
{
var parentWidget = new TestWidget("Parent");
parentWidget.markAsRoot();
var childWidget = new TestWidget("Child");
parentWidget.show(document.body);
parentWidget.doResize();
childWidget.show(parentWidget.element);
parentWidget.doResize();
parentWidget.detach();
parentWidget.show(document.body);
childWidget.detach();
parentWidget.detach();
next();
},
function testEventsHideOnDetach(next)
{
var parentWidget = new TestWidget("Parent");
var childWidget = new TestWidget("Child");
childWidget.setHideOnDetach();
parentWidget.show(UI.inspectorView.element);
parentWidget.doResize();
childWidget.show(parentWidget.element);
parentWidget.doResize();
parentWidget.detach();
parentWidget.show(UI.inspectorView.element);
childWidget.detach();
parentWidget.detach();
next();
},
function testWidgetCounter(next)
{
var parentWidget = new TestWidget("Parent");
parentWidget.show(UI.inspectorView.element);
var childWidget = new TestWidget("Child");
childWidget.show(parentWidget.element);
InspectorTest.addResult(" widget counter: " + parentWidget.element.__widgetCounter);
var childWidget2 = new TestWidget("Child 2");
childWidget2.show(parentWidget.element);
InspectorTest.addResult(" widget counter: " + parentWidget.element.__widgetCounter);
childWidget.detach();
InspectorTest.addResult(" widget counter: " + parentWidget.element.__widgetCounter);
childWidget2.detach();
InspectorTest.addResult(" widget counter: " + parentWidget.element.__widgetCounter);
next();
},
function testRemoveChild(next)
{
var parentWidget = new TestWidget("Parent");
parentWidget.show(UI.inspectorView.element);
var childWidget = new TestWidget("Child");
childWidget.show(parentWidget.element);
try {
parentWidget.element.removeChild(childWidget.element);
} catch (e) {
InspectorTest.addResult(e);
}
next();
},
function testImplicitRemoveChild(next)
{
var parentWidget = new TestWidget("Parent");
var div = document.createElement("div");
parentWidget.element.appendChild(div);
var childWidget = new TestWidget("Child");
childWidget.show(div);
try {
parentWidget.element.removeChild(div);
} catch (e) {
InspectorTest.addResult(e);
}
next();
},
function testRemoveChildren(next)
{
var parentWidget = new TestWidget("Parent");
var childWidget = new TestWidget("Child");
childWidget.show(parentWidget.element);
parentWidget.element.appendChild(document.createElement("div"));
try {
parentWidget.element.removeChildren();
} catch (e) {
InspectorTest.addResult(e);
}
next();
},
function testImplicitRemoveChildren(next)
{
var parentWidget = new TestWidget("Parent");
var div = document.createElement("div");
parentWidget.element.appendChild(div);
var childWidget = new TestWidget("Child");
childWidget.show(div);
try {
parentWidget.element.removeChildren();
} catch (e) {
InspectorTest.addResult(e);
}
next();
},
function testShowOnWasShown(next)
{
var parentWidget = new TestWidget("Parent");
parentWidget.showOnWasShown = new TestWidget("Child");
parentWidget.show(UI.inspectorView.element);
parentWidget.detach();
next();
},
function testShowNestedOnWasShown(next)
{
var topWidget = new TestWidget("Top");
var middleWidget = new TestWidget("Middle");
var bottomWidget = new TestWidget("Bottom");
middleWidget.show(topWidget.element);
topWidget.showOnWasShown = bottomWidget;
topWidget.showRoot = middleWidget.element;
topWidget.show(UI.inspectorView.element);
topWidget.detach();
next();
},
function testDetachOnWasShown(next)
{
var parentWidget = new TestWidget("Parent");
var childWidget = new TestWidget("Child");
childWidget.show(parentWidget.element);
parentWidget.detachOnWasShown = childWidget;
parentWidget.show(UI.inspectorView.element);
parentWidget.detach();
next();
},
function testShowOnWillHide(next)
{
var parentWidget = new TestWidget("Parent");
var childWidget = new TestWidget("Child");
parentWidget.show(UI.inspectorView.element);
childWidget.show(parentWidget.element);
parentWidget.showOnWillHide = childWidget;
parentWidget.detach();
next();
},
function testDetachOnWillHide(next)
{
var parentWidget = new TestWidget("Parent");
var childWidget = new TestWidget("Child");
parentWidget.show(UI.inspectorView.element);
childWidget.show(parentWidget.element);
parentWidget.detachOnWillHide = childWidget;
parentWidget.detach();
next();
},
function testShowDetachesFromPrevious(next)
{
var parentWidget1 = new TestWidget("Parent1");
var parentWidget2 = new TestWidget("Parent2");
var childWidget = new TestWidget("Child");
parentWidget1.show(UI.inspectorView.element);
parentWidget2.show(UI.inspectorView.element);
childWidget.show(parentWidget1.element);
childWidget.show(parentWidget2.element);
next();
},
function testResizeOnWasShown(next)
{
var parentWidget = new TestWidget("Parent");
var childWidget = new TestWidget("Child");
childWidget.show(parentWidget.element);
parentWidget.resizeOnWasShown = childWidget;
parentWidget.show(UI.inspectorView.element);
parentWidget.detach();
next();
},
function testReparentWithinWidget(next)
{
var parentWidget = new TestWidget("Parent");
parentWidget.show(UI.inspectorView.element);
var childWidget = new TestWidget("Child");
var container1 = parentWidget.element.createChild("div");
var container2 = parentWidget.element.createChild("div");
childWidget.show(container1);
childWidget.show(container2);
next();
}
]);
}
</script>
</head>
<body onload="runTest()">
<p>
This tests that events are properly propagated through Widget hierarchy.
</p>
</body>
</html>