mirror of
https://github.com/gradio-app/gradio.git
synced 2024-12-21 02:19:59 +08:00
4bd609bcc0
* allow markdown to be set dynamically * moved markdown to output section * added aliases for component names * added aliases * fixed optional * formatting * tests * tests * tests
189 lines
5.9 KiB
Python
189 lines
5.9 KiB
Python
import ipaddress
|
|
import os
|
|
import unittest
|
|
import unittest.mock as mock
|
|
import warnings
|
|
|
|
import pkg_resources
|
|
import requests
|
|
|
|
from gradio.test_data.blocks_configs import (
|
|
XRAY_CONFIG,
|
|
XRAY_CONFIG_DIFF_IDS,
|
|
XRAY_CONFIG_WITH_MISTAKE,
|
|
)
|
|
from gradio.utils import (
|
|
assert_configs_are_equivalent_besides_ids,
|
|
colab_check,
|
|
delete_none,
|
|
error_analytics,
|
|
format_ner_list,
|
|
get_local_ip_address,
|
|
ipython_check,
|
|
json,
|
|
launch_analytics,
|
|
readme_to_html,
|
|
version_check,
|
|
)
|
|
|
|
os.environ["GRADIO_ANALYTICS_ENABLED"] = "False"
|
|
|
|
|
|
class TestUtils(unittest.TestCase):
|
|
@mock.patch("pkg_resources.require")
|
|
def test_should_fail_with_distribution_not_found(self, mock_require):
|
|
|
|
mock_require.side_effect = pkg_resources.DistributionNotFound()
|
|
|
|
with warnings.catch_warnings(record=True) as w:
|
|
warnings.simplefilter("always")
|
|
version_check()
|
|
self.assertEqual(
|
|
str(w[-1].message),
|
|
"gradio is not setup or installed properly. Unable to get version info.",
|
|
)
|
|
|
|
@mock.patch("requests.get")
|
|
def test_should_warn_with_unable_to_parse(self, mock_get):
|
|
|
|
mock_get.side_effect = json.decoder.JSONDecodeError("Expecting value", "", 0)
|
|
|
|
with warnings.catch_warnings(record=True) as w:
|
|
warnings.simplefilter("always")
|
|
version_check()
|
|
self.assertEqual(
|
|
str(w[-1].message), "unable to parse version details from package URL."
|
|
)
|
|
|
|
@mock.patch("requests.Response.json")
|
|
def test_should_warn_url_not_having_version(self, mock_json):
|
|
|
|
mock_json.return_value = {"foo": "bar"}
|
|
|
|
with warnings.catch_warnings(record=True) as w:
|
|
warnings.simplefilter("always")
|
|
version_check()
|
|
self.assertEqual(
|
|
str(w[-1].message), "package URL does not contain version info."
|
|
)
|
|
|
|
@mock.patch("requests.post")
|
|
def test_error_analytics_doesnt_crash_on_connection_error(self, mock_post):
|
|
|
|
mock_post.side_effect = requests.ConnectionError()
|
|
error_analytics("placeholder", "placeholder")
|
|
mock_post.assert_called()
|
|
|
|
@mock.patch("requests.post")
|
|
def test_error_analytics_successful(self, mock_post):
|
|
error_analytics("placeholder", "placeholder")
|
|
mock_post.assert_called()
|
|
|
|
@mock.patch("requests.post")
|
|
def test_launch_analytics_doesnt_crash_on_connection_error(self, mock_post):
|
|
mock_post.side_effect = requests.ConnectionError()
|
|
launch_analytics(data={})
|
|
mock_post.assert_called()
|
|
|
|
@mock.patch("IPython.get_ipython")
|
|
def test_colab_check_no_ipython(self, mock_get_ipython):
|
|
mock_get_ipython.return_value = None
|
|
assert colab_check() is False
|
|
|
|
@mock.patch("IPython.get_ipython")
|
|
def test_ipython_check_import_fail(self, mock_get_ipython):
|
|
mock_get_ipython.side_effect = ImportError()
|
|
assert ipython_check() is False
|
|
|
|
@mock.patch("IPython.get_ipython")
|
|
def test_ipython_check_no_ipython(self, mock_get_ipython):
|
|
mock_get_ipython.return_value = None
|
|
assert ipython_check() is False
|
|
|
|
@mock.patch("requests.get")
|
|
def test_readme_to_html_doesnt_crash_on_connection_error(self, mock_get):
|
|
mock_get.side_effect = requests.ConnectionError()
|
|
readme_to_html("placeholder")
|
|
|
|
def test_readme_to_html_correct_parse(self):
|
|
readme_to_html("https://github.com/gradio-app/gradio/blob/master/README.md")
|
|
|
|
|
|
class TestIPAddress(unittest.TestCase):
|
|
# def test_get_ip(self): # Removed test because internet is flaky on circleci
|
|
# ip = get_local_ip_address()
|
|
# try: # check whether ip is valid
|
|
# ipaddress.ip_address(ip)
|
|
# except ValueError:
|
|
# self.fail("Invalid IP address")
|
|
|
|
@mock.patch("requests.get")
|
|
def test_get_ip_without_internet(self, mock_get):
|
|
mock_get.side_effect = requests.ConnectionError()
|
|
ip = get_local_ip_address()
|
|
self.assertEqual(ip, "No internet connection")
|
|
|
|
|
|
class TestAssertConfigsEquivalent(unittest.TestCase):
|
|
def test_same_configs(self):
|
|
self.assertTrue(
|
|
assert_configs_are_equivalent_besides_ids(XRAY_CONFIG, XRAY_CONFIG)
|
|
)
|
|
|
|
def test_equivalent_configs(self):
|
|
self.assertTrue(
|
|
assert_configs_are_equivalent_besides_ids(XRAY_CONFIG, XRAY_CONFIG_DIFF_IDS)
|
|
)
|
|
|
|
def test_different_configs(self):
|
|
with self.assertRaises(AssertionError):
|
|
assert_configs_are_equivalent_besides_ids(
|
|
XRAY_CONFIG_WITH_MISTAKE, XRAY_CONFIG
|
|
)
|
|
|
|
|
|
class TestFormatNERList(unittest.TestCase):
|
|
def test_format_ner_list_standard(self):
|
|
string = "Wolfgang lives in Berlin"
|
|
groups = [
|
|
{"entity_group": "PER", "start": 0, "end": 8},
|
|
{"entity_group": "LOC", "start": 18, "end": 24},
|
|
]
|
|
result = [
|
|
("", None),
|
|
("Wolfgang", "PER"),
|
|
(" lives in ", None),
|
|
("Berlin", "LOC"),
|
|
("", None),
|
|
]
|
|
self.assertEqual(format_ner_list(string, groups), result)
|
|
|
|
def test_format_ner_list_empty(self):
|
|
string = "I live in a city"
|
|
groups = []
|
|
result = [("I live in a city", None)]
|
|
self.assertEqual(format_ner_list(string, groups), result)
|
|
|
|
|
|
class TestDeleteNone(unittest.TestCase):
|
|
"""Credit: https://stackoverflow.com/questions/33797126/proper-way-to-remove-keys-in-dictionary-with-none-values-in-python"""
|
|
|
|
def test_delete_none(self):
|
|
input = {
|
|
"a": 12,
|
|
"b": 34,
|
|
"c": None,
|
|
"k": {
|
|
"d": 34,
|
|
"t": None,
|
|
"m": [{"k": 23, "t": None}, [None, 1, 2, 3], {1, 2, None}],
|
|
None: 123,
|
|
},
|
|
}
|
|
truth = {"a": 12, "b": 34, "k": {"d": 34, "m": [{"k": 23}, [1, 2, 3], {1, 2}]}}
|
|
self.assertEqual(delete_none(input), truth)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|