@@ -55,6 +55,48 @@ def test_stac_extensions(landsat_item: Item) -> None:
5555 assert ClassificationExtension .has_extension (landsat_item )
5656
5757
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+
58100def test_get_schema_uri (landsat_item : Item ) -> None :
59101 assert any (
60102 [
@@ -69,7 +111,7 @@ def test_ext_raises_if_item_does_not_conform(plain_item: Item) -> None:
69111 ClassificationExtension .ext (plain_item )
70112
71113
72- def test_apply (plain_item : Item ) -> None :
114+ def test_apply_bitfields (plain_item : Item ) -> None :
73115 ClassificationExtension .add_to (plain_item )
74116 ClassificationExtension .ext (plain_item ).apply (
75117 bitfields = [
@@ -113,6 +155,37 @@ def test_apply(plain_item: Item) -> None:
113155 )
114156
115157
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+
116189def test_create () -> None :
117190 field = Bitfield .create (
118191 name = "cloud_confidence" ,
@@ -200,6 +273,7 @@ def test_validate_classification(landsat_item: Item) -> None:
200273
201274def test_add_item_classes (plain_item : Item ) -> None :
202275 item_ext = ClassificationExtension .ext (plain_item , add_if_missing = True )
276+ item_ext .__repr__ ()
203277 assert item_ext .classes is None
204278 item_ext .classes = [Classification .create (description = "dummy" , value = 0 )]
205279 assert item_ext .properties [CLASSES_PROP ] == [{"value" : 0 , "description" : "dummy" }]
@@ -210,6 +284,7 @@ def test_add_asset_classes(plain_item: Item) -> None:
210284 asset = plain_item .assets ["analytic" ]
211285 assert CLASSES_PROP not in asset .extra_fields .keys ()
212286 asset_ext = ClassificationExtension .ext (asset )
287+ asset_ext .__repr__ ()
213288 asset_ext .classes = [Classification .create (value = 0 , description = "dummy" )]
214289 assert CLASSES_PROP in asset .extra_fields .keys ()
215290 assert asset .extra_fields [CLASSES_PROP ] == [{"value" : 0 , "description" : "dummy" }]
@@ -220,4 +295,14 @@ def test_item_asset_raster_classes(collection: Collection) -> None:
220295 "cloud-mask-raster"
221296 ]
222297 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