// ========================================================================== // 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) // ========================================================================== module(“SC.TemplateView”, {
setup: function() { // var view = SC.TemplateView.create(); }, teardown: function() { }
});
test(“template view should call the function of the associated template”, function() {
var view; view = SC.TemplateView.create({ templateName: 'test_template', templates: SC.Object.create({ test_template: function(dataSource) { return "<h1 id='twas-called'>template was called</h1>"; } }) }); view.createLayer(); ok(view.$('#twas-called').length, "the named template was called");
});
test(“template view should call the function of the associated template with itself as the context”, function() {
var view; view = SC.TemplateView.create({ templateName: 'test_template', personName: "Tom DAAAALE", templates: SC.Object.create({ test_template: function(dataSource) { return "<h1 id='twas-called'>template was called for " + dataSource.get('personName') + "</h1>"; } }) }); view.createLayer(); equals("template was called for Tom DAAAALE", view.$('#twas-called').text(), "the named template was called with the view as the data source");
});
test(“template view defaults to a noop template”, function() {
var view; view = SC.TemplateView.create({}); view.createLayer(); equals(view.$().html(), '', "view div should be empty");
});
test(“template views return YES to mouseDown if there is a mouseUp method”, function() {
var view = SC.TemplateView.create(); ok(!view.tryToPerform('mouseDown'), "view returns NO if there is no mouseUp method"); view = SC.TemplateView.create({ mouseUp: function() { } }); ok(view.tryToPerform('mouseDown'), "view returns YES if we add a mouseUp method");
});
test(“should add a 'sc-hidden' class to a template view when isVisible is true”, function() {
var view = SC.TemplateView.create(); ok(view.get('isVisible'), "precond - views default to being visible"); view.set('template', function() { return "foo"; }); view.createLayer()._doAttach(document.body); ok(!view.$().hasClass('sc-hidden'), "does not have hidden class applied"); SC.run(function() { view.set('isVisible', NO); }); ok(view.$().hasClass('sc-hidden'), "adds hidden class when isVisible changes to NO"); SC.run(function() { view.set('isVisible', YES); }); ok(!view.$().hasClass('sc-hidden'), "removes hidden class when isVisible changes to YES");
});
test(“should add a 'sc-hidden' class to template views if isVisible is false before their layer is created”, function() {
var view = SC.TemplateView.create({ isVisible: false }); ok(!view.get('isVisible'), "precond - view is not visible"); view.set('template', function() { return "foo"; }); view.createLayer()._doAttach(document.body); ok(view.$().hasClass('sc-hidden'), "adds hidden class when rendering"); $(document.body).append(view.$()); ok(!view.$().is(':visible'), "should be hidden when hidden class is added"); view.$().remove(); SC.run(function() { view.set('isVisible', YES); }); ok(!view.$().hasClass('sc-hidden'), "removes hidden class when isVisible changes");
});
test(“should return an empty rect as its frame if no layer exists”, function() {
var view = SC.TemplateView.create({ template: function() { return "foo"; } }); var f = view.get('frame'); ok(f, "returns a frame object"); equals(f.width, 0, "returns 0 width"); equals(f.height, 0, "returns 0 height");
});
test(“should invalidate frame cache when layer is created”, function() {
var pane = SC.MainPane.create().append(); var view = SC.TemplateView.create({ template: function() { return "foo"; } }); var f = view.get('frame'); ok(f, "precond - returns a frame object"); equals(f.width, 0, "returns zero width because there is no layer"); pane.appendChild(view); f = view.get('frame'); ok(f, "returns frame object"); equals(f.width, view.$().width(), "returns non-zero width"); pane.remove();
});
test(“should invalidate frame cache when appended to document”, function() {
var pane = SC.MainPane.create(); var view = SC.TemplateView.create({ template: function() { return "foo"; } }); pane.appendChild(view); var f = view.get('frame'); ok(f, "precond - returns a frame object"); equals(f.width, 0, "returns zero width because there is no layer"); pane.append(); f = view.get('frame'); ok(f, "returns frame object"); equals(f.width, view.$().width(), "returns non-zero width"); pane.remove();
});