From 3968c32fa92a0aea5bb5c03b139c3b4b78aabcc1 Mon Sep 17 00:00:00 2001 From: Gavin D'souza Date: Thu, 11 Aug 2022 16:59:08 +0530 Subject: [PATCH] test: Add test for lazy_import --- frappe/tests/data/load_sleep.py | 4 ++++ frappe/tests/test_utils.py | 28 ++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 frappe/tests/data/load_sleep.py diff --git a/frappe/tests/data/load_sleep.py b/frappe/tests/data/load_sleep.py new file mode 100644 index 0000000000..1794bcf6fe --- /dev/null +++ b/frappe/tests/data/load_sleep.py @@ -0,0 +1,4 @@ +# File for testing lazy_import util via test_lazy_import_module +import time + +print("Module `frappe.tests.data.load_sleep` loaded") diff --git a/frappe/tests/test_utils.py b/frappe/tests/test_utils.py index 99b5c0f06b..6b6127070f 100644 --- a/frappe/tests/test_utils.py +++ b/frappe/tests/test_utils.py @@ -4,10 +4,12 @@ import io import json import os +import sys import unittest from datetime import date, datetime, time, timedelta from decimal import Decimal from enum import Enum +from io import StringIO from mimetypes import guess_type from unittest.mock import patch @@ -48,6 +50,19 @@ from frappe.utils.make_random import can_make, get_random, how_many from frappe.utils.response import json_handler +class Capturing(list): + # ref: https://stackoverflow.com/a/16571630/10309266 + def __enter__(self): + self._stdout = sys.stdout + sys.stdout = self._stringio = StringIO() + return self + + def __exit__(self, *args): + self.extend(self._stringio.getvalue().splitlines()) + del self._stringio + sys.stdout = self._stdout + + class TestFilters(unittest.TestCase): def test_simple_dict(self): self.assertTrue(evaluate_filters({"doctype": "User", "status": "Open"}, {"status": "Open"})) @@ -691,3 +706,16 @@ class TestMakeRandom(unittest.TestCase): def test_how_many(self): self.assertIsInstance(how_many("User"), int) + + +class TestLazyLoader(unittest.TestCase): + def test_lazy_import_module(self): + from frappe.utils.lazy_loader import lazy_import + + with Capturing() as output: + ls = lazy_import("frappe.tests.data.load_sleep") + self.assertEqual(output, []) + + with Capturing() as output: + ls.time + self.assertEqual(["Module `frappe.tests.data.load_sleep` loaded"], output)