/**
   * Test {@link FileUtilities#generateSaveSetContent(SaveSetData)} and {@link
   * FileUtilities#readFromSaveSet(java.io.InputStream)}.
   *
   * @throws IOException
   */
  @Test
  public void testSaveSetData() throws IOException {
    SaveSet set =
        new SaveSet(
            new Branch(), Optional.empty(), new String[] {"first", "second", "third"}, "someId");
    SaveSetData bsd =
        new SaveSetData(
            set,
            Arrays.asList(
                new SaveSetEntry("pv1", "rb1", "d1", true),
                new SaveSetEntry("pv2", "rb2", "Math.pow(x,3)", false)),
            "some description");
    String content = FileUtilities.generateSaveSetContent(bsd);
    assertEquals(
        "# Description:\n# some description\n#\nPV,READBACK,DELTA,READ_ONLY\npv1,rb1,d1,true\npv2,rb2,\"Math.pow(x,3)\",false\n",
        content);

    SaveSetContent bsc =
        FileUtilities.readFromSaveSet(
            new ByteArrayInputStream(content.getBytes(StandardCharsets.UTF_8)));
    assertEquals("some description", bsc.getDescription());
    List<SaveSetEntry> entries = bsc.getEntries();
    assertArrayEquals(
        new String[] {"pv1", "pv2"},
        entries.stream().map(e -> e.getPVName()).toArray(String[]::new));
    assertArrayEquals(
        new String[] {"rb1", "rb2"},
        entries.stream().map(e -> e.getReadback()).toArray(String[]::new));
    assertArrayEquals(
        new String[] {"d1", "Math.pow(x,3)"},
        entries.stream().map(e -> e.getDelta()).toArray(String[]::new));
    assertArrayEquals(
        new Boolean[] {true, false},
        entries.stream().map(e -> e.isReadOnly()).toArray(Boolean[]::new));
  }