// ========================================================================== // Project: SproutCore
- JavaScript Application Framework // Copyright: ©2006-2011 Apple Inc. and contributors. // License: Licensed under MIT license (see license.js) // ==========================================================================
/*global module test equals context ok same */
// .….….….….….….….….….….….….…… // removeChild() //
var parent, child; module(“SC.View#removeChild”, {
setup: function() { parent = SC.View.create({ childViews: [ SC.View.extend({ updateLayerLocationIfNeeded: CoreTest.stub('updateLayerLocationIfNeeded', SC.View.prototype.updateLayerLocationIfNeeded) }) ] }); child = parent.childViews[0]; }
});
test(“returns receiver”, function() {
equals(parent.removeChild(child), parent, 'receiver');
});
test(“removes child from parent.childViews array”, function() {
ok(parent.childViews.indexOf(child)>=0, 'precond - has child in childViews array before remove'); parent.removeChild(child); ok(parent.childViews.indexOf(child)<0, 'removed child');
});
test(“sets parentView property to null”, function() {
ok(child.get('parentView'), 'precond - has parentView'); parent.removeChild(child); ok(!child.get('parentView'), 'parentView is now null');
});
test(“does nothing if passed null”, function() {
// monkey patch callbacks to make sure nothing runs. var callCount = 0; parent.willRemoveChild = parent.didRemoveChild = function() { callCount++; }; parent.removeChild(null); equals(callCount, 0, 'did not invoke callbacks');
});
test(“invokes child.willRemoveFromParent before removing if defined”, function() {
// monkey patch to test var callCount = 0; child.willRemoveFromParent = function() { // verify invoked BEFORE removal equals(child.get('parentView'), parent, 'still in parent'); callCount++; }; parent.removeChild(child); equals(callCount, 1, 'invoked callback');
});
test(“invokes parent.willRemoveChild before removing if defined”, function() {
// monkey patch to test var callCount = 0; parent.willRemoveChild = function(view) { equals(view, child, 'passed child as param'); // verify invoked BEFORE removal equals(child.get('parentView'), parent, 'still in parent'); callCount++; }; parent.removeChild(child); equals(callCount, 1, 'invoked callback');
});
test(“invokes child.didRemoveFromParent AFTER removing if defined”, function() {
// monkey patch to test var callCount = 0; child.didRemoveFromParent = function(view) { equals(view, parent, 'passed parent as param'); // verify invoked AFTER removal ok(!child.get('parentView'), 'no longer in parent'); callCount++; }; parent.removeChild(child); equals(callCount, 1, 'invoked callback');
});
test(“invokes parent.didRemoveChild before removing if defined”, function() {
// monkey patch to test var callCount = 0; parent.didRemoveChild = function(view) { equals(view, child, 'passed child as param'); // verify invoked BEFORE removal ok(!child.get('parentView'), 'no longer in parent'); callCount++; }; parent.removeChild(child); equals(callCount, 1, 'invoked callback');
});
// VERIFY LAYER CHANGES ARE DEFERRED test(“should not move layer immediately”); // , function() {
// parent.createLayer();
// var parentLayer = parent.get('layer'), childLayer = child.get('layer'); // ok(parentLayer, 'precond - parent has layer'); // ok(childLayer, 'precond - child has layer'); // equals(childLayer.parentNode, parentLayer, 'child layer belong to parent');
// parent.removeChild(child); // equals(childLayer.parentNode, parentLayer, 'child layer belong to parent'); // });
// .….….….….….….….….….….….….…… // removeAllChildren() // var view; module(“SC.View#removeAllChildren”, {
setup: function() { view = SC.View.create({ childViews: [SC.View, SC.View, SC.View] }); }
});
test(“removes all child views”, function() {
equals(view.childViews.length, 3, 'precond - has child views'); view.removeAllChildren(); equals(view.childViews.length, 0, 'removed all children');
});
test(“returns receiver”, function() {
equals(view.removeAllChildren(), view, 'receiver');
});
// .….….….….….….….….….….….….…… // removeFromParent() // module(“SC.View#removeFromParent”);
test(“removes view from parent view”, function() {
parent = SC.View.create({ childViews: [SC.View] }); child = parent.childViews[0]; ok(child.get('parentView'), 'precond - has parentView'); child.removeFromParent(); ok(!child.get('parentView'), 'no longer has parentView'); ok(parent.childViews.indexOf(child)<0, 'no longer in parent childViews');
});
test(“returns receiver”, function() {
equals(child.removeFromParent(), child, 'receiver');
});
test(“does nothing if not in parentView”, function() {
var callCount = 0; child = SC.View.create(); // monkey patch for testing... child.willRemoveFromParent = function() { callCount++; }; ok(!child.get('parentView'), 'precond - has no parent'); child.removeFromParent(); equals(callCount, 0, 'did not invoke callback');
});