// ==========================================================================
// Project: SproutCore - JavaScript Application Framework
// Copyright: ©2006-2011 Strobe Inc. and contributors.
// portions copyright @2011 Apple Inc.
// License: Licensed under MIT license (see license.js)
// ==========================================================================
/*global module test htmlbody ok equals same stop start */
var pane;
(function() {
var iconURL= sc_static('sc-icon-info-16.png');
pane = SC.ControlTestPane.design()
.add("3_empty", SC.SegmentedView, {
items: [ '', '' , ''],
layout: { height: 25 }
})
.add("3_empty,icon", SC.SegmentedView, {
items: [
{ value: "", icon: iconURL },
{ value: "", icon: iconURL },
{ value: "", icon: iconURL }],
itemTitleKey: 'value',
itemValueKey: 'value',
itemIconKey: 'icon',
layout: { height: 25 }
})
.add("3_items,1_sel", SC.SegmentedView, {
items: "Item1 Item2 Item3".w(),
value: "Item2",
layout: { height: 25 }
})
.add("2_items,toolTip", SC.SegmentedView, {
items: [
{ value: "title1", toolTip: "this is title1's tip" },
{ value: "title2", toolTip: "this is title2's tip" }],
itemTitleKey: 'value',
itemValueKey: 'value',
itemToolTipKey: 'toolTip',
layout: { height: 25 }
})
.add("3_items,1_sel,disabled", SC.SegmentedView, {
items: "Item1 Item2 Item3".w(),
value: "Item2",
isEnabled: NO,
layout: { height: 25 }
})
.add("3_items,2_sel,1_disabled", SC.SegmentedView, {
items: [
{ value: "Item1" },
{ value: "Item2", isEnabled: false },
{ value: "Item3" }],
itemTitleKey: 'value',
itemValueKey: 'value',
itemIsEnabledKey: 'isEnabled',
value: ["Item1","Item2"],
layout: { height: 25 }
})
.add("3_items,icon,2_sel", SC.SegmentedView, {
items: [
{ value: "Item1", icon: iconURL },
{ value: "Item2", icon: iconURL },
{ value: "Item3", icon: iconURL }],
itemTitleKey: 'value',
itemValueKey: 'value',
itemIconKey: 'icon',
value: "Item1 Item3".w(),
allowsEmptySelection: NO,
layout: { height: 25 }
})
.add("3_items,2_sel,disabled", SC.SegmentedView, {
items: [
{ value: "Item1", icon: iconURL },
{ value: "Item2", icon: iconURL },
{ value: "Item3", icon: iconURL }],
itemTitleKey: 'value',
itemValueKey: 'value',
itemIconKey: 'icon',
isEnabled: NO,
value: "Item1 Item3".w(),
layout: { height: 25 }
})
.add("3_items,1_sel,emptySel", SC.SegmentedView, {
items: ["Item1", "Very Long Item", "Item 3"],
value: "Very Long Item",
allowsEmptySelection: YES,
layout: { height: 25 }
})
.add("3_items,2_sel,emptySel", SC.SegmentedView, {
items: ["Item1", "Very Long Item", "Item 3"],
value: "Item1 Item3".w(),
allowsEmptySelection: YES,
layout: { height: 25 }
})
.add("3_items,1_sel,multipleSel", SC.SegmentedView, {
items: "Item1 Item2 Item3".w(),
value: "Item2",
allowsMultipleSelection: YES,
layout: { height: 25 }
})
.add("3_items,2_sel,multipleSel", SC.SegmentedView, {
items: "Item1 Item2 Item3".w(),
value: "Item1 Item3".w(),
allowsMultipleSelection: YES,
layout: { height: 25 }
})
.add("3_items,1_sel,emptySel,multiSel", SC.SegmentedView, {
items: "Item1 Item2 Item3".w(),
value: "Item2",
allowsEmptySelection: YES,
allowsMultipleSelection: YES,
layout: { height: 25 }
})
.add("3_items,2_sel,emptySel,multiSel", SC.SegmentedView, {
items: "Item1 Item2 Item3".w(),
value: "Item1 Item3".w(),
allowsEmptySelection: YES,
allowsMultipleSelection: YES,
layout: { height: 25 }
})
.add("3_items,leftAligned", SC.SegmentedView, {
items: "Item1 Item2 Item3".w(),
align: SC.ALIGN_LEFT,
layout: { height: 25 }
})
.add("3_items,rightAligned", SC.SegmentedView, {
items: "Item1 Item2 Item3".w(),
align: SC.ALIGN_RIGHT,
layout: { height: 25 }
})
.add("3_items,widths", SC.SegmentedView, {
items: [
SC.Object.create({ value: "A", width: 70 }),
SC.Object.create({ value: "B", width: 70 }),
SC.Object.create({ value: "C", width: 70 })],
itemTitleKey: 'value',
itemValueKey: 'value',
itemWidthKey: 'width',
layout: { height: 25 }
})
.add("5_items,widths,overflow", SC.SegmentedView, {
items: [
{ value: "A", width: 70 },
{ value: "B", width: 70 },
{ value: "C", width: 70 },
{ value: "D", width: 70 },
{ value: "E", width: 70 }],
itemTitleKey: 'value',
itemValueKey: 'value',
itemWidthKey: 'width',
layout: { height: 25 }
})
.add("5_items,1_sel,widths,overflow", SC.SegmentedView, {
items: [
{ value: "A", width: 70 },
{ value: "B", width: 70 },
{ value: "C", width: 70 },
{ value: "D", width: 70 },
{ value: "E", width: 70 }],
itemTitleKey: 'value',
itemValueKey: 'value',
itemWidthKey: 'width',
value: "E",
layout: { height: 25 }
})
.add("aria-role_tab,tablist", SC.SegmentedView, {
items: [
{title: "Item 1"},
{title: "Item 2"},
{title: "Item 3"}
],
itemTitleKey: "title",
layout: { height: 25 }
})
.add("aria-labelledby", SC.SegmentedView, {
items: [
{title: "Item 1"},
{title: "Item 2"},
{title: "Item 3"}
],
itemTitleKey: "title",
layout: { height: 25 }
});
pane.show(); // add a test to show the test pane
// ..........................................................
// TEST VIEWS
//
module('SC.SegmentedView ui', {
setup: function(){
htmlbody('');
pane.standardSetup().setup();
},
teardown: function(){
pane.standardSetup().teardown();
clearHtmlbody();
}
});
test("Check that all segmentedViews are visible", function() {
ok(pane.view('3_empty').get('isVisibleInWindow'), '3_empty.isVisibleInWindow should be YES');
ok(pane.view('3_empty,icon').get('isVisibleInWindow'), '3_empty,icon.isVisibleInWindow should be YES');
ok(pane.view('3_items,1_sel').get('isVisibleInWindow'), '3_items,1_sel.isVisibleInWindow should be YES');
ok(pane.view('2_items,toolTip').get('isVisibleInWindow'), '2_items,toolTip.isVisibleInWindow should be YES');
ok(pane.view('3_items,1_sel,disabled').get('isVisibleInWindow'), '3_items,1_sel,disabled.isVisibleInWindow should be YES');
ok(pane.view('3_items,2_sel,disabled').get('isVisibleInWindow'), '3_items,2_sel,disabled.isVisibleInWindow should be YES');
ok(pane.view('3_items,2_sel,1_disabled').get('isVisibleInWindow'), '3_items,2_sel,1_disabled.isVisibleInWindow should be YES');
ok(pane.view('3_items,icon,2_sel').get('isVisibleInWindow'), '3_items,icon,2_sel.isVisibleInWindow should be YES');
ok(pane.view('3_items,1_sel,emptySel').get('isVisibleInWindow'), '3_items,1 sel,emptySel.isVisibleInWindow should be YES');
ok(pane.view('3_items,2_sel,emptySel').get('isVisibleInWindow'), '3_items,2 sel,emptySel.isVisibleInWindow should be YES');
ok(pane.view('3_items,1_sel,multipleSel').get('isVisibleInWindow'), '3_items,1_sel,multipleSel.isVisibleInWindow should be YES');
ok(pane.view('3_items,2_sel,multipleSel').get('isVisibleInWindow'), '3_items,2_sel,multipleSel.isVisibleInWindow should be YES');
ok(pane.view('3_items,1_sel,emptySel,multiSel').get('isVisibleInWindow'), '3_items,1_sel,emptySel,multiSel.isVisibleInWindow should be YES');
ok(pane.view('3_items,2_sel,emptySel,multiSel').get('isVisibleInWindow'), '3_items,2_sel,emptySel,multiSel.isVisibleInWindow should be YES');
ok(pane.view('3_items,leftAligned').get('isVisibleInWindow'), '3_items,leftAligned.isVisibleInWindow should be YES');
ok(pane.view('3_items,rightAligned').get('isVisibleInWindow'), '3_items,rightAligned.isVisibleInWindow should be YES');
ok(pane.view('aria-role_tab,tablist').get('isVisibleInWindow'), 'aria-role_tab,tablist.isVisibleInWindow should be YES');
ok(pane.view('aria-labelledby').get('isVisibleInWindow'), 'aria-labelledby.isVisibleInWindow should be YES');
});
test("Check that all segments have the right classes set", function() {
var viewElem=pane.view('3_empty').$();
var segments=pane.view('3_empty').$('.sc-segment-view');
equals(segments.length, 4, 'precond - segmented view should have 4 segment elements (including overflow)');
ok(viewElem.hasClass('sc-view'), '3_empty.hasClass(sc-view) should be YES');
ok(viewElem.hasClass('sc-segmented-view'), '3_empty.hasClass(sc-segmented-view) should be YES');
for (var i=0, seglen=segments.length - 1; i=0), 'first segment has the right classname assigned.');
}
if(i===seglen-1){
ok((seg.className.indexOf('sc-last-segment')>=0), 'last segment has the right classname assigned.');
}
ok((seg.childNodes[3].className.indexOf('sc-button-label')>=0), 'segment '+i+' should have a label.');
if(i !== 0 && i < seglen-1) {
ok((seg.className.indexOf('sc-middle-segment')>=0), 'middle segments have the right classname assigned.');
}
}
viewElem=pane.view('3_items,1_sel,disabled').$();
ok(viewElem.hasClass('disabled'), '3_items,1_sel,disabled should have the disabled class set');
viewElem=pane.view('3_items,2_sel,disabled').$();
ok(viewElem.hasClass('disabled'), '3_items,2_sel,disabled should have the disabled class set');
seg=pane.view('3_items,2_sel,1_disabled').$('.sc-segment-view')[1];
ok($(seg).hasClass('disabled'), '3_items,2_sel,1_disabled should have the disabled class set on the middle segment');
});
test("Check that all segments have the right classes set (with icons)", function() {
var viewElem=pane.view('3_empty,icon').$();
var segments=pane.view('3_empty,icon').$('.sc-segment-view');
equals(segments.length, 4, 'precond - segmented view should have 4 segment elements (including overflow)');
ok(viewElem.hasClass('sc-view'), '3_empty.hasClass(sc-view) should be YES');
ok(viewElem.hasClass('sc-segmented-view'), '3_empty.hasClass(sc-segmented-view) should be YES');
for (var i=0, seglen=segments.length - 1; i=0), 'first segment has the right classname assigned.');
}
if(i==seglen-1){
ok((seg.className.indexOf('sc-last-segment')>=0), 'last segment has the right classname assigned.');
}
ok((seg.childNodes[3].className.indexOf('sc-button-label')>=0), 'segment '+i+' should have a label.');
ok((seg.childNodes[3].childNodes[0].src.length>0), 'segment '+i+' should have an icon.');
if(i!==0 && i!=seglen-1){
ok((seg.className.indexOf('sc-middle-segment')>=0), 'middle segments have the right classname assigned.');
}
}
viewElem=pane.view('3_items,2_sel,disabled').$();
ok(viewElem.hasClass('disabled'), '3_items,2_sel,disabled should have the disabled class set');
});
test("No value set", function() {
var segments=pane.view('3_empty').$('.sc-segment-view');
// allow for a render to happen
SC.RunLoop.begin().end();
equals(segments.length, 4, 'precond - segmented view should have 4 segment elements (including overflow)');
for (var i=0, ilen=segments.length; i