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

// These utility methods are included from the SproutCore's foundation to // make it easier write unit tests. They only install themselves if a method // has not already been defined.

if (!String.prototype.camelize) {

String.prototype.camelize = function camelize() {
  var ret = this.replace(SC.STRING_TITLEIZE_REGEXP, 
    function(str,separater,character) { 
      return (character) ? character.toUpperCase() : '' ;
    }) ;
  var first = ret.charAt(0), lower = first.toLowerCase() ;
  return (first !== lower) ? (lower + ret.slice(1)) : ret ;
};

}

if (!String.prototype.trim) {

String.prototype.trim = function trim() {
  return this.replace(/^\s+|\s+$/g,"");
} ;

}

if (!String.prototype.fmt) {

String.prototype.fmt = function fmt() {
  // first, replace any ORDERED replacements.
  var args = arguments;
  var idx  = 0; // the current index for non-numerical replacements
  return this.replace(/%@([0-9]+)?/g, function(s, argIndex) {
    argIndex = (argIndex) ? parseInt(argIndex,0)-1 : idx++ ;
    s =args[argIndex];
    return ((s===null) ? '(null)' : (s===undefined) ? '' : s).toString(); 
  }) ;
} ;

}

if (!Array.prototype.uniq) {

Array.prototype.uniq = function uniq() {
  var ret = [], len = this.length, item, idx ;
  for(idx=0;idx<len;idx++) {
    item = this[idx];
    if (ret.indexOf(item) < 0) ret.push(item);
  }
  return ret ;
};

}

if (!String.prototype.w) {

String.prototype.w = function w() { 
  var ary = [], ary2 = this.split(' '), len = ary2.length ;
  for (var idx=0; idx<len; ++idx) {
    var str = ary2[idx] ;
    if (str.length !== 0) ary.push(str) ; // skip empty strings
  }
  return ary ;
};

}