/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

//-----------------------------------------------------------------------------
var BUGNUMBER = 371932;
var summary = 'ES4 Regular Expression /y flag';
var actual = '';
var expect = '';

print('See http://developer.mozilla.org/es4/proposals/extend_regexps.html#y_flag');

//-----------------------------------------------------------------------------
test();
//-----------------------------------------------------------------------------

function test()
{
  enterFunc ('test');
  printBugNumber(BUGNUMBER);
  printStatus (summary);

  var c;
  var s = '123456';

  print('Test global flag.');

  var g = /(1)/g;
  expect = 'captures: 1,1; RegExp.leftContext: ""; RegExp.rightContext: "234561"';
  actual = 'captures: ' + g.exec('1234561') +
    '; RegExp.leftContext: "' + RegExp.leftContext +
    '"; RegExp.rightContext: "' + RegExp.rightContext + '"';
  reportCompare(expect, actual, summary + ' - /(1)/g.exec("1234561") first call');

  expect = 'captures: 1,1; RegExp.leftContext: "123456"; RegExp.rightContext: ""';
  actual = 'captures: ' + g.exec('1234561') +
    '; RegExp.leftContext: "' + RegExp.leftContext +
    '"; RegExp.rightContext: "' + RegExp.rightContext + '"';
  reportCompare(expect, actual, summary + ' - /(1)/g.exec("1234561") second call');
  var y = /(1)/y;
 
  print('Test sticky flag.');

  /*
   * calls to reportCompare invoke regular expression matches which interfere
   * with the test of the sticky flag. Collect expect and actual values prior
   * to calling reportCompare. Note setting y = /(1)/y resets the lastIndex etc.
   */

  var y = /(1)/y;
  var expect4 = 'captures: 1,1; RegExp.leftContext: ""; RegExp.rightContext: "234561"';
  var actual4 = 'captures: ' + y.exec('1234561') +
    '; RegExp.leftContext: "' + RegExp.leftContext +
    '"; RegExp.rightContext: "' + RegExp.rightContext + '"';

  var expect5 = 'captures: null; RegExp.leftContext: ""; RegExp.rightContext: "234561"';
  var actual5 = 'captures: ' + y.exec('1234561') +
    '; RegExp.leftContext: "' + RegExp.leftContext +
    '"; RegExp.rightContext: "' + RegExp.rightContext + '"';

  reportCompare(expect4, actual4, summary + ' - /(1)/y.exec("1234561") first call');
  reportCompare(expect5, actual5, summary + ' - /(1)/y.exec("1234561") second call');

  var y = /(1)/y;

  reportCompare(expect5, actual5, summary);

  y = /(1)/y;
  var expect6 = 'captures: 1,1; RegExp.leftContext: ""; RegExp.rightContext: "123456"';
  var actual6 = 'captures: ' + y.exec('1123456') +
    '; RegExp.leftContext: "' + RegExp.leftContext +
    '"; RegExp.rightContext: "' + RegExp.rightContext + '"';

  var expect7 = 'captures: 1,1; RegExp.leftContext: "1"; RegExp.rightContext: "23456"';
  var actual7 = 'captures: ' + y.exec('1123456') +
    '; RegExp.leftContext: "' + RegExp.leftContext +
    '"; RegExp.rightContext: "' + RegExp.rightContext + '"';

  reportCompare(expect6, actual6, summary + ' - /(1)/y.exec("1123456") first call');
  reportCompare(expect7, actual7, summary + ' - /(1)/y.exec("1123456") second call');

  var y = /(1)/y;

  reportCompare(expect, actual, summary);

  exitFunc ('test');
}
