Coverage for tests/test_000_frigid/test_000_package.py: 100%

50 statements  

« prev     ^ index     » next       coverage.py v7.6.8, created at 2024-12-05 01:36 +0000

1# vim: set filetype=python fileencoding=utf-8: 

2# -*- coding: utf-8 -*- 

3 

4#============================================================================# 

5# # 

6# Licensed under the Apache License, Version 2.0 (the "License"); # 

7# you may not use this file except in compliance with the License. # 

8# You may obtain a copy of the License at # 

9# # 

10# http://www.apache.org/licenses/LICENSE-2.0 # 

11# # 

12# Unless required by applicable law or agreed to in writing, software # 

13# distributed under the License is distributed on an "AS IS" BASIS, # 

14# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # 

15# See the License for the specific language governing permissions and # 

16# limitations under the License. # 

17# # 

18#============================================================================# 

19 

20 

21''' Assert basic characteristics of package and modules thereof. ''' 

22 

23# mypy: ignore-errors 

24 

25 

26import pytest 

27 

28from . import ( 

29 MODULES_NAMES_BY_MODULE_QNAME, 

30 MODULES_QNAMES, 

31 PACKAGE_NAME, 

32 PACKAGES_NAMES, 

33 PACKAGES_NAMES_BY_MODULE_QNAME, 

34 cache_import_module, 

35) 

36 

37 

38@pytest.mark.parametrize( 'package_name', PACKAGES_NAMES ) 

39def test_000_sanity( package_name ): 

40 ''' Package is sane. ''' 

41 package = cache_import_module( package_name ) 

42 assert package.__package__ == package_name 

43 assert package.__name__ == package_name 

44 

45 

46@pytest.mark.parametrize( 'module_qname', MODULES_QNAMES ) 

47def test_010_attribute_module_existence( module_qname ): 

48 ''' Package module is attribute of package. ''' 

49 package_name = PACKAGES_NAMES_BY_MODULE_QNAME[ module_qname ] 

50 package = cache_import_module( package_name ) 

51 module_name = MODULES_NAMES_BY_MODULE_QNAME[ module_qname ] 

52 assert module_name in package.__dict__ 

53 

54 

55@pytest.mark.parametrize( 'module_qname', MODULES_QNAMES ) 

56def test_011_attribute_module_classification( module_qname ): 

57 ''' Package attribute is module. ''' 

58 from inspect import ismodule 

59 package_name = PACKAGES_NAMES_BY_MODULE_QNAME[ module_qname ] 

60 package = cache_import_module( package_name ) 

61 module_name = MODULES_NAMES_BY_MODULE_QNAME[ module_qname ] 

62 assert ismodule( getattr( package, module_name ) ) 

63 

64 

65@pytest.mark.parametrize( 

66 'module_qname', 

67 ( module_qname for module_qname, module_name 

68 in MODULES_NAMES_BY_MODULE_QNAME.items( ) 

69 if not module_name.startswith( '_' ) ) 

70) 

71def test_012_attribute_module_visibility( module_qname ): 

72 ''' Package module is in package attributes directory. ''' 

73 package_name = PACKAGES_NAMES_BY_MODULE_QNAME[ module_qname ] 

74 package = cache_import_module( package_name ) 

75 module_name = MODULES_NAMES_BY_MODULE_QNAME[ module_qname ] 

76 assert module_name in dir( package ) 

77 

78 

79@pytest.mark.parametrize( 

80 'module_qname', 

81 ( module_qname for module_qname, module_name 

82 in MODULES_NAMES_BY_MODULE_QNAME.items( ) 

83 if module_name.startswith( '_' ) ) 

84) 

85def test_013_attribute_module_invisibility( module_qname ): 

86 ''' Package module is not in package attributes directory. ''' 

87 package_name = PACKAGES_NAMES_BY_MODULE_QNAME[ module_qname ] 

88 package = cache_import_module( package_name ) 

89 module_name = MODULES_NAMES_BY_MODULE_QNAME[ module_qname ] 

90 assert module_name not in dir( package ) 

91 

92 

93@pytest.mark.parametrize( 'aname', ( '__version__', ) ) 

94def test_015_miscellaneous_attribute_existence( aname ): 

95 ''' Miscellaneous attribute exists in package. ''' 

96 package = cache_import_module( PACKAGE_NAME ) 

97 assert aname in package.__dict__ 

98 

99 

100@pytest.mark.parametrize( 'aname, aclass', ( ( '__version__', str ), ) ) 

101def test_016_miscellaneous_attribute_classification( aname, aclass ): 

102 ''' Miscellaaneous attribute is correct class. ''' 

103 package = cache_import_module( PACKAGE_NAME ) 

104 assert isinstance( getattr( package, aname ), aclass ) 

105 

106 

107@pytest.mark.parametrize( 'aname', ( '__version__', ) ) 

108def test_017_miscellaneous_attribute_visibility( aname ): 

109 ''' Miscellaneous attribute is in package attributes directory. ''' 

110 package = cache_import_module( PACKAGE_NAME ) 

111 assert aname in dir( package ) 

112 

113 

114@pytest.mark.parametrize( 'module_qname', MODULES_QNAMES ) 

115def test_100_sanity( module_qname ): 

116 ''' Package module is sane. ''' 

117 package_name = PACKAGES_NAMES_BY_MODULE_QNAME[ module_qname ] 

118 module = cache_import_module( module_qname ) 

119 assert module.__package__ == package_name 

120 assert module.__name__ == module_qname