text: 'use strict';
  /*jshint asi: true */
  
  var test = require('tap').test
    , generator = require('inline-source-map')
    , convert = require('..')
  
  function comment(prefix, suffix) {
    var rx = convert.commentRegex;
    return rx.test(prefix + 'sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiIiwic291cmNlcyI6WyJmdW5jdGlvbiBmb28oKSB7XG4gY29uc29sZS5sb2coXCJoZWxsbyBJIGFtIGZvb1wiKTtcbiBjb25zb2xlLmxvZyhcIndobyBhcmUgeW91XCIpO1xufVxuXG5mb28oKTtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSJ9' + suffix)
  }
  
  function commentWithCharSet(prefix, suffix, sep) {
    sep = sep || ':';
    var rx = convert.commentRegex;
    return rx.test(prefix + 'sourceMappingURL=data:application/json;charset' + sep +'utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiIiwic291cmNlcyI6WyJmdW5jdGlvbiBmb28oKSB7XG4gY29uc29sZS5sb2coXCJoZWxsbyBJIGFtIGZvb1wiKTtcbiBjb25zb2xlLmxvZyhcIndobyBhcmUgeW91XCIpO1xufVxuXG5mb28oKTtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSJ9' + suffix)
  }
  
  // Source Map v2 Tests
  test('comment regex old spec - @', function (t) {
    [ 
      '//@ ',
      '  //@ ', // with leading space
      '\t//@ ', // with leading tab
      '//@ ',   // with leading text
      '/*@ ',   // multi line style
      '  /*@ ', // multi line style with leading spaces
      '\t/*@ ', // multi line style with leading tab
      '/*@ ',   // multi line style with leading text
    ].forEach(function (x) { 
      t.ok(comment(x, ''), 'matches ' + x) 
      t.ok(commentWithCharSet(x, ''), 'matches ' + x + ' with charset') 
      t.ok(commentWithCharSet(x, '', '='), 'matches ' + x + ' with charset')
    });
  
    [
      ' @// @',
      ' @/* @',
    ].forEach(function (x) { t.ok(!comment(x, ''), 'should not match ' + x) })
  
    t.end()
  })
  
  test('comment regex new spec - #', function (t) {
    [ 
      '  //# ', // with leading spaces
      '\t//# ', // with leading tab
      '//# ',   // with leading text
      '/*# ',   // multi line style
      '  /*# ', // multi line style with leading spaces
      '\t/*# ', // multi line style with leading tab
      '/*# ',   // multi line style with leading text
    ].forEach(function (x) { 
      t.ok(comment(x, ''), 'matches ' + x) 
      t.ok(commentWithCharSet(x, ''), 'matches ' + x + ' with charset') 
      t.ok(commentWithCharSet(x, '', '='), 'matches ' + x + ' with charset')
    });
    
    [ 
      ' #// #',
      ' #/* #',
    ].forEach(function (x) { t.ok(!comment(x, ''), 'should not match ' + x) })
  
    t.end()
  })
  
  function mapFileCommentWrap(s1, s2) {
    var mapFileRx = convert.mapFileCommentRegex;
    return mapFileRx.test(s1 + 'sourceMappingURL=foo.js.map' + s2)
  }
  
  test('mapFileComment regex old spec - @', function (t) {
  
    [ 
      ['//@ ', ''],
      ['  //@ ', ''],                 // with leading spaces
      ['\t//@ ', ''],                 // with a leading tab
      ['///@ ', ''],                  // with a leading text
      [';//@ ', ''],                  // with a leading text
      ['return//@ ', ''],             // with a leading text
    ].forEach(function (x) { t.ok(mapFileCommentWrap(x[0], x[1]), 'matches ' + x.join(' :: ')) });
  
    [ 
      [' @// @', ''],
      ['var sm = `//@ ', '`'],        // not inside a string
      ['var sm = "//@ ', '"'],        // not inside a string
      ['var sm = \'//@ ', '\''],      // not inside a string
      ['var sm = \' //@ ', '\''],     // not inside a string
    ].forEach(function (x) { t.ok(!mapFileCommentWrap(x[0], x[1]), 'does not match ' + x.join(' :: ')) })
    t.end()
  })
  
  test('mapFileComment regex new spec - #', function (t) {
    [ 
      ['//# ', ''],
      ['  //# ', ''],                 // with leading space
      ['\t//# ', ''],                 // with leading tab
      ['///# ', ''],                  // with leading text
      [';//# ', ''],                  // with leading text
      ['return//# ', ''],             // with leading text
    ].forEach(function (x) { t.ok(mapFileCommentWrap(x[0], x[1]), 'matches ' + x.join(' :: ')) });
  
    [ 
      [' #// #', ''],
      ['var sm = `//# ', '`'],        // not inside a string
      ['var sm = "//# ', '"'],        // not inside a string
      ['var sm = \'//# ', '\''],      // not inside a string
      ['var sm = \' //# ', '\''],     // not inside a string
    ].forEach(function (x) { t.ok(!mapFileCommentWrap(x[0], x[1]), 'does not match ' + x.join(' :: ')) })
    t.end()
  })
  
  test('mapFileComment regex /* */ old spec - @', function (t) {
    [ [ '/*@ ', '*/' ]
    , ['  /*@ ', '  */ ' ]            // with leading spaces
    , [ '\t/*@ ', ' \t*/\t ']         // with a leading tab
    , [ 'leading string/*@ ', '*/' ]  // with a leading string
    , [ '/*@ ', ' \t*/\t ']           // with trailing whitespace
    ].forEach(function (x) { t.ok(mapFileCommentWrap(x[0], x[1]), 'matches ' + x.join(' :: ')) });
  
    [ ['/*@ ', ' */ */ ' ],       // not the last thing on its line 
      ['/*@ ', ' */ more text ' ] // not the last thing on its line 
    ].forEach(function (x) { t.ok(!mapFileCommentWrap(x[0], x[1]), 'does not match ' + x.join(' :: ')) });
    t.end()
  })
  
  test('mapFileComment regex /* */ new spec - #', function (t) {
    [ [ '/*# ', '*/' ]
    , ['  /*# ', '  */ ' ]            // with leading spaces
    , [ '\t/*# ', ' \t*/\t ']         // with a leading tab
    , [ 'leading string/*# ', '*/' ]  // with a leading string
    , [ '/*# ', ' \t*/\t ']           // with trailing whitespace
    ].forEach(function (x) { t.ok(mapFileCommentWrap(x[0], x[1]), 'matches ' + x.join(' :: ')) });
  
    [ ['/*# ', ' */ */ ' ],       // not the last thing on its line 
      ['/*# ', ' */ more text ' ] // not the last thing on its line 
    ].forEach(function (x) { t.ok(!mapFileCommentWrap(x[0], x[1]), 'does not match ' + x.join(' :: ')) });
    t.end()
  })
  