1from copy import copy, deepcopy 2 3from pytest import raises 4 5from graphql.pyutils import FrozenError, FrozenList 6 7 8def describe_frozen_list(): 9 def can_read(): 10 fl = FrozenList([1, 2, 3]) 11 assert fl == [1, 2, 3] 12 assert list(i for i in fl) == fl 13 assert fl.copy() == fl 14 assert 2 in fl 15 assert 4 not in fl 16 assert fl + [4, 5] == [1, 2, 3, 4, 5] 17 assert [4, 5] + fl == [4, 5, 1, 2, 3] 18 assert fl * 2 == [1, 2, 3, 1, 2, 3] 19 assert 2 * fl == [1, 2, 3, 1, 2, 3] 20 assert fl[1] == 2 21 with raises(IndexError): 22 fl[3] 23 assert fl[1:4] == [2, 3] 24 assert fl[::2] == [1, 3] 25 assert len(fl) == 3 26 assert min(fl) == 1 27 assert max(fl) == 3 28 assert sum(fl) == 6 29 assert fl.index(2) == 1 30 with raises(ValueError): 31 fl.index(4) 32 assert fl.count(2) == 1 33 assert fl.count(4) == 0 34 assert list(reversed(fl)) == [3, 2, 1] 35 assert sorted(fl) == [1, 2, 3] 36 37 def cannot_write(): 38 fl = FrozenList([1, 2, 3]) 39 with raises(FrozenError): 40 fl[1] = 4 41 with raises(FrozenError): 42 fl[1:4] = [4] 43 with raises(FrozenError): 44 del fl[1] 45 with raises(FrozenError): 46 del fl[1:4] 47 with raises(FrozenError): 48 fl[1::2] = [4] 49 with raises(FrozenError): 50 del fl[::2] 51 with raises(FrozenError): 52 fl.append(4) 53 with raises(FrozenError): 54 fl.clear() 55 with raises(FrozenError): 56 fl.extend([4]) 57 with raises(FrozenError): 58 fl += [4] 59 with raises(FrozenError): 60 fl *= 2 61 with raises(FrozenError): 62 fl.insert(1, 4) 63 with raises(FrozenError): 64 fl.pop() 65 with raises(FrozenError): 66 fl.remove(2) 67 with raises(FrozenError): 68 fl.sort() 69 with raises(FrozenError): 70 fl.reverse() 71 assert fl == [1, 2, 3] 72 73 def can_add_rol(): 74 fl1 = FrozenList([1, 2]) 75 rol2 = FrozenList([3, 4]) 76 assert fl1 + rol2 == [1, 2, 3, 4] 77 78 def can_add_tuple(): 79 fl = FrozenList([1, 2]) 80 assert fl + (3, 4) == [1, 2, 3, 4] 81 82 def can_hash(): 83 fl1 = FrozenList([1, 2]) 84 fl2 = FrozenList([1, 2]) 85 assert fl2 == fl1 86 assert fl2 is not fl1 87 assert hash(fl2) == hash(fl1) 88 fl3 = FrozenList([1, 3]) 89 assert fl3 != fl1 90 assert hash(fl3) != hash(fl1) 91 92 def can_copy(): 93 fl1 = FrozenList([1, 2]) 94 fl2 = copy(fl1) 95 assert isinstance(fl2, FrozenList) 96 assert fl2 == fl1 97 assert hash(fl2) == hash(fl1) 98 assert fl2 is not fl1 99 100 def can_deep_copy(): 101 fl11 = FrozenList([1, 2]) 102 fl12 = FrozenList([2, 1]) 103 fl1 = FrozenList([fl11, fl12]) 104 fl2 = deepcopy(fl1) 105 assert isinstance(fl2, FrozenList) 106 assert fl2 == fl1 107 assert hash(fl2) == hash(fl1) 108 assert isinstance(fl2[0], FrozenList) 109 assert isinstance(fl2[1], FrozenList) 110 assert fl2[0] == fl1[0] 111 assert fl2[0] is not fl1[0] 112 assert fl2[1] == fl1[1] 113 assert fl2[1] is not fl1[1] 114