blossom
Version:
Modern, Cross-Platform Application Framework
122 lines (87 loc) • 3.6 kB
JavaScript
// ==========================================================================
// Project: SproutCore - JavaScript Application Framework
// Copyright: ©2006-2011 Strobe Inc. and contributors.
// portions copyright @2009 Apple Inc.
// License: Licensed under MIT license (see license.js)
// ==========================================================================
var view, content1, content2 ;
suite("SC.CollectionView.nowShowing", {
setup: function() {
content1 = "a b c".w();
// stub in collection view to verify that proper method are called
view = SC.CollectionView.create({
// updateContentRangeObserver
updateContentRangeObserver: CoreTest.stub('updateContentRangeObserver'),
// reload()
reloadCallCount: 0,
reloadIndexes: "not called",
reload: function(indexes) {
this.reloadIndexes = indexes ? indexes.frozenCopy() : indexes;
this.reloadCallCount++;
},
expectReload: function(indexes, callCount) {
if (indexes !== false) {
var pass = (indexes === null) ? (this.reloadIndexes === null) : indexes.isEqual(this.reloadIndexes);
if (!pass) {
indexes.isEqual(this.reloadIndexes);
}
ok(pass, 'should have called reload(%@), actual reload(%@)'.fmt(indexes, this.reloadIndexes));
}
if (callCount !== false) {
equals(this.reloadCallCount, callCount, 'reload() should be called X times');
}
},
// GENERAL SUPPORT
observer: CoreTest.stub('nowShowing observer').observes('nowShowing'),
reset: function() {
this.updateContentRangeObserver.reset();
this.reloadCallCount = 0 ;
this.reloadIndexes = 'not called';
this.observer.reset();
},
nextNowShowing: SC.IndexSet.create(0,3),
// override to reeturn whatever index set is in nextNowShowing property just
// for testing.
computeNowShowing: function() {
return this.nextNowShowing;
},
content: content1
});
// some observers will fire on creation because of the content. just
// ignore them
view.reset();
}
});
// ..........................................................
// GENERAL TESTS
//
test("nowShowing should reflect content on create", function() {
same(view.get('nowShowing'), view.nextNowShowing, 'should have now showing value');
});
test("if nowShowing changes but actual value stays the same, should do nothing", function() {
// trigger any observers
view.notifyPropertyChange('nowShowing');
view.observer.expect(1);
view.expectReload(false, 0);
view.updateContentRangeObserver.expect(0);
});
test("nowShowing changes to new index set with some overlap", function() {
view.nextNowShowing = SC.IndexSet.create(2,5);
view.notifyPropertyChange('nowShowing');
view.observer.expect(1);
// expect inverse of intersection
view.expectReload(SC.IndexSet.create(0,2).add(3,4), 1);
view.updateContentRangeObserver.expect(1);
});
test("nowShowing changes to new index set with no overlap", function() {
view.nextNowShowing = SC.IndexSet.create(10,3);
view.notifyPropertyChange('nowShowing');
view.observer.expect(1);
// union of both ranges
view.expectReload(SC.IndexSet.create(0,3).add(10,3), 1);
view.updateContentRangeObserver.expect(1);
});
// ..........................................................
// SPECIAL CASES
//
// Add any specific cases you find that break here