/*  
 * The Loom framework
 * (c) Extrema Sistemas de Informacion
 *
 * Distributed under the Apache License, Version 2.0
 */

/**
 * extensions around unittest.js
 * @author icoloma
 */
Test.Unit.Testcase.addMethods({
  
  assertEmpty: function(value, message) {
    this.assertEqual(0, value.length, message || "Expected empty collection, but found " + value);
  },
  
  assertPass: function(element, value) {
    element.value = value;
    element.validate();
    var errorElement = element.getErrorElement();
    this.assertEqual('', errorElement.innerHTML, 'value "#{value}" for element #{name} should validate fine'.interpolate({ name: element.name, value: value }));
    this.assertNotVisible(errorElement);
    
    // check error css class has been removed from both element and container label 
    this.assert(!element.hasClassName("error"));
    var label = element.up('label');
    this.assert(!label || !label.hasClassName("error"));
  },
  
  assertFail: function(element, value, message) { 
    element.value = value;
    element.validate();
    var errorElement = element.getErrorElement();
    this.assertVisible(errorElement.visible());
    if (message) {
      this.assertEqual(message, errorElement.innerHTML, 'validation error message for value "#{value}" on element #{name}'.interpolate({ name: element.name, value: value }));
    }
    
    // check error css class has been added to both element and container label 
    this.assert(element.hasClassName("error"));
    var label = element.up('label');
    this.assert(!label || label.hasClassName("error"), 'Error class has not been added to label of element ' + element.name + " for value " + value);
  },
  
  assertDateEquals: function(expected, actual, message) {
	  this.assertEqual(expected.getTime(), actual.getTime(), message || 
			  'assertDateEquals failed. Expected="' + expected + '", actual="' + actual + '"');
  },
  
  convertFormToVars: function() {
    var _form = $('form');
    _form.bindValidations();
    
    // set all form fields as global variables
    $$('input', 'select', 'textarea').each(function(element) {
        window['_' + element.name.gsub('mortgage.', '')] = element;
    });
  }
  
});

var DummyEvent = Class.create({
  stop: function() {
    this.stopped = true;
  }
});

// true if inside internet explorer
var ie = Prototype.Browser.IE;