/* global moment */ var testUtils = require( './testUtils.js' ), Parser = require( 'ext.discussionTools.init' ).Parser; QUnit.module( 'mw.dt.Parser', testUtils.newEnvironment() ); QUnit.test( '#getTimestampRegexp', function ( assert ) { var cases = require( '../cases/timestamp-regex.json' ), parser = new Parser( document.createElement( 'div' ) ); testUtils.overrideParserData( require( '../data-en.json' ) ); cases.forEach( function ( caseItem ) { assert.strictEqual( parser.getTimestampRegexp( 'en', caseItem.format, '\\d', { UTC: 'UTC' } ), caseItem.expected, caseItem.message ); } ); } ); QUnit.test( '#getTimestampParser', function ( assert ) { var cases = require( '../cases/timestamp-parser.json' ), parser = new Parser( document.createElement( 'div' ) ); testUtils.overrideParserData( require( '../data-en.json' ) ); cases.forEach( function ( caseItem ) { var tsParser = parser.getTimestampParser( 'en', caseItem.format, null, 'UTC', { UTC: 'UTC' } ), expectedDate = moment( caseItem.expected ); assert.ok( tsParser( caseItem.data ).isSame( expectedDate ), caseItem.message ); } ); } ); QUnit.test( '#getTimestampParser (at DST change)', function ( assert ) { var cases = require( '../cases/timestamp-parser-dst.json' ), parser = new Parser( document.createElement( 'div' ) ); testUtils.overrideParserData( require( '../data-en.json' ) ); cases.forEach( function ( caseItem ) { var regexp = parser.getTimestampRegexp( 'en', caseItem.format, '\\d', caseItem.timezoneAbbrs ), tsParser = parser.getTimestampParser( 'en', caseItem.format, null, caseItem.timezone, caseItem.timezoneAbbrs ), date = tsParser( caseItem.sample.match( regexp ) ); assert.ok( date.isSame( caseItem.expected ), caseItem.message ); assert.ok( date.isSame( caseItem.expectedUtc ), caseItem.message ); } ); } ); QUnit.test( '#getThreads', function ( assert ) { var fixture, cases = require( '../cases/comments.json' ); fixture = document.getElementById( 'qunit-fixture' ); cases.forEach( function ( caseItem ) { var threads, parser, $dom = mw.template.get( 'test.DiscussionTools', caseItem.dom ).render(), expected = require( caseItem.expected ), config = require( caseItem.config ), data = require( caseItem.data ); // Remove all but the body tags from full Parsoid docs if ( $dom.filter( 'section' ).length ) { $dom = $( '