// ========================================================================== // Project: SproutCore - JavaScript Application Framework // Copyright: ©2006-2011 Strobe Inc. and contributors. // Portions ©2008-2011 Apple Inc. All rights reserved. // License: Licensed under MIT license (see license.js) // ==========================================================================

/*global module test equals context ok same same */

var context = null;

// .….….….….….….….….….….….….….….. // styles // module(“SC.RenderContext#styles”, {

setup: function() {
  context = SC.RenderContext() ;
}

});

test(“returns empty hash if no current styles”, function() {

same(context.styles(), {}, 'styles') ;

});

test(“styles(hash) replaces styles”, function() {

var styles = { foo: 'bar' };
equals(context.setStyle(styles), context, "returns receiver");
same(context.styles(), styles, 'Styles');

});

test(“clone on next retrieval if styles(foo) set with cloneOnModify=YES”, function() {

var styles = { foo: 'bar' };
context.setStyle(styles);

var result = context.styles();
ok(result !== styles, "styles is NOT same instance");
same(result, styles, "but styles are equivalent");

equals(result, context.styles(), "2nd retrieval is same instance");

});

test(“extracts styles from element on first retrieval”, function() {

var elem = document.createElement('div');
SC.$(elem).attr('style', 'color: black; height: 20px; border-top: 1px solid hotpink; -webkit-column-count: 3');
context = SC.RenderContext(elem);

var result = context.styles();

if(SC.browser.isIE){
  same(result, { color: 'black', height: '20px', borderTop: 'hotpink 1px solid', WebkitColumnCount: '3' }, 'extracted style. This is failing in IE8 because it return styles like cOLOR.');
}else{
  same(result, { color: 'black', height: '20px', borderTop: '1px solid hotpink', WebkitColumnCount: '3' }, 'extracted style. This is failing in IE8 because it return styles like cOLOR.');
}
equals(context.styles(), result, "should reuse same instance thereafter");

});

// .….….….….….….….….….….….….….….. // addStyle // module(“SC.RenderContext#addStyle”, {

setup: function() {
  context = SC.RenderContext().setStyle({ foo: 'foo' }) ;
}

});

test(“should add passed style name to value”, function() {

context.addStyle('bar', 'bar');
equals('bar', context.styles().bar, 'verify style name');

});

test(“should replace passed style name value”, function() {

context.addStyle('foo', 'bar');
equals('bar', context.styles().foo, 'verify style name');

});

test(“should return receiver”, function() {

equals(context, context.addStyle('foo', 'bar'));

});

test(“should create styles hash if needed”, function() {

context = SC.RenderContext();
equals(context._styles, null, 'precondition - has no styles');

context.addStyle('foo', 'bar');
equals('bar', context.styles().foo, 'has styles');

});

test(“should assign all styles if a hash is passed”, function() {

context.addStyle({ foo: 'bar', bar: 'bar' });
same(context.styles(), { foo: 'bar', bar: 'bar' }, 'has same styles');

});

test(“addStyle should remove properties that are part of combo properties”, function(){

SC.COMBO_STYLES = { foo: 'fooSub'.w() };
context.setStyle({ foo: 'foo', fooSub: 'bar' });
equals(context.styles().fooSub, 'bar', 'proper starting values');
context.addStyle('foo', 'bar');
equals(context.styles().foo, 'bar', 'foo has new value');
equals(context.styles().fooSub, undefined, 'fooSub has no value');

});