class TranslationEngineTest(unittest.TestCase):
    def setUp(self):
        # First, create an instance of the Testbed class.
        self.testbed = testbed.Testbed()
        # Then activate the testbed, which prepares the service stubs for use.
        self.testbed.activate()
        # Next, declare which service stubs you want to use.
        self.testbed.init_datastore_v3_stub()
        self.testbed.init_memcache_stub()
        # Clear ndb's in-context cache between tests.
        # This prevents data from leaking between tests.
        # Alternatively, you could disable caching by
        # using ndb.get_context().set_cache_policy(False)
        ndb.get_context().clear_cache()
        self.testbed.init_urlfetch_stub()

    def test_google_search_for_java_get_default_url(self):
        """
        Test google search for language = java, make sure url is from the chosen site
        """
        self.l = "Java"
        self.t = TranslationEngine(self.l)
        url = self.t.url_search("for", "keyword")
        self.assertEqual("https://docs.oracle.com/javase/tutorial/java/nutsandbolts/for.html", url)

    def test_google_search_while_python_get_default_url(self):
        """
        Test google search for language = python, make sure url is from the chosen site
        """
        self.l = "Python"
        self.t = TranslationEngine(self.l)
        url = self.t.url_search("while", "keyword")
        self.assertIn("http://www.tutorialspoint.com/python/python_while_loop.htm", url)

    def test_google_search_if_python_get_default_url(self):
        """
        Test google search for language = python, make sure url is from the chosen site
        """
        self.l = "Python"
        self.t = TranslationEngine(self.l)
        url = self.t.url_search("if", "keyword")
        print url
        self.assertIn("http://www.tutorialspoint.com/python", url)

    def test_google_search_second_page_java_goto(self):
        """
        Test google search for language = java, make sure url is from the chosen site from second page
        """
        self.l = "Java"
        self.t = TranslationEngine(self.l)
        url = self.t.url_search("goto", "keyword")
        print url
        self.assertIn("http://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html", url)

    def test_add_keyword_python_return(self):
        """
        Test add keyword for language = python, make sure the data is saved in db
        """
        self.l = "Python"
        self.t = TranslationEngine(self.l)
        self.t.add_keyword("return", "keyword")
        data = None
        try:
            data = DAL.get_data_from_db("return", "Python")
            print 20*"-"
            print data
        except DataNotExistException:
            print "error"
        expected = '<div class="section" id="simple-statements">'
        self.assertEqual(expected, data["translation"].split('\n')[0])

    def test_parse_result_ruby_begin(self):
        self.l = "Ruby"
        self.t = TranslationEngine(self.l)
        self.t.add_keyword("begin", "keyword")
        data = None
        try:
            data = DAL.get_data_from_db("begin", "Ruby")
            print 20*"-"
            print data
        except DataNotExistException:
            print "error"
        expected = '<div id="section">'
        self.assertEqual(expected, data["translation"].split('\n')[0])

    def test_add_keyword_java(self):
        """
        Test add keyword for language = java, make sure the data is saved in db
        """
        self.l = "Java"
        self.t = TranslationEngine(self.l)
        self.t.add_keyword("while", "keyword")
        data = None
        try:
            data = DAL.get_data_from_db("while", "Java")
            print 20*"-"
            print data
        except DataNotExistException:
            print "error"
        expected = '<div id="PageContent">'
        self.assertEqual(expected, data["translation"].split('\n')[0])

    def test_add_keyword_ruby(self):
        """
        Test add keyword for language = ruby, make sure the data is saved in db
        """
        self.l = "Ruby"
        self.t = TranslationEngine(self.l)
        self.t.add_keyword("for", "keyword")
        data = None
        try:
            data = DAL.get_data_from_db("for", "Ruby")
            print 20*"-"
            print data
        except DataNotExistException:
            print "error"
        expected = '<div class="col-md-7 middle-col">'
        self.assertTrue(expected, data['translation'].split('\n')[0])

    def test_get_translation_java_code(self):
        """
        Test all way from giving code text to getting response
        Given 3 keywords, expected list of 3 translations
        """
        self.l = "Java"
        self.t = TranslationEngine(self.l)
        code_text = "for while if"
        transaltion_list, final_code_text = self.t.get_translation(code_text)
        print(transaltion_list)
        self.assertEqual(len(transaltion_list), 3)

    def test_parse_result_python_for(self):
        self.l = "Python"
        self.t = TranslationEngine(self.l)
        url = self.t.url_search("for", "keyword")
        la = LanguagesAPI()
        result, code = la.http_request_using_urlfetch(http_url=url)
        res = self.t.parse_result(result)
        self.assertEqual(res.split('\n')[0], '<div class="col-md-7 middle-col">')

    def test_get_translation_python_comment(self):
        """
        """
        self.l = "Python"
        self.t = TranslationEngine(self.l)
        code_text = "#comment"
        transaltion_list, final_code_text = self.t.get_translation(code_text)
        print(final_code_text)
        expected = '<span class="comment">#</span><span class="comment">comment</span>'
        self.assertEqual(final_code_text, expected)

    def test_add_tag(self):
        self.l = "Python"
        self.t = TranslationEngine(self.l)
        expected = '<span class="keyword">if</span>'
        res = self.t.add_tag("keyword", "if")
        self.assertEqual(expected, res)

    def test_reformat_parsed_text_keywords(self):
        self.l = "Python"
        self.parser_obj = Parser(self.l)
        self.t = TranslationEngine(self.l)
        code_text = "for if \n  while"
        print code_text
        transaltion_list, parsed = self.parser_obj.run_parser(code_text)
        expected = '<span class="keyword">for</span> <span class="keyword">if</span> \n  ' \
                   '<span class="keyword">while</span>'
        res = self.t.reformat_parsed_text(code_text, parsed)
        self.assertEqual(expected, res)

    def test_reformat_parsed_text_keywords_and_words(self):
        self.l = "Python"
        self.parser_obj = Parser(self.l)
        self.t = TranslationEngine(self.l)
        code_text = "for(i) if \n  while"
        print code_text
        transaltion_list, parsed = self.parser_obj.run_parser(code_text)
        expected = '<span class="keyword">for</span>(i) <span class="keyword">if</span> \n  ' \
                   '<span class="keyword">while</span>'
        res = self.t.reformat_parsed_text(code_text, parsed)
        self.assertEqual(expected, res)

    def test_reformat_parsed_text_comments(self):
        self.l = "Python"
        self.parser_obj = Parser(self.l)
        self.t = TranslationEngine(self.l)
        code_text = "#comment"
        print code_text
        transaltion_list, parsed = self.parser_obj.run_parser(code_text)
        expected = '<span class="comment">#</span><span class="comment">comment</span>'
        res = self.t.reformat_parsed_text(code_text, parsed)
        self.assertEqual(expected, res)

    def test_reformat_parsed_text_functions(self):
        self.l = "Python"
        self.parser_obj = Parser(self.l)
        self.t = TranslationEngine(self.l)
        code_text = "foo()"
        print code_text
        transaltion_list, parsed = self.parser_obj.run_parser(code_text)
        expected = '<span class="function">foo</span>()'
        res = self.t.reformat_parsed_text(code_text, parsed)
        self.assertEqual(expected, res)

    def test_reformat_parsed_text_strings(self):
        self.l = "Python"
        self.parser_obj = Parser(self.l)
        self.t = TranslationEngine(self.l)
        code_text = '"is a string for test"'
        print code_text
        transaltion_list, parsed = self.parser_obj.run_parser(code_text)
        expected = '"<span class="string">is a string for test</span>"'
        res = self.t.reformat_parsed_text(code_text, parsed)
        self.assertEqual(expected, res)

    def test_classification_statement(self):
        self.l = "Python"
        self.t = TranslationEngine(self.l)
        res = self.t.classify_keywords("for", KEYWORD)
        self.assertEqual(STATEMENT, res)

    def test_classification_expression(self):
        self.l = "Python"
        self.t = TranslationEngine(self.l)
        res = self.t.classify_keywords("lambda", KEYWORD)
        self.assertEqual(EXPRESSION, res)

    def test_classification_data_type(self):
        self.l = "Java"
        self.t = TranslationEngine(self.l)
        res = self.t.classify_keywords("double", KEYWORD)
        self.assertEqual(DATA_TYPE, res)

    def test_classification_operator(self):
        self.l = "Java"
        self.t = TranslationEngine(self.l)
        res = self.t.classify_keywords("instanceof", KEYWORD)
        self.assertEqual(OPERATOR, res)

    def test_parse_result_unknown_url(self):
        self.l = "Ruby"
        self.t = TranslationEngine(self.l)
        la = LanguagesAPI()
        url = "http://ruby-doc.org/docs/ruby-doc-bundle/Manual/man-1.4/function.html"
        result, code = la.http_request_using_urlfetch(http_url=url)
        res = self.t.parse_result(result)
        self.assertEqual(res, result)

    def tearDown(self):
        self.testbed.deactivate()
Example #2
0
class TranslationEngineTest(unittest.TestCase):
    def setUp(self):
        # First, create an instance of the Testbed class.
        self.testbed = testbed.Testbed()
        # Then activate the testbed, which prepares the service stubs for use.
        self.testbed.activate()
        # Next, declare which service stubs you want to use.
        self.testbed.init_datastore_v3_stub()
        self.testbed.init_memcache_stub()
        # Clear ndb's in-context cache between tests.
        # This prevents data from leaking between tests.
        # Alternatively, you could disable caching by
        # using ndb.get_context().set_cache_policy(False)
        ndb.get_context().clear_cache()
        self.testbed.init_urlfetch_stub()

    def test_google_search_for_java_get_default_url(self):
        """
        Test google search for language = java, make sure url is from the chosen site
        """
        self.l = "Java"
        self.t = TranslationEngine(self.l)
        url = self.t.url_search("for", "keyword")
        self.assertEqual(
            "https://docs.oracle.com/javase/tutorial/java/nutsandbolts/for.html",
            url)

    def test_google_search_while_python_get_default_url(self):
        """
        Test google search for language = python, make sure url is from the chosen site
        """
        self.l = "Python"
        self.t = TranslationEngine(self.l)
        url = self.t.url_search("while", "keyword")
        self.assertIn(
            "http://www.tutorialspoint.com/python/python_while_loop.htm", url)

    def test_google_search_if_python_get_default_url(self):
        """
        Test google search for language = python, make sure url is from the chosen site
        """
        self.l = "Python"
        self.t = TranslationEngine(self.l)
        url = self.t.url_search("if", "keyword")
        print url
        self.assertIn("http://www.tutorialspoint.com/python", url)

    def test_google_search_second_page_java_goto(self):
        """
        Test google search for language = java, make sure url is from the chosen site from second page
        """
        self.l = "Java"
        self.t = TranslationEngine(self.l)
        url = self.t.url_search("goto", "keyword")
        print url
        self.assertIn(
            "http://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html",
            url)

    def test_add_keyword_python_return(self):
        """
        Test add keyword for language = python, make sure the data is saved in db
        """
        self.l = "Python"
        self.t = TranslationEngine(self.l)
        self.t.add_keyword("return", "keyword")
        data = None
        try:
            data = DAL.get_data_from_db("return", "Python")
            print 20 * "-"
            print data
        except DataNotExistException:
            print "error"
        expected = '<div class="section" id="simple-statements">'
        self.assertEqual(expected, data["translation"].split('\n')[0])

    def test_parse_result_ruby_begin(self):
        self.l = "Ruby"
        self.t = TranslationEngine(self.l)
        self.t.add_keyword("begin", "keyword")
        data = None
        try:
            data = DAL.get_data_from_db("begin", "Ruby")
            print 20 * "-"
            print data
        except DataNotExistException:
            print "error"
        expected = '<div id="section">'
        self.assertEqual(expected, data["translation"].split('\n')[0])

    def test_add_keyword_java(self):
        """
        Test add keyword for language = java, make sure the data is saved in db
        """
        self.l = "Java"
        self.t = TranslationEngine(self.l)
        self.t.add_keyword("while", "keyword")
        data = None
        try:
            data = DAL.get_data_from_db("while", "Java")
            print 20 * "-"
            print data
        except DataNotExistException:
            print "error"
        expected = '<div id="PageContent">'
        self.assertEqual(expected, data["translation"].split('\n')[0])

    def test_add_keyword_ruby(self):
        """
        Test add keyword for language = ruby, make sure the data is saved in db
        """
        self.l = "Ruby"
        self.t = TranslationEngine(self.l)
        self.t.add_keyword("for", "keyword")
        data = None
        try:
            data = DAL.get_data_from_db("for", "Ruby")
            print 20 * "-"
            print data
        except DataNotExistException:
            print "error"
        expected = '<div class="col-md-7 middle-col">'
        self.assertTrue(expected, data['translation'].split('\n')[0])

    def test_get_translation_java_code(self):
        """
        Test all way from giving code text to getting response
        Given 3 keywords, expected list of 3 translations
        """
        self.l = "Java"
        self.t = TranslationEngine(self.l)
        code_text = "for while if"
        transaltion_list, final_code_text = self.t.get_translation(code_text)
        print(transaltion_list)
        self.assertEqual(len(transaltion_list), 3)

    def test_parse_result_python_for(self):
        self.l = "Python"
        self.t = TranslationEngine(self.l)
        url = self.t.url_search("for", "keyword")
        la = LanguagesAPI()
        result, code = la.http_request_using_urlfetch(http_url=url)
        res = self.t.parse_result(result)
        self.assertEqual(
            res.split('\n')[0], '<div class="col-md-7 middle-col">')

    def test_get_translation_python_comment(self):
        """
        """
        self.l = "Python"
        self.t = TranslationEngine(self.l)
        code_text = "#comment"
        transaltion_list, final_code_text = self.t.get_translation(code_text)
        print(final_code_text)
        expected = '<span class="comment">#</span><span class="comment">comment</span>'
        self.assertEqual(final_code_text, expected)

    def test_add_tag(self):
        self.l = "Python"
        self.t = TranslationEngine(self.l)
        expected = '<span class="keyword">if</span>'
        res = self.t.add_tag("keyword", "if")
        self.assertEqual(expected, res)

    def test_reformat_parsed_text_keywords(self):
        self.l = "Python"
        self.parser_obj = Parser(self.l)
        self.t = TranslationEngine(self.l)
        code_text = "for if \n  while"
        print code_text
        transaltion_list, parsed = self.parser_obj.run_parser(code_text)
        expected = '<span class="keyword">for</span> <span class="keyword">if</span> \n  ' \
                   '<span class="keyword">while</span>'
        res = self.t.reformat_parsed_text(code_text, parsed)
        self.assertEqual(expected, res)

    def test_reformat_parsed_text_keywords_and_words(self):
        self.l = "Python"
        self.parser_obj = Parser(self.l)
        self.t = TranslationEngine(self.l)
        code_text = "for(i) if \n  while"
        print code_text
        transaltion_list, parsed = self.parser_obj.run_parser(code_text)
        expected = '<span class="keyword">for</span>(i) <span class="keyword">if</span> \n  ' \
                   '<span class="keyword">while</span>'
        res = self.t.reformat_parsed_text(code_text, parsed)
        self.assertEqual(expected, res)

    def test_reformat_parsed_text_comments(self):
        self.l = "Python"
        self.parser_obj = Parser(self.l)
        self.t = TranslationEngine(self.l)
        code_text = "#comment"
        print code_text
        transaltion_list, parsed = self.parser_obj.run_parser(code_text)
        expected = '<span class="comment">#</span><span class="comment">comment</span>'
        res = self.t.reformat_parsed_text(code_text, parsed)
        self.assertEqual(expected, res)

    def test_reformat_parsed_text_functions(self):
        self.l = "Python"
        self.parser_obj = Parser(self.l)
        self.t = TranslationEngine(self.l)
        code_text = "foo()"
        print code_text
        transaltion_list, parsed = self.parser_obj.run_parser(code_text)
        expected = '<span class="function">foo</span>()'
        res = self.t.reformat_parsed_text(code_text, parsed)
        self.assertEqual(expected, res)

    def test_reformat_parsed_text_strings(self):
        self.l = "Python"
        self.parser_obj = Parser(self.l)
        self.t = TranslationEngine(self.l)
        code_text = '"is a string for test"'
        print code_text
        transaltion_list, parsed = self.parser_obj.run_parser(code_text)
        expected = '"<span class="string">is a string for test</span>"'
        res = self.t.reformat_parsed_text(code_text, parsed)
        self.assertEqual(expected, res)

    def test_classification_statement(self):
        self.l = "Python"
        self.t = TranslationEngine(self.l)
        res = self.t.classify_keywords("for", KEYWORD)
        self.assertEqual(STATEMENT, res)

    def test_classification_expression(self):
        self.l = "Python"
        self.t = TranslationEngine(self.l)
        res = self.t.classify_keywords("lambda", KEYWORD)
        self.assertEqual(EXPRESSION, res)

    def test_classification_data_type(self):
        self.l = "Java"
        self.t = TranslationEngine(self.l)
        res = self.t.classify_keywords("double", KEYWORD)
        self.assertEqual(DATA_TYPE, res)

    def test_classification_operator(self):
        self.l = "Java"
        self.t = TranslationEngine(self.l)
        res = self.t.classify_keywords("instanceof", KEYWORD)
        self.assertEqual(OPERATOR, res)

    def test_parse_result_unknown_url(self):
        self.l = "Ruby"
        self.t = TranslationEngine(self.l)
        la = LanguagesAPI()
        url = "http://ruby-doc.org/docs/ruby-doc-bundle/Manual/man-1.4/function.html"
        result, code = la.http_request_using_urlfetch(http_url=url)
        res = self.t.parse_result(result)
        self.assertEqual(res, result)

    def tearDown(self):
        self.testbed.deactivate()