示例#1
0
    def test_settings_from_json(self):
        settings = SearchSettings()
        json = '''{
  "startpath": "~/src/xsearch/",
  "in-ext": ["js","ts"],
  "out-dirpattern": "node_module",
  "out-filepattern": ["temp"],
  "search": "Searcher",
  "linesbefore": 2,
  "linesafter": 2,
  "debug": true,
  "allmatches": false,
  "includehidden": true
}'''
        self.searchoptions.settings_from_json(json, settings)
        self.assertEqual(settings.startpath, '~/src/xsearch/')
        for x in {'js', 'ts'}:
            self.assertIn(x, settings.in_extensions)
        self.assertEqual(list(settings.searchpatterns)[0].pattern, 'Searcher')
        self.assertEqual(list(settings.out_dirpatterns)[0].pattern, 'node_module')
        self.assertEqual(list(settings.out_filepatterns)[0].pattern, 'temp')
        self.assertEqual(settings.linesbefore, 2)
        self.assertEqual(settings.linesafter, 2)
        self.assertTrue(settings.debug)
        self.assertTrue(settings.verbose)
        self.assertTrue(settings.firstmatch)
        self.assertFalse(settings.excludehidden)
示例#2
0
 def test_singleline_longer_colorize_searchresult(self):
     formatter = SearchResultFormatter(
         SearchSettings(colorize=True, maxlinelength=100))
     pattern = 'maxlen'
     filename = 'maxlen.txt'
     sf = SearchFile(path='.', filename=filename, filetype=FileType.TEXT)
     linenum = 10
     match_start_index = 53
     match_end_index = 59
     line = '0123456789012345678901234567890123456789012345678901' + \
            'maxlen' + \
            '8901234567890123456789012345678901234567890123456789'
     linesbefore = []
     linesafter = []
     searchresult = SearchResult(pattern=pattern,
                                 file=sf,
                                 linenum=linenum,
                                 match_start_index=match_start_index,
                                 match_end_index=match_end_index,
                                 line=line,
                                 lines_before=linesbefore,
                                 lines_after=linesafter)
     expectedline = '...89012345678901234567890123456789012345678901' + \
                    Color.GREEN + 'maxlen' + Color.RESET + \
                    '89012345678901234567890123456789012345678901...'
     expectedoutput = "{0:s}: {1:d}: [{2:d}:{3:d}]: {4:s}".format(
         os.path.join('.', filename), linenum, match_start_index,
         match_end_index, expectedline)
     output = formatter.format(searchresult)
     self.assertEqual(expectedoutput, output)
示例#3
0
 def test_singleline_searchresult(self):
     formatter = SearchResultFormatter(SearchSettings(colorize=False))
     pattern = "Search"
     filename = 'Searcher.cs'
     sf = SearchFile(path=self.cssearch_path,
                     filename=filename,
                     filetype=FileType.CODE)
     linenum = 10
     match_start_index = 15
     match_end_index = 23
     line = "\tpublic class Searcher\n"
     linesbefore = []
     linesafter = []
     searchresult = SearchResult(pattern=pattern,
                                 file=sf,
                                 linenum=linenum,
                                 match_start_index=match_start_index,
                                 match_end_index=match_end_index,
                                 line=line,
                                 lines_before=linesbefore,
                                 lines_after=linesafter)
     expectedoutput = "{0:s}: {1:d}: [{2:d}:{3:d}]: {4:s}".format(
         os.path.join(self.cssearch_path, filename), linenum,
         match_start_index, match_end_index, line.strip())
     output = formatter.format(searchresult)
     self.assertEqual(expectedoutput, output)
示例#4
0
    def test_multiline_searchresult(self):
        formatter = SearchResultFormatter(SearchSettings(colorize=False))
        pattern = "Search"
        filename = 'Searcher.cs'
        sf = SearchFile(path=self.cssearch_path,
                        filename=filename,
                        filetype=FileType.TEXT)
        linenum = 10
        match_start_index = 15
        match_end_index = 23
        line = "\tpublic class Searcher\n"
        linesbefore = ["namespace CsSearch\n", "{\n"]
        linesafter = ["\t{\n", "\t\tprivate readonly FileTypes _fileTypes;\n"]
        searchresult = SearchResult(pattern=pattern,
                                    file=sf,
                                    linenum=linenum,
                                    match_start_index=match_start_index,
                                    match_end_index=match_end_index,
                                    line=line,
                                    lines_before=linesbefore,
                                    lines_after=linesafter)
        expectedoutput = "================================================================================\n" + \
            '{0:s}: {1:d}: [{2:d}:{3:d}]\n'.format(os.path.join(self.cssearch_path, filename), linenum, match_start_index, match_end_index) + \
            """--------------------------------------------------------------------------------
   8 | namespace CsSearch
   9 | {
> 10 | \tpublic class Searcher
  11 | \t{
  12 | \t\tprivate readonly FileTypes _fileTypes;
"""
        output = formatter.format(searchresult)
        self.assertEqual(expectedoutput, output)
示例#5
0
 def test_binaryfile_searchresult(self):
     formatter = SearchResultFormatter(SearchSettings())
     pattern = "Search"
     filename = 'Searcher.exe'
     sf = SearchFile(path=self.cssearch_path,
                     filename=filename,
                     filetype=FileType.BINARY)
     linenum = 0
     match_start_index = 0
     match_end_index = 0
     line = ''
     linesbefore = []
     linesafter = []
     searchresult = SearchResult(pattern=pattern,
                                 file=sf,
                                 linenum=linenum,
                                 match_start_index=match_start_index,
                                 match_end_index=match_end_index,
                                 line=line,
                                 lines_before=linesbefore,
                                 lines_after=linesafter)
     expectedoutput = "{0:s} matches at [{1:d}:{2:d}]".format(
         os.path.join(self.cssearch_path, filename), match_start_index,
         match_end_index)
     output = formatter.format(searchresult)
     self.assertEqual(expectedoutput, output)
示例#6
0
 def setUp(self):
     self.settings = SearchSettings()
示例#7
0
class SearchSettingsTest(unittest.TestCase):
    def setUp(self):
        self.settings = SearchSettings()

    def test_default_settings(self):
        # test the props
        self.assertFalse(self.settings.archivesonly)
        self.assertFalse(self.settings.debug)
        self.assertFalse(self.settings.firstmatch)
        self.assertTrue(self.settings.excludehidden)
        self.assertEqual(0, self.settings.linesafter)
        self.assertEqual(0, self.settings.linesbefore)
        self.assertFalse(self.settings.listdirs)
        self.assertFalse(self.settings.listfiles)
        self.assertFalse(self.settings.listlines)
        self.assertEqual(150, self.settings.maxlinelength)
        self.assertFalse(self.settings.multilinesearch)
        self.assertTrue(self.settings.printresults)
        self.assertFalse(self.settings.printusage)
        self.assertFalse(self.settings.printversion)
        self.assertTrue(self.settings.recursive)
        self.assertFalse(self.settings.searcharchives)
        self.assertFalse(self.settings.uniquelines)
        self.assertFalse(self.settings.verbose)
        # test the extension and pattern sets
        self.assertFalse(self.settings.in_archiveextensions)
        self.assertFalse(self.settings.in_archivefilepatterns)
        self.assertFalse(self.settings.in_dirpatterns)
        self.assertFalse(self.settings.in_filepatterns)
        self.assertFalse(self.settings.in_linesafterpatterns)
        self.assertFalse(self.settings.in_linesbeforepatterns)
        self.assertFalse(self.settings.linesaftertopatterns)
        self.assertFalse(self.settings.linesafteruntilpatterns)
        self.assertFalse(self.settings.out_archiveextensions)
        self.assertFalse(self.settings.out_archivefilepatterns)
        self.assertFalse(self.settings.out_dirpatterns)
        self.assertFalse(self.settings.out_filepatterns)
        self.assertFalse(self.settings.out_linesafterpatterns)
        self.assertFalse(self.settings.out_linesbeforepatterns)
        self.assertFalse(self.settings.searchpatterns)

    def test_set_properties(self):
        props = {
            'archivesonly': True,
            'debug': True,
            'firstmatch': True,
            'excludehidden': False,
            'linesafter': 5,
            'linesbefore': 5,
            'listdirs': True,
            'listfiles': True,
            'listlines': True,
            'maxlinelength': 155,
            'multilinesearch': True,
            'printresults': False,
            'printusage': True,
            'printversion': True,
            'recursive': False,
            'searcharchives': True,
            'uniquelines': True,
            'verbose': True,
        }
        self.settings.set_properties(props)
        self.assertEqual(True, self.settings.archivesonly)
        self.assertEqual(True, self.settings.debug)
        self.assertEqual(True, self.settings.firstmatch)
        self.assertEqual(False, self.settings.excludehidden)
        self.assertEqual(5, self.settings.linesafter)
        self.assertEqual(5, self.settings.linesbefore)
        self.assertEqual(True, self.settings.listdirs)
        self.assertEqual(True, self.settings.listfiles)
        self.assertEqual(True, self.settings.listlines)
        self.assertEqual(155, self.settings.maxlinelength)
        self.assertEqual(True, self.settings.multilinesearch)
        self.assertEqual(False, self.settings.printresults)
        self.assertEqual(True, self.settings.printusage,)
        self.assertEqual(True, self.settings.printversion)
        self.assertEqual(False, self.settings.recursive)
        self.assertEqual(True, self.settings.searcharchives)
        self.assertEqual(True, self.settings.uniquelines)
        self.assertEqual(True, self.settings.verbose)

    def test_add_single_extension(self):
        self.settings.add_exts('py', 'in_extensions')
        self.assertEqual(1, len(self.settings.in_extensions))
        self.assertIn('py', self.settings.in_extensions)

    def test_add_comma_delimited_extensions(self):
        self.settings.add_exts('py,rb,scala', 'in_extensions')
        self.assertEqual(3, len(self.settings.in_extensions))
        for x in {'py', 'rb', 'scala'}:
            self.assertIn(x, self.settings.in_extensions)

    def test_add_extensions_set(self):
        extensions_set = {'py','rb','scala'}
        self.settings.add_exts(extensions_set, 'in_extensions')
        self.assertEqual(3, len(self.settings.in_extensions))
        for x in extensions_set:
            self.assertIn(x, self.settings.in_extensions)

    def test_add_single_pattern(self):
        p = 'Search'
        self.settings.add_patterns(p, 'searchpatterns')
        self.assertEqual(1, len(self.settings.searchpatterns))
        self.assertEqual(p, list(self.settings.searchpatterns)[0].pattern)

    def test_add_patterns_set(self):
        patterns_set = {'Search', 'Test'}
        self.settings.add_patterns(patterns_set, 'searchpatterns')
        self.assertEqual(len(patterns_set), len(self.settings.searchpatterns))
        for p in self.settings.searchpatterns:
            self.assertIn(p.pattern, patterns_set)
示例#8
0
 def get_settings(self):
     settings = SearchSettings()
     settings.startpath = '.'
     settings.add_patterns('Searcher', 'searchpatterns')
     settings.debug = True
     return settings