text: import { test, expect } from '../qunit';
  import each from './each';
  import objectKeys from './object-keys';
  import moment from '../../moment';
  import defaults from '../../lib/utils/defaults';
  
  export function defineCommonLocaleTests(locale, options) {
      test('lenient ordinal parsing', function (assert) {
          var i, ordinalStr, testMoment;
          for (i = 1; i <= 31; ++i) {
              ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
              testMoment = moment(ordinalStr, 'YYYY MM Do');
              assert.equal(testMoment.year(), 2014,
                      'lenient ordinal parsing ' + i + ' year check');
              assert.equal(testMoment.month(), 0,
                      'lenient ordinal parsing ' + i + ' month check');
              assert.equal(testMoment.date(), i,
                      'lenient ordinal parsing ' + i + ' date check');
          }
      });
  
      test('lenient ordinal parsing of number', function (assert) {
          var i, testMoment;
          for (i = 1; i <= 31; ++i) {
              testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
              assert.equal(testMoment.year(), 2014,
                      'lenient ordinal parsing of number ' + i + ' year check');
              assert.equal(testMoment.month(), 0,
                      'lenient ordinal parsing of number ' + i + ' month check');
              assert.equal(testMoment.date(), i,
                      'lenient ordinal parsing of number ' + i + ' date check');
          }
      });
  
      test('strict ordinal parsing', function (assert) {
          var i, ordinalStr, testMoment;
          for (i = 1; i <= 31; ++i) {
              ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
              testMoment = moment(ordinalStr, 'YYYY MM Do', true);
              assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
          }
      });
  
      test('meridiem invariant', function (assert) {
          var h, m, t1, t2;
          for (h = 0; h < 24; ++h) {
              for (m = 0; m < 60; m += 15) {
                  t1 = moment.utc([2000, 0, 1, h, m]);
                  t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
                  assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
                          'meridiem at ' + t1.format('HH:mm'));
              }
          }
      });
  
      test('date format correctness', function (assert) {
          var data, tokens;
          data = moment.localeData()._longDateFormat;
          tokens = objectKeys(data);
          each(tokens, function (srchToken) {
              // Check each format string to make sure it does not contain any
              // tokens that need to be expanded.
              each(tokens, function (baseToken) {
                  // strip escaped sequences
                  var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
                  assert.equal(false, !!~format.indexOf(srchToken),
                          'contains ' + srchToken + ' in ' + baseToken);
              });
          });
      });
  
      test('month parsing correctness', function (assert) {
          var i, m;
  
          if (locale === 'tr') {
              // I can't fix it :(
              expect(0);
              return;
          }
          function tester(format) {
              var r;
              r = moment(m.format(format), format);
              assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
              r = moment(m.format(format).toLocaleUpperCase(), format);
              assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
              r = moment(m.format(format).toLocaleLowerCase(), format);
              assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
  
              r = moment(m.format(format), format, true);
              assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
              r = moment(m.format(format).toLocaleUpperCase(), format, true);
              assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
              r = moment(m.format(format).toLocaleLowerCase(), format, true);
              assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
          }
  
          for (i = 0; i < 12; ++i) {
              m = moment([2015, i, 15, 18]);
              tester('MMM');
              tester('MMM.');
              tester('MMMM');
              tester('MMMM.');
          }
      });
  
      test('weekday parsing correctness', function (assert) {
          var i, m;
  
          if (locale === 'tr' || locale === 'az') {
              // There is a lower-case letter (ı), that converted to upper then
              // lower changes to i
              expect(0);
              return;
          }
          function tester(format) {
              var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
              r = moment(m.format(format), format);
              assert.equal(r.weekday(), m.weekday(), baseMsg);
              r = moment(m.format(format).toLocaleUpperCase(), format);
              assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
              r = moment(m.format(format).toLocaleLowerCase(), format);
              assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
  
              r = moment(m.format(format), format, true);
              assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
              r = moment(m.format(format).toLocaleUpperCase(), format, true);
              assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
              r = moment(m.format(format).toLocaleLowerCase(), format, true);
              assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
          }
  
          for (i = 0; i < 7; ++i) {
              m = moment.utc([2015, 0, i + 1, 18]);
              tester('dd');
              tester('ddd');
              tester('dddd');
          }
      });
  }
  
  