// ========================================================================== // Project: SproutCore - JavaScript Application Framework // Copyright: ©2006-2011 Apple Inc. and contributors. // License: Licensed under MIT license (see license.js) // ========================================================================== /*global module test equals context ok same */

module(“SC.CoreView - Class Name Bindings”);

test(“should apply bound class names to the element”, function() {

var view = SC.View.create({
  classNameBindings: ['priority', 'isUrgent', 'isClassified:classified', 'canIgnore'],

  priority: 'high',
  isUrgent: true,
  isClassified: true,
  canIgnore: false
});

view.createLayer();
ok(view.$().hasClass('high'), "adds string values as class name");
ok(view.$().hasClass('is-urgent'), "adds true Boolean values by dasherizing");
ok(view.$().hasClass('classified'), "supports customizing class name for Boolean values");
ok(!view.$().hasClass('can-ignore'), "does not add false Boolean values as class");

});

test(“should add, remove, or change class names if changed after element is created”, function() {

var view = SC.View.create({
  classNameBindings: ['priority', 'isUrgent', 'isClassified:classified', 'canIgnore'],

  priority: 'high',
  isUrgent: true,
  isClassified: true,
  canIgnore: false
});

view.createLayer();

view.set('priority', 'orange');
view.set('isUrgent', false);
view.set('isClassified', false);
view.set('canIgnore', true);

ok(view.$().hasClass('orange'), "updates string values");
ok(!view.$().hasClass('high'), "removes old string value");

ok(!view.$().hasClass('is-urgent'), "removes dasherized class when changed from true to false");
ok(!view.$().hasClass('classified'), "removes customized class name when changed from true to false");
ok(view.$().hasClass('can-ignore'), "adds dasherized class when changed from false to true");

});

test(“should preserve class names applied via classNameBindings when view layer is updated”, function(){

var view = SC.View.create({
  classNameBindings: ['isUrgent', 'isClassified:classified'],
  isClassified: true,
  isUrgent: false
});
view.createLayer();
ok(!view.$().hasClass('can-ignore'), "does not add false Boolean values as class");
ok(view.$().hasClass('classified'), "supports customizing class name for Boolean values");
view.set('isClassified', false);
view.set('isUrgent', true);
ok(view.$().hasClass('is-urgent'), "adds dasherized class when changed from false to true");
ok(!view.$().hasClass('classified'), "removes customized class name when changed from true to false");
view.set('layerNeedsUpdate', YES);
view.updateLayer();
ok(view.$().hasClass('is-urgent'), "still has class when view display property is updated");
ok(!view.$().hasClass('classified'), "still does not have customized class when view display property is updated");

});