text: /*
   * Utilities: A classic collection of JavaScript utilities
   * Copyright 2112 Matthew Eernisse (mde@fleegix.org)
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *         http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   *
  */
  
  var inflection = require('../lib/inflection')
    , assert = require('assert')
    , esInflections
    , sInflections
    , iesInflections
    , vesInflections
    , icesInflections
    , renInflections
    , oesInflections
    , iInflections
    , genInflections
    , irregularInflections
    , noInflections
    , tests;
  
  /**
   * Most test inflections are from Ruby on Rails:
   *   https://github.com/rails/rails/blob/master/activesupport/test/inflector_test_cases.rb
   *
   * Ruby on Rails is MIT licensed: http://www.opensource.org/licenses/MIT
  */
  esInflections = [
      ["search", "searches"]
    , ["switch", "switches"]
    , ["fix", "fixes"]
    , ["box", "boxes"]
    , ["process", "processes"]
    , ["address", "addresses"]
    , ["wish", "wishes"]
    , ["status", "statuses"]
    , ["alias", "aliases"]
    , ["basis", "bases"]
    , ["diagnosis", "diagnoses"]
    , ["bus", "buses"]
  ];
  
  sInflections = [
      ["stack", "stacks"]
    , ["shoe", "shoes"]
    , ["status_code", "status_codes"]
    , ["case", "cases"]
    , ["edge", "edges"]
    , ["archive", "archives"]
    , ["experience", "experiences"]
    , ["day", "days"]
    , ["comment", "comments"]
    , ["foobar", "foobars"]
    , ["newsletter", "newsletters"]
    , ["old_news", "old_news"]
    , ["perspective", "perspectives"]
    , ["diagnosis_a", "diagnosis_as"]
    , ["horse", "horses"]
    , ["prize", "prizes"]
  ];
  
  iesInflections = [
      ["category", "categories"]
    , ["query", "queries"]
    , ["ability", "abilities"]
    , ["agency", "agencies"]
  ];
  
  vesInflections = [
      ["wife", "wives"]
    , ["safe", "saves"]
    , ["half", "halves"]
    , ["elf", "elves"]
    , ["dwarf", "dwarves"]
  ];
  
  icesInflections = [
      ["index", "indices"]
    , ["vertex", "vertices"]
    , ["matrix", "matrices"]
  ];
  
  renInflections = [
      ["node_child", "node_children"]
    , ["child", "children"]
  ];
  
  oesInflections = [
      ["buffalo", "buffaloes"]
    , ["tomato", "tomatoes"]
  ];
  
  iInflections = [
      ["octopus", "octopi"]
    , ["virus", "viri"]
  ];
  
  genInflections = [
      ["salesperson", "salespeople"]
    , ["person", "people"]
    , ["spokesman", "spokesmen"]
    , ["man", "men"]
    , ["woman", "women"]
  ];
  
  irregularInflections = [
      ["datum", "data"]
    , ["medium", "media"]
    , ["ox", "oxen"]
    , ["cow", "kine"]
    , ["mouse", "mice"]
    , ["louse", "lice"]
    , ["axis", "axes"]
    , ["testis", "testes"]
    , ["crisis", "crises"]
    , ["analysis", "analyses"]
    , ["quiz", "quizzes"]
  ];
  
  noInflections = [
      ["fish", "fish"]
    , ["news", "news"]
    , ["series", "series"]
    , ["species", "species"]
    , ["rice", "rice"]
    , ["information", "information"]
    , ["equipment", "equipment"]
  ];
  
  tests = {
  
    'test es plural words for inflection': function () {
      var i = esInflections.length
        , value;
  
      while (--i >= 0) {
        value = esInflections[i];
  
        assert.equal(value[1], inflection.pluralize(value[0]))
      }
    }
  
  , 'test es singular words for inflection': function () {
      var i = esInflections.length
        , value;
  
      while (--i >= 0) {
        value = esInflections[i];
  
        assert.equal(value[0], inflection.singularize(value[1]))
      }
    }
  
  , 'test s plural words for inflection': function () {
      var i = sInflections.length
        , value;
  
      while (--i >= 0) {
        value = sInflections[i];
  
        assert.equal(value[1], inflection.pluralize(value[0]))
      }
    }
  
  , 'test s singular words for inflection': function () {
      var i = sInflections.length
        , value;
  
      while (--i >= 0) {
        value = sInflections[i];
  
        assert.equal(value[0], inflection.singularize(value[1]))
      }
    }
  
  , 'test ies plural words for inflection': function () {
      var i = iesInflections.length
        , value;
  
      while (--i >= 0) {
        value = iesInflections[i];
  
        assert.equal(value[1], inflection.pluralize(value[0]))
      }
    }
  
  , 'test ies singular words for inflection': function () {
      var i = iesInflections.length
        , value;
  
      while (--i >= 0) {
        value = iesInflections[i];
  
        assert.equal(value[0], inflection.singularize(value[1]))
      }
    }
  
  , 'test ves plural words for inflection': function () {
      var i = vesInflections.length
        , value;
  
      while (--i >= 0) {
        value = vesInflections[i];
  
        assert.equal(value[1], inflection.pluralize(value[0]))
      }
    }
  
  , 'test ves singular words for inflection': function () {
      var i = vesInflections.length
        , value;
  
      while (--i >= 0) {
        value = vesInflections[i];
  
        assert.equal(value[0], inflection.singularize(value[1]))
      }
    }
  
  , 'test ices plural words for inflection': function () {
      var i = icesInflections.length
        , value;
  
      while (--i >= 0) {
        value = icesInflections[i];
  
        assert.equal(value[1], inflection.pluralize(value[0]))
      }
    }
  
  , 'test ices singular words for inflection': function () {
      var i = icesInflections.length
        , value;
  
      while (--i >= 0) {
        value = icesInflections[i];
  
        assert.equal(value[0], inflection.singularize(value[1]))
      }
    }
  
  , 'test ren plural words for inflection': function () {
      var i = renInflections.length
        , value;
  
      while (--i >= 0) {
        value = renInflections[i];
  
        assert.equal(value[1], inflection.pluralize(value[0]))
      }
    }
  
  , 'test ren singular words for inflection': function () {
      var i = renInflections.length
        , value;
  
      while (--i >= 0) {
        value = renInflections[i];
  
        assert.equal(value[0], inflection.singularize(value[1]))
      }
    }
  
  , 'test oes plural words for inflection': function () {
      var i = oesInflections.length
        , value;
  
      while (--i >= 0) {
        value = oesInflections[i];
  
        assert.equal(value[1], inflection.pluralize(value[0]))
      }
    }
  
  , 'test oes singular words for inflection': function () {
      var i = oesInflections.length
        , value;
  
      while (--i >= 0) {
        value = oesInflections[i];
  
        assert.equal(value[0], inflection.singularize(value[1]))
      }
    }
  
  , 'test i plural words for inflection': function () {
      var i = iInflections.length
        , value;
  
      while (--i >= 0) {
        value = iInflections[i];
  
        assert.equal(value[1], inflection.pluralize(value[0]))
      }
    }
  
  , 'test i singular words for inflection': function () {
      var i = iInflections.length
        , value;
  
      while (--i >= 0) {
        value = iInflections[i];
  
        assert.equal(value[0], inflection.singularize(value[1]))
      }
    }
  
  , 'test gender and people plural words for inflection': function () {
      var i = genInflections.length
        , value;
  
      while (--i >= 0) {
        value = genInflections[i];
  
        assert.equal(value[1], inflection.pluralize(value[0]))
      }
    }
  
  , 'test gender and people singular words for inflection': function () {
      var i = genInflections.length
        , value;
  
      while (--i >= 0) {
        value = genInflections[i];
  
        assert.equal(value[0], inflection.singularize(value[1]))
      }
    }
  
  , 'test irregular plural words for inflection': function () {
      var i = irregularInflections.length
        , value;
  
      while (--i >= 0) {
        value = irregularInflections[i];
  
        assert.equal(value[1], inflection.pluralize(value[0]))
      }
    }
  
  , 'test irregular singular words for inflection': function () {
      var i = irregularInflections.length
        , value;
  
      while (--i >= 0) {
        value = irregularInflections[i];
  
        assert.equal(value[0], inflection.singularize(value[1]))
      }
    }
  
  , 'test no change plural words for inflection': function () {
      var i = noInflections.length
        , value;
  
      while (--i >= 0) {
        value = noInflections[i];
  
        assert.equal(value[1], inflection.pluralize(value[0]))
      }
    }
  
  , 'test no change singular words for inflection': function () {
      var i = noInflections.length
        , value;
  
      while (--i >= 0) {
        value = noInflections[i];
  
        assert.equal(value[0], inflection.singularize(value[1]))
      }
    }
  
  };
  
  module.exports = tests;
  