'use strict';

var should = require('should');

var fl = require('../src/fuzzlogia');


describe('fuzzlogia', function() {
  describe('#search', function() {
    it('should consider threshold', function() {
      fl.search('あいうえお', [ 'さしすせそ', 'はまやらわ' ])
        .should.be.eql([]);

      fl.search('あいうえお', [ 'さしすせそ', 'あいうえお' ])
        .should.be.eql([ 'あいうえお' ]);

      fl.search('あいうえお', [ 'あいうえか', 'あいうかき' ], null, { threshold: 1 })
        .should.be.eql([ 'あいうえか' ]);

      fl.search('あいうえお', [ 'あいうえか', 'あいうかき' ], null, { threshold: 2 })
        .should.be.eql([ 'あいうえか', 'あいうかき' ]);
    });

    it('should return in the rank order', function() {
      fl.search('あい', [ 'あうえいお', 'あいうえお', 'あい' ])
        .should.be.eql([ 'あい', 'あいうえお', 'あうえいお' ]);
    });

    it('should use extractor', function() {
      fl.search('あ', [ { name: 'あ' } ], 'name')
        .should.be.eql([ { name: 'あ' } ]);

      fl.search('あい', [ { a: 'あ', b: 'い' } ], function(o) { return o.a + o.b; })
        .should.be.eql([ { a: 'あ', b: 'い' } ]);
    });

    it('should return an empty array if query is empty', function() {
      fl.search('', [ 'あいうえお' ]).should.be.eql([]);
    });

    it('should consider Japanese kanji on/kun readings', function() {
      fl.search('あい', [ '愛' ]).should.be.eql([ '愛' ]);
      fl.search('アイ', [ '愛' ]).should.be.eql([ '愛' ]);
      fl.search('さえない', [ '冴えない' ]).should.be.eql([ '冴えない' ]);
      fl.search('さいこうさいばんしょ', [ '最高裁判所' ]).should.be.eql([ '最高裁判所' ]);
    });

    it('should consider Japanese nanori readings', function() {
      fl.search('ゆうき', [ '結城' ]).should.be.eql([ '結城' ]);
      fl.search('さき', [ '咲' ]).should.be.eql([ '咲' ]);
    });
  });
});

@@ -192,32 +192,111 @@
 ', function() %7B%0A
+      fl.search('fzzuy', %5B 'fuzzy', 'matching' %5D).should.be.eql(%5B 'fuzzy' %5D);%0A%0A
       fl.search(
@@ -1556,24 +1556,182 @@
 '%E6%9C%80%E9%AB%98%E8%A3%81%E5%88%A4%E6%89%80' %5D);%0A
+      fl.search('%E3%81%8B%E3%82%93%E3%81%98', %5B '%E6%BC%A2%E5%AD%97%E3%81%AF%E9%9B%A3%E3%81%97%E3%81%84' %5D).should.be.eql(%5B '%E6%BC%A2%E5%AD%97%E3%81%AF%E9%9B%A3%E3%81%97%E3%81%84' %5D);%0A      fl.search('%E3%81%8E%E3%82%93%E3%81%8C', %5B '%E9%9B%BB%E6%B0%97%E7%BE%8A', '%E9%8A%80%E6%B2%B3%E3%83%92%E3%83%83%E3%83%81%E3%83%8F%E3%82%A4%E3%82%AF%E3%82%AC%E3%82%A4%E3%83%89' %5D)%0A        .should.be.eql(%5B '%E9%8A%80%E6%B2%B3%E3%83%92%E3%83%83%E3%83%81%E3%83%8F%E3%82%A4%E3%82%AF%E3%82%AC%E3%82%A4%E3%83%89' %5D);%0A
     %7D);%0A%0A   

add a few tests