<!DOCTYPE html>
<!--
Copyright (c) 2013 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.
-->

<link rel="import" href="/core/filter.html">
<link rel="import" href="/core/test_utils.html">
<link rel="import" href="/base/unittest.html">

<script>
'use strict';

tr.b.unittest.testSuite(function() {
  var TitleOrCategoryFilter = tr.c.TitleOrCategoryFilter;
  var ExactTitleFilter = tr.c.ExactTitleFilter;

  test('titleOrCategoryFilter', function() {
    assert.throw(function() {
      new TitleOrCategoryFilter();
    });
    assert.throw(function() {
      new TitleOrCategoryFilter('');
    });

    var s0 = tr.c.test_utils.newSliceCategory('cat', 'a', 1, 3);
    assert.isTrue(new TitleOrCategoryFilter('a').matchSlice(s0));
    assert.isTrue(new TitleOrCategoryFilter('cat').matchSlice(s0));
    assert.isTrue(new TitleOrCategoryFilter('at').matchSlice(s0));
    assert.isFalse(new TitleOrCategoryFilter('b').matchSlice(s0));
    assert.isFalse(new TitleOrCategoryFilter('X').matchSlice(s0));

    var s1 = tr.c.test_utils.newSliceCategory('cat', 'abc', 1, 3);
    assert.isTrue(new TitleOrCategoryFilter('abc').matchSlice(s1));
    assert.isTrue(new TitleOrCategoryFilter('Abc').matchSlice(s1));
    assert.isTrue(new TitleOrCategoryFilter('cat').matchSlice(s1));
    assert.isTrue(new TitleOrCategoryFilter('Cat').matchSlice(s1));
    assert.isFalse(new TitleOrCategoryFilter('cat1').matchSlice(s1));
    assert.isFalse(new TitleOrCategoryFilter('X').matchSlice(s1));
  });

  test('exactTitleFilter', function() {
    assert.throw(function() {
      new ExactTitleFilter();
    });
    assert.throw(function() {
      new ExactTitleFilter('');
    });

    var s0 = tr.c.test_utils.newSliceNamed('a', 1, 3);
    assert.isTrue(new ExactTitleFilter('a').matchSlice(s0));
    assert.isFalse(new ExactTitleFilter('b').matchSlice(s0));
    assert.isFalse(new ExactTitleFilter('A').matchSlice(s0));

    var s1 = tr.c.test_utils.newSliceNamed('abc', 1, 3);
    assert.isTrue(new ExactTitleFilter('abc').matchSlice(s1));
    assert.isFalse(new ExactTitleFilter('Abc').matchSlice(s1));
    assert.isFalse(new ExactTitleFilter('bc').matchSlice(s1));
    assert.isFalse(new ExactTitleFilter('a').matchSlice(s1));
  });
});
</script>
