A semantic search engine for source code https://bitshift.benkurtovic.com/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

пре 10 година
пре 10 година
пре 10 година
пре 10 година
пре 10 година
пре 10 година
пре 10 година
пре 10 година
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. # -*- coding: utf-8 -*-
  2. from __future__ import unicode_literals
  3. import unittest
  4. from bitshift.query import parse_query
  5. TESTS = [
  6. # Text
  7. ("test", "Tree(Text(String(u'test')))"),
  8. ("re:test", "Tree(Text(Regex(u'test')))"),
  9. # Language
  10. ("language:python", "Tree(Language(Python))"),
  11. ("language:py", "Tree(Language(Python))"),
  12. ("l:r:r..y", "Tree(Language(Ruby))"),
  13. (r'"lang:re:python|^c$"',
  14. "Tree(BinaryOp(Language(C), OR, Language(Python)))"),
  15. # Author
  16. ('"author:Ben Kurtovic"', "Tree(Author(String(u'Ben Kurtovic')))"),
  17. (r"'a:re:b.*?\sk.*?'", r"Tree(Author(Regex(u'b.*?\\sk.*?')))"),
  18. # Date
  19. ("'create:before:Jan 1, 2014'",
  20. "Tree(Date(CREATE, BEFORE, 2014-01-01 00:00:00))"),
  21. ("'modify:after:2010-05-09 10:11:12'",
  22. "Tree(Date(MODIFY, AFTER, 2010-05-09 10:11:12))"),
  23. # Symbol
  24. ("sym:foobar", "Tree(Symbol(ALL, ALL, String(u'foobar')))"),
  25. ("func:foo_bar", "Tree(Symbol(ALL, FUNCTION, String(u'foo_bar')))"),
  26. ("func:foo_bar()", "Tree(Symbol(ALL, FUNCTION, String(u'foo_bar')))"),
  27. ("class:FooBar", "Tree(Symbol(ALL, CLASS, String(u'FooBar')))"),
  28. ("var:foobar", "Tree(Symbol(ALL, VARIABLE, String(u'foobar')))"),
  29. ("var:r:foobar", "Tree(Symbol(ALL, VARIABLE, Regex(u'foobar')))"),
  30. # Composition
  31. ("(a and b) or (c and d)", ", ".join([
  32. "Tree(BinaryOp(BinaryOp(Text(String(u'a'))", "AND",
  33. "Text(String(u'b')))", "OR", "BinaryOp(Text(String(u'c'))", "AND",
  34. "Text(String(u'd')))))"])),
  35. ("a and b or c and d", ", ".join([
  36. "Tree(BinaryOp(BinaryOp(Text(String(u'a'))", "AND",
  37. "Text(String(u'b')))", "OR", "BinaryOp(Text(String(u'c'))", "AND",
  38. "Text(String(u'd')))))"])),
  39. ("a and b or c or d", ", ".join([
  40. "Tree(BinaryOp(BinaryOp(Text(String(u'a'))", "AND",
  41. "Text(String(u'b')))", "OR", "BinaryOp(Text(String(u'c'))", "OR",
  42. "Text(String(u'd')))))"])),
  43. ("a and (b or c or d)", ", ".join([
  44. "Tree(BinaryOp(Text(String(u'a'))", "AND",
  45. "BinaryOp(Text(String(u'b'))", "OR", "BinaryOp(Text(String(u'c'))", "OR",
  46. "Text(String(u'd'))))))"])),
  47. ("a not b", ", ".join([
  48. "Tree(BinaryOp(Text(String(u'a'))", "AND", "UnaryOp(NOT",
  49. "Text(String(u'b')))))"])),
  50. # Unicode, Escaping
  51. (r'lang:py "author:fo\\o \"bar\" baz\\"', ", ".join([
  52. "Tree(BinaryOp(Language(Python)", "AND",
  53. "Author(String(u'fo\\\\o \"bar\" baz\\\\'))))"])),
  54. ('"author:Ben Kurtović"', "Tree(Author(String(u'Ben Kurtovi\\u0107')))")
  55. ]
  56. class TestQueryParser(unittest.TestCase):
  57. """Unit tests for the query parser in :py:mod:`bitshift.query`."""
  58. def test_parse(self):
  59. """test full query parsing"""
  60. for test, expected in TESTS:
  61. self.assertEqual(expected, parse_query(test).serialize())
  62. if __name__ == "__main__":
  63. unittest.main(verbosity=2)