1# Copyright (c) 2020, Manfred Moitzi 2# License: MIT License 3import pytest 4 5from ezdxf.lldxf.validator import ( 6 is_in_integer_range, is_valid_aci_color, is_valid_layer_name, 7 is_valid_lineweight, is_not_null_vector, is_positive, 8 fix_lineweight, is_integer_bool, is_valid_one_line_text, 9 fix_one_line_text, is_not_zero, is_not_negative, is_one_of, 10 is_in_float_range, fit_into_float_range, fix_integer_bool, 11 fit_into_integer_range, is_valid_bitmask, fix_bitmask, 12 is_greater_or_equal_zero 13) 14from ezdxf.entities.layer import is_valid_layer_color_index, fix_layer_color 15 16 17def test_invalid_layer_name(): 18 assert is_valid_layer_name('Layer Layer') is True 19 assert is_valid_layer_name('Layer/') is False 20 assert is_valid_layer_name('Layer*') is False 21 assert is_valid_layer_name('*Layer') is False 22 assert is_valid_layer_name('Layer=') is False 23 assert is_valid_layer_name('Layer;') is False 24 assert is_valid_layer_name('Layer:') is False 25 assert is_valid_layer_name('Layer<') is False 26 assert is_valid_layer_name('Layer>') is False 27 assert is_valid_layer_name('Layer`') is False 28 assert is_valid_layer_name('\\Layer`') is False 29 assert is_valid_layer_name('"Layer"') is False 30 31 32def test_strange_but_valid_layer_name(): 33 assert is_valid_layer_name('Layer|Layer') is True 34 35 36def test_is_adsk_special_layer(): 37 assert is_valid_layer_name('*adsk_xyz') is True 38 assert is_valid_layer_name('*ADSK_xyz') is True 39 assert is_valid_layer_name('ADSK_xyz*') is False 40 41 42def test_is_valid_lineweight(): 43 assert is_valid_lineweight(0) is True 44 assert is_valid_lineweight(50) is True 45 assert is_valid_lineweight(211) is True 46 assert is_valid_lineweight(-4) is False, 'is too small' 47 assert is_valid_lineweight(212) is False, 'is too big' 48 assert is_valid_lineweight(10) is False 49 50 51def test_lineweight_fixer(): 52 assert fix_lineweight(-4) == -1, 'too small, fix as BYLAYER' 53 assert fix_lineweight(212) == 211, 'too big, fix as biggest lineweight' 54 assert fix_lineweight(10) == 13, 'invalid, fix as next valid lineweight' 55 56 57def test_is_valid_aci_color(): 58 assert is_valid_aci_color(-1) is False 59 assert is_valid_aci_color(0) is True 60 assert is_valid_aci_color(257) is True 61 assert is_valid_aci_color(258) is False 62 63 64def test_is_in_integer_range(): 65 validator = is_in_integer_range(1, 10) 66 assert validator(0) is False 67 assert validator(1) is True 68 assert validator(9) is True 69 assert validator(10) is False, 'exclude end value' 70 71 72def test_fit_into_integer_range(): 73 fixer = fit_into_integer_range(0, 6) 74 assert fixer(-1) == 0 75 assert fixer(0) == 0 76 assert fixer(5) == 5 77 assert fixer(6) == 5, 'exclude end value' 78 79 80def test_is_in_float_range(): 81 validator = is_in_float_range(1, 10) 82 assert validator(0) is False 83 assert validator(1) is True 84 assert validator(9) is True 85 assert validator(10) is True, 'include end value' 86 87 88def test_fit_into_float_range(): 89 fixer = fit_into_float_range(0.25, 4.00) 90 assert fixer(0.24) == 0.25 91 assert fixer(0.25) == 0.25 92 assert fixer(0.50) == 0.50 93 assert fixer(4.00) == 4.00, 'include end value' 94 assert fixer(4.01) == 4.00 95 96 97def test_is_not_null_vector(): 98 assert is_not_null_vector((0, 0, 1)) is True 99 assert is_not_null_vector((0, 1, 0)) is True 100 assert is_not_null_vector((1, 0, 0)) is True 101 assert is_not_null_vector((0, 0, 0)) is False 102 103 104def test_is_positive_value(): 105 assert is_positive(1) is True 106 assert is_positive(0.5) is True 107 assert is_positive(0) is False 108 assert is_positive(0.0) is False 109 assert is_positive(-1) is False 110 111 112def test_is_integer_bool(): 113 assert is_integer_bool(0) is True 114 assert is_integer_bool(1) is True 115 assert is_integer_bool(2) is False 116 assert is_integer_bool(-1) is False 117 118 119def test_fix_integer_bool(): 120 assert fix_integer_bool(0) == 0 121 assert fix_integer_bool(1) == 1 122 assert fix_integer_bool(None) == 0 123 assert fix_integer_bool('') == 0 124 assert fix_integer_bool('A') == 1 125 assert fix_integer_bool(2) == 1 126 assert fix_integer_bool(-1) == 1 127 128 129@pytest.mark.parametrize('invalid_text', [ 130 'test\ntext\r', 131 'test\r\ntext', 132 'testtext^', 133 'test\ntext^', 134 'test\ntext^\r', 135]) 136def test_is_valid_one_line_text(invalid_text): 137 assert is_valid_one_line_text(invalid_text) is False 138 139 140@pytest.mark.parametrize('invalid_text', [ 141 'test\ntext\r', 142 'test\r\ntext', 143 'testtext^', 144 'test\ntext^', 145 'test\ntext^\r', 146]) 147def test_fix_invalid_one_line_text(invalid_text): 148 assert fix_one_line_text(invalid_text) == 'testtext' 149 150 151def test_is_not_negative(): 152 assert is_not_negative(-1) is False 153 assert is_not_negative(-1e-9) is False 154 assert is_not_negative(0) is True 155 assert is_not_negative(1e-9) is True 156 assert is_not_negative(1) is True 157 158 159def test_is_not_zero(): 160 assert is_not_zero(-1) is True 161 assert is_not_zero(-1e-9) is True 162 assert is_not_zero(1e-9) is True 163 assert is_not_zero(1) is True 164 assert is_not_zero(0) is False 165 assert is_not_zero(0.0) is False 166 assert is_not_zero(1e-12) is False 167 assert is_not_zero(-1e-12) is False 168 169 170def test_is_one_of(): 171 _validator = is_one_of({1, 3, 5}) 172 assert _validator(0) is False 173 assert _validator(2) is False 174 assert _validator(4) is False 175 assert _validator(1) is True 176 assert _validator(3) is True 177 assert _validator(5) is True 178 179 180def test_is_greater_or_equal_zero(): 181 assert is_greater_or_equal_zero(-1) is False 182 assert is_greater_or_equal_zero(0) is True 183 assert is_greater_or_equal_zero(1) is True 184 185 186def test_is_valid_bitmask(): 187 validator = is_valid_bitmask(3) 188 assert validator(0) is True 189 assert validator(1) is True 190 assert validator(2) is True 191 assert validator(3) is True 192 assert validator(4) is False 193 194 195def test_fix_bitmask(): 196 fixer = fix_bitmask(3) 197 assert fixer(0) == 0 198 assert fixer(1) == 1 199 assert fixer(2) == 2 200 assert fixer(3) == 3 201 assert fixer(4) == 0 202 assert fixer(5) == 1 203 204 205@pytest.mark.parametrize('aci', [255, -7, -1, 1, 7, 255]) 206def test_is_valid_layer_color(aci): 207 assert is_valid_layer_color_index(aci) is True 208 assert fix_layer_color(aci) == aci 209 210 211@pytest.mark.parametrize('aci', [256, 0, 256]) 212def test_is_not_valid_layer_color(aci): 213 assert is_valid_layer_color_index(aci) is False 214 assert fix_layer_color(aci) == 7 215 216 217if __name__ == '__main__': 218 pytest.main([__file__]) 219