content: package rabbitescape.render;
  
  import java.io.ByteArrayInputStream;
  import java.io.UnsupportedEncodingException;
  
  import static org.hamcrest.CoreMatchers.*;
  import static org.hamcrest.MatcherAssert.*;
  import static rabbitescape.engine.util.Util.*;
  
  import org.junit.Test;
  
  public class TestAnimationLoader
  {
      @Test
      public void Parse_just_frame_names() throws Exception
      {
          ByteArrayInputStream anim = animationAsStream(
              new String[] {
                  "framez1",
                  "framey2",
                  "framex3",
              }
          );
  
          Animation animation = AnimationLoader.readAnimation( anim );
  
          assertThat(
              animationToString( animation ),
              equalTo(
                  new String[] {
                      "framez1 0 0",
                      "framey2 0 0",
                      "framex3 0 0"
                  }
              )
          );
      }
  
      @Test
      public void Parse_names_and_offsets() throws Exception
      {
          ByteArrayInputStream anim = animationAsStream(
              new String[] {
                  "framez1 1 2",
                  "framey2",
                  "framex3 55 66",
              }
          );
  
          Animation animation = AnimationLoader.readAnimation( anim );
  
          assertThat(
              animationToString( animation ),
              equalTo(
                  new String[] {
                      "framez1 1 2",
                      "framey2 0 0",
                      "framex3 55 66"
                  }
              )
          );
      }
  
      @Test
      public void Multiple_spaces_allowed_between_offsets() throws Exception
      {
          ByteArrayInputStream anim = animationAsStream(
              new String[] {
                  "framez1  1  2",
                  "framey2",
                  "framex3 55      66",
              }
          );
  
          Animation animation = AnimationLoader.readAnimation( anim );
  
          assertThat(
              animationToString( animation ),
              equalTo(
                  new String[] {
                      "framez1 1 2",
                      "framey2 0 0",
                      "framex3 55 66"
                  }
              )
          );
      }
  
      @Test
      public void Offset_line_sets_all_offsets() throws Exception
      {
          ByteArrayInputStream anim = animationAsStream(
              new String[] {
                  "offset 3 5",
                  "framez1  1  2",
                  "framey2",
                  "framex3 55      66",
              }
          );
  
          Animation animation = AnimationLoader.readAnimation( anim );
  
          assertThat(
              animationToString( animation ),
              equalTo(
                  new String[] {
                      "framez1 4 7",
                      "framey2 3 5",
                      "framex3 58 71"
                  }
              )
          );
      }
  
      @Test
      public void Later_offset_line_accumulates() throws Exception
      {
          ByteArrayInputStream anim = animationAsStream(
              new String[] {
                  "framez1  1  2",
                  "offset 3 5",
                  "framey2",
                  "offset 0 10",
                  "framex3 55      66",
              }
          );
  
          Animation animation = AnimationLoader.readAnimation( anim );
  
          assertThat(
              animationToString( animation ),
              equalTo(
                  new String[] {
                      "framez1 1 2",
                      "framey2 3 5",
                      "framex3 58 81"
                  }
              )
          );
      }
  
      @Test
      public void Filter_contents_of_ls_file_and_add_none()
      {
          assertThat(
              AnimationLoader.animationFilesInResource(
                  "/rabbitescape/render/testls.txt" ),
              equalTo( new String[] { "<none>", "aa", "bb", "cc" } )
          );
      }
  
      // ---
  
      private ByteArrayInputStream animationAsStream( String[] animation )
          throws UnsupportedEncodingException
      {
          return new ByteArrayInputStream(
              join( "\n", animation ).getBytes( "UTF8" ) );
      }
  
      private String[] animationToString( Animation animation )
      {
          String[] ret = new String[ animation.size() ];
  
          for ( int i = 0; i < animation.size(); ++i )
          {
              ret[i] = frameToString( animation.get( i ) );
          }
  
          return ret;
      }
  
      private String frameToString( Frame frame )
      {
          return frame.name + " " + frame.offsetX + " " + frame.offsetY;
      }
  }
  