@@ -55,6 +55,48 @@ def test_stac_extensions(landsat_item: Item) -> None:
55
55
assert ClassificationExtension .has_extension (landsat_item )
56
56
57
57
58
+ def test_fails_on_incompatible_object () -> None :
59
+ with pytest .raises (pystac .ExtensionTypeError ):
60
+ ClassificationExtension .ext ("dummy" )
61
+
62
+
63
+ def test_classification_object () -> None :
64
+ c = Classification .create (
65
+ name = "dummy" ,
66
+ description = "empty class" ,
67
+ value = 0 ,
68
+ color_hint = "FF00AB"
69
+ )
70
+ assert c .name == "dummy"
71
+ assert c .description == "empty class"
72
+ assert c .color_hint == "FF00AB"
73
+ assert c .value == 0
74
+
75
+ assert Classification (c .to_dict ()) == c
76
+ with pytest .raises (NotImplementedError ):
77
+ c == "blah"
78
+
79
+
80
+ def test_bitfield_object () -> None :
81
+ b = Bitfield .create (
82
+ offset = 0 ,
83
+ length = 1 ,
84
+ classes = [
85
+ Classification .create (description = "no" , value = 0 ),
86
+ Classification .create (description = "yes" , value = 1 ),
87
+ ],
88
+ roles = ["data" ],
89
+ description = "dummy description" ,
90
+ name = "dummy"
91
+ )
92
+ assert b .offset == 0
93
+ assert b .length == 1
94
+ assert len (b .classes ) == 2
95
+ assert b .roles == ["data" ]
96
+ assert b .description == "dummy description"
97
+ assert b .name == "dummy"
98
+
99
+
58
100
def test_get_schema_uri (landsat_item : Item ) -> None :
59
101
assert any (
60
102
[
@@ -69,7 +111,7 @@ def test_ext_raises_if_item_does_not_conform(plain_item: Item) -> None:
69
111
ClassificationExtension .ext (plain_item )
70
112
71
113
72
- def test_apply (plain_item : Item ) -> None :
114
+ def test_apply_bitfields (plain_item : Item ) -> None :
73
115
ClassificationExtension .add_to (plain_item )
74
116
ClassificationExtension .ext (plain_item ).apply (
75
117
bitfields = [
@@ -113,6 +155,37 @@ def test_apply(plain_item: Item) -> None:
113
155
)
114
156
115
157
158
+ def test_create_classes (plain_item : Item ) -> None :
159
+ ClassificationExtension .add_to (plain_item )
160
+ ext = ClassificationExtension .ext (plain_item )
161
+ ext .apply (
162
+ bitfields = [
163
+ Bitfield .create (
164
+ offset = 0 ,
165
+ length = 1 ,
166
+ classes = [
167
+ Classification .create (description = "no" , value = 0 ),
168
+ Classification .create (description = "yes" , value = 1 ),
169
+ ],
170
+ )
171
+ ]
172
+ )
173
+ ext .classes = [
174
+ Classification .create (description = "no" , value = 0 ),
175
+ Classification .create (description = "yes" , value = 1 ),
176
+ ]
177
+ assert ext .bitfields is None
178
+ ext .bitfields = [Bitfield .create (
179
+ offset = 0 ,
180
+ length = 1 ,
181
+ classes = [
182
+ Classification .create (description = "no" , value = 0 ),
183
+ Classification .create (description = "yes" , value = 1 ),
184
+ ],
185
+ )]
186
+ assert ext .classes is None
187
+
188
+
116
189
def test_create () -> None :
117
190
field = Bitfield .create (
118
191
name = "cloud_confidence" ,
@@ -200,6 +273,7 @@ def test_validate_classification(landsat_item: Item) -> None:
200
273
201
274
def test_add_item_classes (plain_item : Item ) -> None :
202
275
item_ext = ClassificationExtension .ext (plain_item , add_if_missing = True )
276
+ item_ext .__repr__ ()
203
277
assert item_ext .classes is None
204
278
item_ext .classes = [Classification .create (description = "dummy" , value = 0 )]
205
279
assert item_ext .properties [CLASSES_PROP ] == [{"value" : 0 , "description" : "dummy" }]
@@ -210,6 +284,7 @@ def test_add_asset_classes(plain_item: Item) -> None:
210
284
asset = plain_item .assets ["analytic" ]
211
285
assert CLASSES_PROP not in asset .extra_fields .keys ()
212
286
asset_ext = ClassificationExtension .ext (asset )
287
+ asset_ext .__repr__ ()
213
288
asset_ext .classes = [Classification .create (value = 0 , description = "dummy" )]
214
289
assert CLASSES_PROP in asset .extra_fields .keys ()
215
290
assert asset .extra_fields [CLASSES_PROP ] == [{"value" : 0 , "description" : "dummy" }]
@@ -220,4 +295,14 @@ def test_item_asset_raster_classes(collection: Collection) -> None:
220
295
"cloud-mask-raster"
221
296
]
222
297
raster_bands = cast (List [RasterBand ], RasterExtension .ext (item_asset ).bands )
223
- assert ClassificationExtension .ext (raster_bands [0 ]).classes is not None
298
+ raster_bands_ext = ClassificationExtension .ext (raster_bands [0 ])
299
+ raster_bands_ext .__repr__ ()
300
+ assert raster_bands_ext .classes is not None
301
+
302
+
303
+ def test_item_assets_extension (collection : Collection ) -> None :
304
+ item_asset = ItemAssetsExtension .ext (collection , add_if_missing = True ).item_assets [
305
+ "cloud-mask-raster"
306
+ ]
307
+ ext = ClassificationExtension .ext (item_asset )
308
+ ext .__repr__ ()
0 commit comments