예제 #1
0
    def test_render_GET_RTLlang(self):
        """Test rendering a request for plain bridges in Arabic."""

        if 'ar' not in _langs.get_langs():
            self.skipTest("'ar' language unsupported")

        self.useBenignBridges()

        request = DummyRequest([b"bridges?transport=obfs3"])
        request.method = b'GET'
        request.getClientIP = lambda: '3.3.3.3'
        # For some strange reason, the 'Accept-Language' value *should not* be
        # a list, unlike all the other headers and args…
        request.headers.update({'accept-language': 'ar,en,en_US,'})

        page = self.bridgesResource.render(request)
        self.assertSubstring(b"rtl.css", page)
        self.assertSubstring(
            # "I need an alternative way to get bridges!"
            "أحتاج إلى وسيلة بديلة للحصول على bridges".encode("utf-8"),
            page)

        for bridgeLine in self.parseBridgesFromHTMLPage(page):
            # Check that each bridge line had the expected number of fields:
            bridgeLine = bridgeLine.split(' ')
            self.assertEqual(len(bridgeLine), 2)
예제 #2
0
def getSupportedLangs():
    """Return all supported languages.

    :rtype: set
    :returns: A set of language locales, e.g.: set(['el', 'eo', ..., ]).
    """

    return _langs.get_langs()
예제 #3
0
    def test_HowtoResource_render_GET_lang_ru(self):
        """renderGet() with ?lang=ru should return the howto page in Russian."""

        if 'ru' not in _langs.get_langs():
            self.skipTest("'ru' language unsupported")

        request = DummyRequest([self.pagename])
        request.method = b'GET'
        request.addArg(b'lang', 'ru')
        page = self.howtoResource.render_GET(request)
        self.assertSubstring("Как использовать мосты".encode("utf-8"), page)
예제 #4
0
    def test_IndexResource_render_GET_lang_ta(self):
        """renderGet() with ?lang=ta should return the index page in Tamil."""

        if 'ta' not in _langs.get_langs():
            self.skipTest("'ta' language unsupported")

        request = DummyRequest([self.pagename])
        request.method = b'GET'
        request.addArg(b'lang', 'ta')
        page = self.indexResource.render_GET(request)
        self.assertSubstring("bridge-களை Tor Browser-உள்".encode("utf-8"),
                             page)
예제 #5
0
def getFirstSupportedLang(langs):
    """Return the first language in **langs** that we support.

    :param list langs: All requested languages
    :rtype: str
    :returns: A country code for the client's preferred language.
    """
    lang = 'en-US'
    supported = _langs.get_langs()

    for l in langs:
        if l in supported:
            lang = l
            break
    return lang
예제 #6
0
def getFirstSupportedLang(langs):
    """Return the first language in **langs** that we support.

    :param list langs: All requested languages
    :rtype: str
    :returns: A country code for the client's preferred language.
    """
    lang = 'en-US'
    supported = _langs.get_langs()

    for l in langs:
        if l in supported:
            lang = l
            break
    return lang
예제 #7
0
    def test_render_GET_RTLlang(self):
        """Test rendering a request for obfs3 bridges in Hebrew."""

        if 'he' not in _langs.get_langs():
            self.skipTest("'ar' language unsupported")

        request = DummyRequest(["bridges?transport=obfs3"])
        request.method = b'GET'
        request.getClientIP = lambda: '3.3.3.3'
        request.headers.update({'accept-language': 'he'})
        # We actually have to set the request args manually when using a
        # DummyRequest:
        request.args.update({'transport': ['obfs2']})

        page = self.optionsResource.render(request)
        self.assertSubstring(b"rtl.css", page)
        self.assertSubstring("מהם גשרים?".encode("utf-8"), page)
예제 #8
0
def getFirstSupportedLang(langs):
    """Return the first language in **langs** that we support.

    :param list langs: All requested languages
    :rtype: str
    :returns: A country code for the client's preferred language.
    """
    lang = 'en-US'
    supported = _langs.get_langs()

    for l in langs:
        if l in supported:
            lang = l
            break

    # crop locales (like 'en-US') to just the language

    return lang.split('-')[0]
예제 #9
0
    def test_render_GET_RTLlang_obfs3(self):
        """Test rendering a request for obfs3 bridges in Farsi."""

        if 'fa' not in _langs.get_langs():
            self.skipTest("'ar' language unsupported")

        self.useBenignBridges()

        request = DummyRequest([b"bridges?transport=obfs3"])
        request.method = b'GET'
        request.getClientIP = lambda: '3.3.3.3'
        request.headers.update({'accept-language': 'fa,en,en_US,'})
        # We actually have to set the request args manually when using a
        # DummyRequest:
        request.args.update({'transport': ['obfs3']})

        page = self.bridgesResource.render(request)
        self.assertSubstring(b"rtl.css", page)
        self.assertSubstring(
            # "How to use the above bridge lines" (since there should be
            # bridges in this response, we don't tell them about alternative
            # mechanisms for getting bridges)
            "چگونگی از پل‌های خود استفاده کنید".encode("utf-8"),
            page)

        for bridgeLine in self.parseBridgesFromHTMLPage(page):
            # Check that each bridge line had the expected number of fields:
            bridgeLine = bridgeLine.split(' ')
            self.assertEqual(len(bridgeLine), 3)
            self.assertEqual(bridgeLine[0], 'obfs3')

            # Check that the IP and port seem okay:
            ip, port = bridgeLine[1].rsplit(':')
            self.assertIsInstance(ipaddress.ip_address(ip),
                                  ipaddress.IPv4Address)
            self.assertIsInstance(int(port), int)
            self.assertGreater(int(port), 0)
            self.assertLessEqual(int(port), 65535)
예제 #10
0
    def test_usingRTLLang(self):
        self.assertFalse(translations.usingRTLLang(['foo_BAR']))
        self.assertFalse(translations.usingRTLLang(['en']))

        if 'fa' in _langs.get_langs():
            self.assertTrue(translations.usingRTLLang(['fa']))