// Tests: // - defaultTitle // - title comes from selected item // - value changing changes selected item var View, pane, obj;
module(“SelectView - Selected Item”, {
setup: function() { pane = SC.Pane.create(); obj = SC.Object.create({title: 'Lost', value: 'Found'}); View = SC.SelectView.extend({ items: [ {title: 'Hello', value: 'hi'}, {title: 'Yo', value: 'Jimbo'}, obj, {title: 'The Greate American Flee Market', value: 'aFilm'} ], itemTitleKey: 'title', itemValueKey: 'value' }); }, teardown: function() { }
});
function createView(settings) {
var view = View.create(settings || {}); pane.appendChild(view); return view;
}
test(“defaultTitle used when no item is selected”, function() {
SC.RunLoop.begin(); var view = createView({ defaultTitle: "Bonjour" }); SC.RunLoop.end(); equals(view.get('title'), "Bonjour", "Title is the default title");
});
test(“defaultTitle is NOT used when an item IS selected at startup”, function() {
SC.RunLoop.begin(); var view = createView({ defaultTitle: "Bonjour", value: 'Jimbo' }); SC.RunLoop.end(); equals(view.get('title'), "Yo", "Title comes from selected item");
});
test(“title changes when selected item changes”, function() {
SC.RunLoop.begin(); var view = createView({ defaultTitle: "Bonjour", value: 'Jimbo' }); SC.RunLoop.end(); equals(view.get('title'), "Yo", "Initial title comes from selected item"); SC.RunLoop.begin(); // the actual item is an SC.Object. However, MenuPane's selected item will not be // the original, so we do in fact need to test that it works even when the "selected // item" is not the exact same object. view.set('selectedItem', {title: 'Lost', value: 'Found'}); SC.RunLoop.end(); equals(view.get('title'), "Lost", "Title changed");
});
test(“title reverts to defaultTitle when item is deselected”, function() {
SC.RunLoop.begin(); var view = createView({ defaultTitle: "Bonjour" }); SC.RunLoop.end(); equals(view.get('title'), "Bonjour", "Initial title comes from default title"); SC.RunLoop.begin(); view.set('selectedItem', {title: 'Lost', value: 'Found'}); SC.RunLoop.end(); equals(view.get('title'), "Lost", "Title changed"); // now the real test: changing back SC.RunLoop.begin(); view.set('selectedItem', null); SC.RunLoop.end(); equals(view.get('title'), "Bonjour", "Back to defaultTitle");
});
test(“changing value changes the selected item”, function() {
SC.RunLoop.begin(); var view = createView({ defaultTitle: "Bonjour" }); SC.RunLoop.end(); equals(view.get('selectedItem'), null, "Selected item starts at null"); SC.RunLoop.begin(); view.set('value', "Jimbo"); SC.RunLoop.end(); ok(view.get('selectedItem') !== null, "Selected item is no longer null"); equals(view.get('title'), "Yo", "Title has changed");
});
test(“changing value changes the selected item when itemValueKey is null”, function() {
SC.RunLoop.begin(); var view = createView({ defaultTitle: "Bonjour", itemValueKey: null }); SC.RunLoop.end(); equals(view.get('selectedItem'), null, "Selected item starts at null"); SC.RunLoop.begin(); view.set('value', obj); SC.RunLoop.end(); ok(view.get('selectedItem') !== null, "Selected item is no longer null"); equals(view.get('title'), "Lost", "Title has changed");
});
test(“changing value to a value not in the list deselects”, function() {
SC.RunLoop.begin(); var view = createView({ defaultTitle: "Bonjour" }); SC.RunLoop.end(); equals(view.get('selectedItem'), null, "Selected item starts at null"); SC.RunLoop.begin(); view.set('value', "Jimbo"); SC.RunLoop.end(); ok(view.get('selectedItem') !== null, "Selected item is no longer null"); equals(view.get('title'), "Yo", "Title has changed"); SC.RunLoop.begin(); view.set('value', "NOT THE ITEM YOU ARE LOOKING FOR"); SC.RunLoop.end(); equals(view.get('selectedItem'), null, "No item selected anymore"); equals(view.get('title'), "Bonjour", "Back to default title");
});
test(“title changes when an SC
.Object item's title changes”, function() {
SC.RunLoop.begin(); var view = createView({ value: "Found" }); SC.RunLoop.end(); equals(view.get('title'), "Lost", "Title starts at that of selected item"); SC.RunLoop.begin(); obj.set('title', "Found"); SC.RunLoop.end(); equals(view.get('title'), "Found", "Title has changed");
});
test(“value changes when an SC
.Object item's value changes”, function() {
SC.RunLoop.begin(); var view = createView({ value: "Found" }); SC.RunLoop.end(); equals(view.get('value'), "Found", "Title starts at that of selected item"); SC.RunLoop.begin(); obj.set('value', "Yo"); SC.RunLoop.end(); equals(view.get('value'), "Yo", "Title has changed");
});
test(“value does not change when an SC
.Object item's value changes when that item is not selected”, function() {
SC.RunLoop.begin(); var view = createView({ value: "Found" }); SC.RunLoop.end(); equals(view.get('value'), "Found", "Title starts at that of selected item"); SC.RunLoop.begin(); obj.set('value', "Yo"); SC.RunLoop.end(); equals(view.get('value'), "Yo", "Title has changed"); SC.RunLoop.begin(); view.set('value', "Jimbo"); SC.RunLoop.end(); equals(view.get('value'), "Jimbo", "Value changed"); equals(view.get('title'), "Yo", "Title changed"); SC.RunLoop.begin(); obj.set('value', "Something else"); SC.RunLoop.end(); equals(view.get('value'), "Jimbo", "Value has not changed"); equals(view.get('title'), "Yo", "Title has not changed");
});
test(“title changes when items are changed”, function() {
SC.RunLoop.begin(); var view = createView({ value: "Found" }); SC.RunLoop.end(); equals(view.get('title'), "Lost", "Title starts at that of selected item"); SC.RunLoop.begin(); view.set('items', [{title: 'Finally found', value: 'Found'}]); SC.RunLoop.end(); equals(view.get('title'), "Finally found", "Title changed"); SC.RunLoop.begin(); view.set('items', [{title: 'Hello', value: 'hi'}]); SC.RunLoop.end(); equals(view.get('title'), "", "Title is empty"); equals(view.get('value'), "Found", "Value has not changed");
});