# Copyright (c) Huawei Technologies Co., Ltd. 2026-2026. All rights reserved.
# OpenOLC is licensed under Mulan PSL v2.
# You can use this software according to the terms and conditions of the Mulan PSL v2.
# You may obtain a copy of Mulan PSL v2 at:
#         `http://license.coscl.org.cn/MulanPSL2`
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
# See the Mulan PSL v2 for more details.

import unittest
from olc.utils.empty_checker import EmptyChecker

class TestEmptyChecker(unittest.TestCase):
    """
    测试EmptyChecker类的功能
    """
    
    def test_is_empty_none(self):
        """测试None值"""
        self.assertTrue(EmptyChecker.is_empty(None))
    
    def test_is_empty_list(self):
        """测试列表"""
        self.assertTrue(EmptyChecker.is_empty([]))
        self.assertFalse(EmptyChecker.is_empty([1, 2, 3]))
    
    def test_is_empty_dict(self):
        """测试字典"""
        self.assertTrue(EmptyChecker.is_empty({}))
        self.assertFalse(EmptyChecker.is_empty({"a": 1}))
    
    def test_is_empty_set(self):
        """测试集合"""
        self.assertTrue(EmptyChecker.is_empty(set()))
        self.assertFalse(EmptyChecker.is_empty({1, 2, 3}))
    
    def test_is_empty_string(self):
        """测试字符串"""
        self.assertTrue(EmptyChecker.is_empty(""))
        self.assertTrue(EmptyChecker.is_empty("   "))
        self.assertFalse(EmptyChecker.is_empty("hello"))
    
    def test_is_empty_tuple(self):
        """测试元组"""
        self.assertTrue(EmptyChecker.is_empty(()))
        self.assertFalse(EmptyChecker.is_empty((1, 2, 3)))
    
    def test_is_empty_bytes(self):
        """测试字节串"""
        self.assertTrue(EmptyChecker.is_empty(b""))
        self.assertFalse(EmptyChecker.is_empty(b"hello"))
    
    def test_is_empty_bytearray(self):
        """测试字节数组"""
        self.assertTrue(EmptyChecker.is_empty(bytearray()))
        self.assertFalse(EmptyChecker.is_empty(bytearray(b"hello")))
    
    def test_is_empty_generator(self):
        """测试生成器"""
        def empty_gen():
            if False:
                yield 1
        
        def non_empty_gen():
            yield 1
        
        self.assertTrue(EmptyChecker.is_empty(empty_gen()))
        self.assertFalse(EmptyChecker.is_empty(non_empty_gen()))
    
    def test_is_empty_iterator(self):
        """测试迭代器"""
        empty_iter = iter([])
        non_empty_iter = iter([1, 2, 3])
        
        self.assertTrue(EmptyChecker.is_empty(empty_iter))
        self.assertFalse(EmptyChecker.is_empty(non_empty_iter))
    
    def test_is_empty_specific_methods(self):
        """测试特定容器类型的方法"""
        # 测试列表
        self.assertTrue(EmptyChecker.is_empty_list(None))
        self.assertTrue(EmptyChecker.is_empty_list([]))
        self.assertFalse(EmptyChecker.is_empty_list([1, 2, 3]))
        
        # 测试字典
        self.assertTrue(EmptyChecker.is_empty_dict(None))
        self.assertTrue(EmptyChecker.is_empty_dict({}))
        self.assertFalse(EmptyChecker.is_empty_dict({"a": 1}))
        
        # 测试集合
        self.assertTrue(EmptyChecker.is_empty_set(None))
        self.assertTrue(EmptyChecker.is_empty_set(set()))
        self.assertFalse(EmptyChecker.is_empty_set({1, 2, 3}))
        
        # 测试字符串
        self.assertTrue(EmptyChecker.is_empty_string(None))
        self.assertTrue(EmptyChecker.is_empty_string(""))
        self.assertTrue(EmptyChecker.is_empty_string("   "))
        self.assertFalse(EmptyChecker.is_empty_string("hello"))
        
        # 测试元组
        self.assertTrue(EmptyChecker.is_empty_tuple(None))
        self.assertTrue(EmptyChecker.is_empty_tuple(()))
        self.assertFalse(EmptyChecker.is_empty_tuple((1, 2, 3)))
        
        # 测试字节串
        self.assertTrue(EmptyChecker.is_empty_bytes(None))
        self.assertTrue(EmptyChecker.is_empty_bytes(b""))
        self.assertFalse(EmptyChecker.is_empty_bytes(b"hello"))
        
        # 测试字节数组
        self.assertTrue(EmptyChecker.is_empty_bytearray(None))
        self.assertTrue(EmptyChecker.is_empty_bytearray(bytearray()))
        self.assertFalse(EmptyChecker.is_empty_bytearray(bytearray(b"hello")))
        
        # 测试可迭代对象
        self.assertTrue(EmptyChecker.is_empty_iterable(None))
        self.assertTrue(EmptyChecker.is_empty_iterable([]))
        self.assertFalse(EmptyChecker.is_empty_iterable([1, 2, 3]))

if __name__ == "__main__":
    unittest.main()