code: def testCreateAtlasManifestWithImgFailures(self):
      # Verify manifest contains correct data when one image failed.
      atlas_settings = montage.SpriteAtlasSettings(img_format="png")
      source_images_with_statuses = [
          (Image.new("RGBA", (50, 30)), "")
      ] * 3 + [(None, "Failure msg")]
      source_paths = [
          "/some/path/file" + str(i) + ".jpg" for i in range(0, 4)
      ]
      expected_manifest = [
          {
              "source_image": "/some/path/file0.jpg",
              "offset_x": 0,
              "image_name": "file0.jpg",
              "offset_y": 0,
          },
          {
              "source_image": "/some/path/file1.jpg",
              "offset_x": 50,
              "image_name": "file1.jpg",
              "offset_y": 0,
          },
          {
              "source_image": "/some/path/file2.jpg",
              "offset_x": 0,
              "image_name": "file2.jpg",
              "offset_y": 30,
          },
          {
              "source_image": "/some/path/file3.jpg",
              "offset_x": 50,
              "image_name": "file3.jpg",
              "offset_y": 30,
              "errors": "Failure msg",
          },
      ]
  
      atlas_generator = montage.SpriteAtlasGenerator(
          images_with_statuses=source_images_with_statuses,
          img_src_paths=source_paths,
          atlas_settings=atlas_settings,
          default_img=Image.new("RGBA", (50, 50), self.black_rgb),
      )
      atlases, manifests = atlas_generator.create_atlas()
      del atlases  # linter
      self.assertEqual(manifests[0], expected_manifest)
  
file_path: facets/facets_atlasmaker/montage_test.py
imports: from absl.testing import absltest
  from PIL import Image
  from PIL import ImageColor
  import montage
label_desc: Use image node_id 8 for calling the SpriteAtlasGeneratorTests obj's underlying member method code with example usage: obj.testCreateAtlasManifestWithImgFailures() without return types