// ========================================================================== // Project: SproutCore - JavaScript Application Framework // Copyright: ©2006-2011 Strobe Inc. and contributors. // ©2008-2011 Apple Inc. All rights reserved. // License: Licensed under MIT license (see license.js) // ==========================================================================

/*global module, test, equals, ok */

var parentView;

/*

* SC.CoreView.UNRENDERED
* SC.CoreView.UNATTACHED
* SC.CoreView.ATTACHED_PARTIAL
* SC.CoreView.ATTACHED_SHOWING
* SC.CoreView.ATTACHED_SHOWN
* SC.CoreView.ATTACHED_HIDING
* SC.CoreView.ATTACHED_HIDDEN
* SC.CoreView.ATTACHED_HIDDEN_BY_PARENT
* SC.CoreView.ATTACHED_BUILDING_IN
* SC.CoreView.ATTACHED_BUILDING_OUT
* SC.CoreView.ATTACHED_BUILDING_OUT_BY_PARENT
*/

module(“SC.View.prototype.replaceAllChildren”, {

setup: function () {
  parentView = SC.View.create({
    childViews: ['a', 'b', SC.View],

    a: SC.View,
    b: SC.View
  });
},

teardown: function () {
  parentView.destroy();
  parentView = null;
}

});

test(“Replaces all children. UNRENDERED parent view.”, function () {

var childViews = parentView.get('childViews'),
  newChildViews = [SC.View.create(), SC.View.create()];

equals(childViews.get('length'), 3, "There are this many child views originally");

// Replace all children.
parentView.replaceAllChildren(newChildViews);

childViews = parentView.get('childViews');
equals(childViews.get('length'), 2, "There are this many child views after replaceAllChildren");

});

test(“Replaces all children. UNATTACHED parent view.”, function () {

var childViews = parentView.get('childViews'),
  newChildViews = [SC.View.create(), SC.View.create()],
  childView, jq;

// Render the parent view.
parentView.createLayer();

equals(childViews.get('length'), 3, "There are this many child views originally");

jq = parentView.$();
for (var i = 0, len = childViews.get('length'); i < len; i++) {
  childView = childViews.objectAt(i);

  ok(jq.find('#' + childView.get('layerId')).get('length') === 1, "The child view with layer id %@ exists in the parent view's layer".fmt(childView.get('layerId')));
}

// Replace all children.
parentView.replaceAllChildren(newChildViews);

childViews = parentView.get('childViews');
equals(childViews.get('length'), 2, "There are this many child views after replaceAllChildren");

jq = parentView.$();
for (i = 0, len = childViews.get('length'); i < len; i++) {
  childView = childViews.objectAt(i);

  ok(jq.find('#' + childView.get('layerId')).get('length') === 1, "The new child view with layer id %@ exists in the parent view's layer".fmt(childView.get('layerId')));
}

});

test(“Replaces all children. ATTACHED_SHOWN parent view.”, function () {

var childViews = parentView.get('childViews'),
  newChildViews = [SC.View.create(), SC.View.create()],
  childView, jq;

// Render the parent view and attach.
parentView.createLayer();
parentView._doAttach(document.body);

equals(childViews.get('length'), 3, "There are this many child views originally");

jq = parentView.$();
for (var i = 0, len = childViews.get('length'); i < len; i++) {
  childView = childViews.objectAt(i);

  ok(jq.find('#' + childView.get('layerId')).get('length') === 1, "The child view with layer id %@ exists in the parent view's layer".fmt(childView.get('layerId')));
}

// Replace all children.
parentView.replaceAllChildren(newChildViews);

childViews = parentView.get('childViews');
equals(childViews.get('length'), 2, "There are this many child views after replaceAllChildren");

jq = parentView.$();
for (i = 0, len = childViews.get('length'); i < len; i++) {
  childView = childViews.objectAt(i);

  ok(jq.find('#' + childView.get('layerId')).get('length') === 1, "The new child view with layer id %@ exists in the parent view's layer".fmt(childView.get('layerId')));
}

});

module(“SC.View.prototype.replaceAllChildren”, {

setup: function () {
  parentView = SC.View.create({
    childViews: ['a', 'b', SC.View],

    containerLayer: function () {
      return this.$('._wrapper')[0];
    }.property('layer').cacheable(),

    a: SC.View,
    b: SC.View,

    render: function (context) {
      context = context.begin().addClass('_wrapper');
      this.renderChildViews(context);
      context = context.end();
    }
  });
},

teardown: function () {
  parentView.destroy();
  parentView = null;
}

});

test(“Replaces all children. UNRENDERED parent view.”, function () {

var childViews = parentView.get('childViews'),
  newChildViews = [SC.View.create(), SC.View.create()];

equals(childViews.get('length'), 3, "There are this many child views originally");

// Replace all children.
parentView.replaceAllChildren(newChildViews);

childViews = parentView.get('childViews');
equals(childViews.get('length'), 2, "There are this many child views after replaceAllChildren");

});

test(“Replaces all children. UNATTACHED parent view.”, function () {

var childViews = parentView.get('childViews'),
  newChildViews = [SC.View.create(), SC.View.create()],
  childView, jq;

// Render the parent view.
parentView.createLayer();

equals(childViews.get('length'), 3, "There are this many child views originally");

jq = parentView.$('._wrapper');
for (var i = 0, len = childViews.get('length'); i < len; i++) {
  childView = childViews.objectAt(i);

  ok(jq.find('#' + childView.get('layerId')).get('length') === 1, "The child view with layer id %@ exists in the parent view's layer".fmt(childView.get('layerId')));
}

// Replace all children.
parentView.replaceAllChildren(newChildViews);

childViews = parentView.get('childViews');
equals(childViews.get('length'), 2, "There are this many child views after replaceAllChildren");

jq = parentView.$('._wrapper');
for (i = 0, len = childViews.get('length'); i < len; i++) {
  childView = childViews.objectAt(i);

  ok(jq.find('#' + childView.get('layerId')).get('length') === 1, "The new child view with layer id %@ exists in the parent view's layer".fmt(childView.get('layerId')));
}

});

test(“Replaces all children using containerLayer. ATTACHED_SHOWN parent view.”, function () {

var childViews = parentView.get('childViews'),
  newChildViews = [SC.View.create(), SC.View.create()],
  childView, jq;

// Render the parent view and attach.
parentView.createLayer();
parentView._doAttach(document.body);

equals(childViews.get('length'), 3, "There are this many child views originally");

jq = parentView.$('._wrapper');
for (var i = 0, len = childViews.get('length'); i < len; i++) {
  childView = childViews.objectAt(i);

  ok(jq.find('#' + childView.get('layerId')).get('length') === 1, "The child view with layer id %@ exists in the parent view's layer".fmt(childView.get('layerId')));
}

// Replace all children.
parentView.replaceAllChildren(newChildViews);

childViews = parentView.get('childViews');
equals(childViews.get('length'), 2, "There are this many child views after replaceAllChildren");

jq = parentView.$('._wrapper');
for (i = 0, len = childViews.get('length'); i < len; i++) {
  childView = childViews.objectAt(i);

  ok(jq.find('#' + childView.get('layerId')).get('length') === 1, "The new child view with layer id %@ exists in the parent view's layer".fmt(childView.get('layerId')));
}

});