// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * Test fixture for print preview utils.
 * @constructor
 * @extends {testing.Test}
 */
function PrintPreviewUtilsUnitTest () {
  testing.Test.call(this);
}

PrintPreviewUtilsUnitTest.prototype = {
  __proto__: testing.Test.prototype,

  /** @override */
  extraLibraries: [
    'print_preview_utils.js',
  ]
};

TEST_F('PrintPreviewUtilsUnitTest', 'IsInteger', function() {
  assertFalse(isInteger("  abc "));
  assertFalse(isInteger("-7"));
  assertFalse(isInteger("7.0"));
  assertFalse(isInteger("a7a"));

  assertTrue(isInteger("0"));
  assertTrue(isInteger(" 100  "));
  assertTrue(isInteger("0055 "));
});

TEST_F('PrintPreviewUtilsUnitTest', 'IsPositiveInteger', function() {
  assertTrue(isPositiveInteger("100"));
  assertTrue(isPositiveInteger("0055"));

  assertFalse(isPositiveInteger("0"));
  assertFalse(isPositiveInteger("-100"));
  assertFalse(isPositiveInteger("sdfs"));
});

TEST_F('PrintPreviewUtilsUnitTest', 'AreArraysEqual', function() {
  assertTrue(areArraysEqual([2,4,6,8,10], [2,4,6,8,10]));
  assertTrue(areArraysEqual([], []));

  assertFalse(areArraysEqual([2,4,6,8,10,12], [2,4,6,8,10]));
  assertFalse(areArraysEqual([], [2,4,6,8,10]));
});

TEST_F('PrintPreviewUtilsUnitTest', 'RemoveDuplicates', function() {
  var array1 = [1,2,2,3,6,6,6,7,9,10];
  assertTrue(areArraysEqual(removeDuplicates(array1), [1,2,3,6,7,9,10]));
});

TEST_F('PrintPreviewUtilsUnitTest', 'PageRanges', function() {
  function assertRangesEqual(simpleRange1, range2) {
    var range1 = []
    for (var i = 0; i < simpleRange1.length; i++) {
      var from;
      var to;
      if (Array.isArray(simpleRange1[i])) {
        from = simpleRange1[i][0];
        to = simpleRange1[i][1];
      } else {
        from = simpleRange1[i];
        to = simpleRange1[i];
      }
      range1.push({'from': from, 'to': to});
    }
    assertTrue(areRangesEqual(range1, range2));
  };
  assertRangesEqual([1, 2, 3, 1, 56],
                    pageRangeTextToPageRanges("1,2,3,1,56", 100));
  assertRangesEqual([[1, 3],[6, 9], [6, 10]],
                    pageRangeTextToPageRanges("1-3, 6-9,6-10 ", 100));
  assertRangesEqual([[10, 100]],
                    pageRangeTextToPageRanges("10-", 100));
  assertRangesEqual([[10, 100000]],
                    pageRangeTextToPageRanges("10-100000", 100));
  assertRangesEqual([[1, 100]],
                    pageRangeTextToPageRanges("-", 100));
  assertRangesEqual([1, 2],
                    pageRangeTextToPageRanges("1,2", undefined));
  assertRangesEqual([[1, 1000000000]],
                    pageRangeTextToPageRanges("-", null));
  assertRangesEqual([[1, 1000000000]],
                    pageRangeTextToPageRanges("-", 0));
});

TEST_F('PrintPreviewUtilsUnitTest', 'InvalidPageRanges', function() {
  assertTrue(pageRangeTextToPageRanges("1,100000", 100) == null);
  assertTrue(pageRangeTextToPageRanges("1,2,0,56", 100) == null);
  assertTrue(pageRangeTextToPageRanges("-1,1,2,,56", 100) == null);
  assertTrue(pageRangeTextToPageRanges("1,2,56-40", 100) == null);
  assertTrue(pageRangeTextToPageRanges("101-110", 100) == null);
});

TEST_F('PrintPreviewUtilsUnitTest', 'PageRangeTextToPageList', function() {
  assertTrue(areArraysEqual([1],
                            pageRangeTextToPageList("1", 10)));
  assertTrue(areArraysEqual([1,2,3,4],
                            pageRangeTextToPageList("1-4", 10)));
  assertTrue(areArraysEqual([1,2,3,4,2,3,4],
                            pageRangeTextToPageList("1-4, 2-4", 10)));
  assertTrue(areArraysEqual([1,2,5,7,8,9,10,2,2,3],
                            pageRangeTextToPageList("1-2, 5, 7-10, 2, 2, 3",
                                                    10)));
  assertTrue(areArraysEqual([5,6,7,8,9,10],
                            pageRangeTextToPageList("5-", 10)));
  assertTrue(areArraysEqual([],
                            pageRangeTextToPageList("1-4", undefined)));
  assertTrue(areArraysEqual([1,2,3,4,5,6,7,8,9,10],
                            pageRangeTextToPageList("1-abcd", 10)));
});

TEST_F('PrintPreviewUtilsUnitTest', 'PageListToPageSet', function() {
  assertTrue(areArraysEqual([1,2,3,4], pageListToPageSet([4,3,2,1,1,1])));
  assertTrue(areArraysEqual([1,2,3,4], pageListToPageSet([1,2,2,3,4,1,1,1])));
  assertTrue(areArraysEqual([], pageListToPageSet([])));
});
