def test_readonly(counter_type): fc = FeatureCollection({ 'hello': counter_type(Counter('hello')), 'goodbye': counter_type(Counter('goodbye')) }) fc2 = FeatureCollection({ 'hello': counter_type(Counter('hello')), 'goodbye': counter_type(Counter('goodbye')) }) fc.read_only = True with pytest.raises(ReadOnlyException): fc += fc2 with pytest.raises(ReadOnlyException): fc -= fc2 with pytest.raises(ReadOnlyException): fc *= 2 with pytest.raises(ReadOnlyException): fc['woof'] = StringCounter() if hasattr(counter_type, 'read_only'): with pytest.raises(ReadOnlyException): fc['hello']['l'] = 3 with pytest.raises(ReadOnlyException): fc['hello']['l'] += 3 fc.read_only = False fc += fc2 assert Counter(map(abs, fc['hello'].values())) == Counter({2: 3, 4: 1}) fc -= fc2 fc -= fc2 assert Counter(map(abs, fc['hello'].values())) == Counter()
def test_read_only_binop(): fc1 = FeatureCollection({'NAME': {'foo': 1, 'bar': 1}}) fc2 = FeatureCollection({'NAME': {'foo': 2, 'bar': 2}}) fc1.read_only = True fc2.read_only = True result = fc1 + fc2 expected = FeatureCollection({'NAME': {'foo': 3, 'bar': 3}}) assert result == expected assert not result.read_only
def test_read_only_preserved_after_serialized(): fc = FeatureCollection({'NAME': {'foo': 1, 'baz': 2}}) fc.read_only = True fcnew = FeatureCollection.loads(fc.dumps()) assert fcnew.read_only with pytest.raises(ReadOnlyException): fcnew['NAME']['foo'] += 1
def test_read_only_features(): fc = FeatureCollection({'feat': StringCounter({'foo': 1})}) fc['feat']['foo'] += 1 fc.read_only = True with pytest.raises(ReadOnlyException): fc['feat']['foo'] += 1 with pytest.raises(ReadOnlyException): fc['feat'].pop('foo') with pytest.raises(ReadOnlyException): del fc['feat']['foo']
def test_read_only(): fcwork = FeatureCollection({'feat': {'foo': 1}}) fc = FeatureCollection() fc['feat']['foo'] += 1 fc.read_only = True with pytest.raises(ReadOnlyException): fc += fcwork with pytest.raises(ReadOnlyException): fc -= fcwork with pytest.raises(ReadOnlyException): fc -= fcwork with pytest.raises(ReadOnlyException): del fc['feat'] with pytest.raises(ReadOnlyException): fc.pop('feat')
def test_read_only_not_preserved_via_dict(): fc = FeatureCollection({'NAME': {'foo': 1, 'baz': 2}}) fc.read_only = True fcnew = FeatureCollection(fc.to_dict()) assert not fcnew.read_only fcnew['NAME']['foo'] += 1
def test_identity(): fc = FeatureCollection() fc.read_only = True id(fc['one']) == id(fc['two'])