Add test for animated image decoding
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index d17076d..d82fd56 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -97,6 +97,11 @@
     target_include_directories(avifalphapremtest PRIVATE ${GTEST_INCLUDE_DIRS})
     add_test(NAME avifalphapremtest COMMAND avifalphapremtest)
 
+    add_executable(avifanimationtest gtest/avifanimationtest.cc)
+    target_link_libraries(avifanimationtest aviftest_helpers ${GTEST_LIBRARIES})
+    target_include_directories(avifanimationtest PRIVATE ${GTEST_INCLUDE_DIRS})
+    add_test(NAME avifanimationtest COMMAND avifanimationtest ${CMAKE_CURRENT_SOURCE_DIR}/data/)
+
     add_executable(avifbasictest gtest/avifbasictest.cc)
     target_link_libraries(avifbasictest aviftest_helpers ${GTEST_BOTH_LIBRARIES})
     target_include_directories(avifbasictest PRIVATE ${GTEST_INCLUDE_DIRS})
diff --git a/tests/data/README.md b/tests/data/README.md
index e006467..264633a 100644
--- a/tests/data/README.md
+++ b/tests/data/README.md
@@ -419,6 +419,24 @@
 [`cavif-rs`](https://github.com/kornelski/cavif-rs) with the
 [alpha `ispe` fix](https://github.com/kornelski/avif-serialize/pull/4) removed.
 
+## Animated Images
+
+### File [colors-animated-8bpc.avif](colors-animated-8bpc.avif)
+
+![](colors-animated-8bpc.avif)
+
+License: [same as libavif](https://github.com/AOMediaCodec/libavif/blob/main/LICENSE)
+
+Source: Random colors generated with ffmpeg.
+
+An animated AVIF image file with the following attributes:
+* Width: 150
+* Height: 150
+* Alpha present: No
+* YUV Format: 420
+* Repetition Count: 0
+* Frame count: 5
+
 # Other Test Files
 
 ### File [sRGB2014.icc](sRGB2014.icc)
diff --git a/tests/data/colors-animated-8bpc.avif b/tests/data/colors-animated-8bpc.avif
new file mode 100644
index 0000000..afa875d
--- /dev/null
+++ b/tests/data/colors-animated-8bpc.avif
Binary files differ
diff --git a/tests/gtest/avifanimationtest.cc b/tests/gtest/avifanimationtest.cc
new file mode 100644
index 0000000..4b89058
--- /dev/null
+++ b/tests/gtest/avifanimationtest.cc
@@ -0,0 +1,46 @@
+// Copyright 2023 Google LLC
+// SPDX-License-Identifier: BSD-2-Clause
+
+#include "avif/avif.h"
+#include "aviftest_helpers.h"
+#include "gtest/gtest.h"
+
+namespace libavif {
+namespace {
+
+// Used to pass the data folder path to the GoogleTest suites.
+const char* data_path = nullptr;
+
+TEST(AvifDecodeTest, AnimatedImage) {
+  if (!testutil::Av1DecoderAvailable()) {
+    GTEST_SKIP() << "AV1 Codec unavailable, skip test.";
+  }
+  const char* file_name = "colors-animated-8bpc.avif";
+  testutil::AvifDecoderPtr decoder(avifDecoderCreate(), avifDecoderDestroy);
+  ASSERT_NE(decoder, nullptr);
+  ASSERT_EQ(avifDecoderSetIOFile(decoder.get(),
+                                 (std::string(data_path) + file_name).c_str()),
+            AVIF_RESULT_OK);
+  ASSERT_EQ(avifDecoderParse(decoder.get()), AVIF_RESULT_OK);
+  EXPECT_EQ(decoder->alphaPresent, AVIF_FALSE);
+  EXPECT_EQ(decoder->imageCount, 5);
+  EXPECT_EQ(decoder->repetitionCount, 0);
+  for (int i = 0; i < 5; ++i) {
+    EXPECT_EQ(avifDecoderNextImage(decoder.get()), AVIF_RESULT_OK);
+  }
+}
+
+}  // namespace
+}  // namespace libavif
+
+int main(int argc, char** argv) {
+  ::testing::InitGoogleTest(&argc, argv);
+  if (argc != 2) {
+    std::cerr << "There must be exactly one argument containing the path to "
+                 "the test data folder"
+              << std::endl;
+    return 1;
+  }
+  libavif::data_path = argv[1];
+  return RUN_ALL_TESTS();
+}