code: def test_frame_order(self):
      # A frame can't progress to itself after reading
      with Image.open(
          "Tests/images/multipage_single_frame_loop.tiff"
      ) as im:
          assert im.n_frames == 1
  
      # A frame can't progress to a frame that has already been read
      with Image.open(
          "Tests/images/multipage_multiple_frame_loop.tiff"
      ) as im:
          assert im.n_frames == 2
  
      # Frames don't have to be in sequence
      with Image.open("Tests/images/multipage_out_of_order.tiff") as im:
          assert im.n_frames == 3
  
imports: import os
  from io import BytesIO
  import pytest
  from PIL import Image, ImageFile, TiffImagePlugin
  from PIL.TiffImagePlugin import RESOLUTION_UNIT, X_RESOLUTION, Y_RESOLUTION
  from .helper import assert_image_equal, assert_image_equal_tofile, assert_image_similar, assert_image_similar_tofile, hopper, is_pypy, is_win32
label_desc: Use image node_id 28 for calling the TestFileTiff obj's underlying member method code with example usage: obj.test_frame_order() without return types