// ========================================================================== // 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 Q$ */

// note: need to test interaction with Validators here // possibly move Validator support to TextFieldView specifically. var pane, view0, view1, view2;

module(“SC.DateFieldView”, {

setup: function() {
  SC.RunLoop.begin();
  pane = SC.MainPane.create({
    childViews: [
    SC.DateFieldView.extend({
      hint: 'dd/mm/yyyy',
      value: SC.DateTime.create({ day: 1, month: 1, year: 2010})
    }),
    SC.DateFieldView.extend({
      hint: 'dd/mm/yyyy hh:mm AM/PM',
      value: SC.DateTime.create({ day: 1, month: 1, year: 2010, hour: 11, minute: 20 }),
      showTime: YES,
      isEnabled: NO
    }),
    SC.DateFieldView.extend({
      hint: 'hh:mm AM/PM',
      value: SC.DateTime.create({ hour: 11, minute: 20 }),
      showDate: NO,
      showTime: YES
    }),
    SC.DateFieldView.extend({
      formatDateTime: '%y-%m-%d %I:%M:%S',
      value: SC.DateTime.create({ day: 1, month: 1, year: 2010, hour: 11, minute: 20, second: 10 }),
      showTime: YES,
    })]
  });
  pane.append(); // make sure there is a layer...
  SC.RunLoop.end();

  view0 = pane.childViews[0];
  view1 = pane.childViews[1];
  view2 = pane.childViews[2];
  view3 = pane.childViews[3];
},

teardown: function() {
  pane.remove();
  pane.destroy();
  pane = view0 = view1 = view2 = null;
}

});

test(“renders an text field input tag with appropriate attributes”, function() {

equals(view0.get('fieldValue'), '01/01/2010', 'Field value should be equal - Date Only');
equals(view1.get('fieldValue'), '01/01/2010 11:20 AM', 'Field value should be equal - Date & Time');
equals(view2.get('fieldValue'), '11:20 AM', 'Field value should be equal - Time Only');
equals(view0.get('isEnabled'), YES, 'field enabled');
equals(view1.get('isEnabled'), NO, 'field not enabled');
var q = Q$('input', view0.get('layer'));
equals(q.attr('type'), 'text', 'should have type as text');
equals(q.attr('name'), view0.get('layerId'), 'should have name as view_layerid');

});

test(“isEnabled=NO should add disabled class”, function() {

SC.RunLoop.begin();
view0.set('isEnabled', NO);
SC.RunLoop.end();
ok(view0.$().hasClass('disabled'), 'should have disabled class');

});

test(“isEnabled=NO isEditable=NO should add disabled attribute”, function() {

SC.RunLoop.begin();
view0.set('isEnabled', NO);
view0.set('isEditable', NO);
SC.RunLoop.end();
ok(view0.$input().attr('disabled'), 'should have disabled attribute');
ok(view0.$input().attr('readOnly'), 'should have readOnly attribute');

});

test(“isEnabled=NO isEditable=YES should add disabled attribute”, function() {

SC.RunLoop.begin();
view0.set('isEnabled', NO);
view0.set('isEditable', YES);
SC.RunLoop.end();
ok(view0.$input().attr('disabled'), 'should have disabled attribute');
ok(!view0.$input().attr('readOnly'), 'should not have readOnly attribute');

});

test(“isEnabled=YES isEditable=NO should add readOnly attribute”, function() {

SC.RunLoop.begin();
view0.set('isEnabled', YES);
view0.set('isEditable', NO);
SC.RunLoop.end();
ok(!view0.$input().attr('disabled'), 'should not have disabled attribute');
ok(view0.$input().attr('readOnly'), 'should have readOnly attribute');

});

test(“isEnabled=YES isEditable=YES should not add disable or readOnly attribute”, function() {

SC.RunLoop.begin();
view0.set('isEnabled', YES);
view0.set('isEditable', YES);
SC.RunLoop.end();
ok(!view0.$input().attr('disabled'), 'should not have disabled attribute');
ok(!view0.$input().attr('readOnly'), 'should not have readOnly attribute');

});

test(“Verify the format property”, function () {

SC.run(function () {
  view0.set('showDate', true);
  view0.set('showTime', true);
  equals(view0.get('format'), view0.get('formatDateTime'), "The format should match");
  view0.set('formatDateTime', '%d-%m-%Y @ %I:%M %p');
  equals(view0.get('format'), '%d-%m-%Y @ %I:%M %p', "The format should match");

  view0.set('showTime', false);
  equals(view0.get('format'), view0.get('formatDate'), "The format should match");
  view0.set('formatDate', '%d-%m-%Y');
  equals(view0.get('format'), '%d-%m-%Y', "The format should match");

  view0.set('showDate', false);
  view0.set('showTime', true);
  equals(view0.get('format'), view0.get('formatTime'), "The format should match");
  view0.set('formatTime', '@ %I:%M %p');
  equals(view0.get('format'), '@ %I:%M %p', "The format should match");
});

});

test(“test insertText method”, function() {

// view1: dd/mm/yyyy
view1.set('value', view1.get('value').adjust({ month: 2 }));
equals(view1.get('fieldValue'), '01/02/2010 11:20 AM', 'PRELIM: Field value should be equal');

view1.insertText('3');
view1.insertText('1');
equals(view1.get('fieldValue'), '13/02/2010 11:20 AM', 'Field value should be equal');

view1.insertText('2');
equals(view1.get('fieldValue'), '12/02/2010 11:20 AM', 'Field value should be equal');
view1.insertText('0');
view1.insertText('2');
equals(view1.get('fieldValue'), '02/02/2010 11:20 AM', 'Field value should be equal');
view1.insertText('5');
view1.insertText('2');
equals(view1.get('fieldValue'), '25/02/2010 11:20 AM', 'Field value should be equal');

view1.insertText('/');
view1.insertText('2');
equals(view1.get('fieldValue'), '25/02/2010 11:20 AM', 'Field value should be equal');
view1.insertText('0');
view1.insertText('3');
equals(view1.get('fieldValue'), '25/03/2010 11:20 AM', 'Field value should be equal');
view1.insertText('9');
equals(view1.get('fieldValue'), '25/03/2010 11:20 AM', 'Field value should be equal');
view1.insertText('/');
view1.insertText('0');
equals(view1.get('fieldValue'), '25/03/2010 11:20 AM', 'Field value should be equal');
view1.insertText('0');
equals(view1.get('fieldValue'), '25/03/1000 11:20 AM', 'Field value should be equal');
view1.insertText('2');
view1.insertText('0');
view1.insertText('1');
view1.insertText('2');
equals(view1.get('fieldValue'), '25/03/2012 11:20 AM', 'Field value should be equal');
view1.insertText('/');
view1.insertText('0');
equals(view1.get('fieldValue'), '25/03/2012 10:20 AM', 'Field value should be equal');
view1.insertText('9');
equals(view1.get('fieldValue'), '25/03/2012 09:20 AM', 'Field value should be equal');
view1.insertText('9');
view1.insertText('9');
equals(view1.get('fieldValue'), '25/03/2012 09:20 AM', 'Field value should be equal');
view1.insertText('/');
view1.insertText('9');
equals(view1.get('fieldValue'), '25/03/2012 09:09 AM', 'Field value should be equal');
view1.insertText('9');
equals(view1.get('fieldValue'), '25/03/2012 09:09 AM', 'Field value should be equal');

// view3 %y-%m-%d %I:%M:%S
view3.set('activeSelection', 5);
view3.insertText('9');
equals(view3.get('fieldValue'), '10-01-01 11:20:09', 'Field value should be equal');
view3.insertText('8');
equals(view3.get('fieldValue'), '10-01-01 11:20:09', 'Field value should be equal');
view3.insertText('5');
view3.insertText('5');
equals(view3.get('fieldValue'), '10-01-01 11:20:55', 'Field value should be equal');

view3.set('activeSelection', 0);
view3.insertText('2');
view3.insertText('5');
equals(view3.get('fieldValue'), '25-01-01 11:20:55', 'Field value should be equal');
view3.insertText('0');
view3.insertText('0');
equals(view3.get('fieldValue'), '00-01-01 11:20:55', 'Field value should be equal');
view3.insertText('9');
equals(view3.get('fieldValue'), '09-01-01 11:20:55', 'Field value should be equal');
view3.insertText('9');
equals(view3.get('fieldValue'), '99-01-01 11:20:55', 'Field value should be equal');
view3.insertText('1');
view3.insertText('0');
view3.insertText('0');
equals(view3.get('fieldValue'), '00-01-01 11:20:55', 'Field value should be equal');

});