@Test
  public void testPixelInvadersAdvancedConfig() {
    Properties config = new Properties();
    config.put(ConfigConstant.PIXELINVADERS_ROW1, "ROTATE_180_FLIPPEDY,NO_ROTATE,NO_ROTATE");
    config.put(ConfigConstant.PIXELINVADERS_ROW2, "ROTATE_180_FLIPPEDY,NO_ROTATE,NO_ROTATE");
    config.put(ConfigConstant.PIXELINVADERS_PANEL_ORDER, "0,3,1,4,2,5");
    ApplicationConfigurationHelper ph = new ApplicationConfigurationHelper(config);

    assertEquals(6, ph.getNrOfScreens());
    assertEquals(8, ph.getDeviceXResolution());
    assertEquals(8, ph.getDeviceYResolution());

    List<ColorFormat> colorFormat = ph.getColorFormat();
    List<Integer> order = ph.getPanelOrder();
    List<DeviceConfig> displayOptions = ph.getLpdDevice();

    for (int ofs = 0; ofs < ph.getNrOfScreens(); ofs++) {
      int panelNr = order.get(ofs);
      System.out.println(
          "visual "
              + ofs
              + ", panel ofs: "
              + panelNr
              + ", layout: "
              + displayOptions.get(panelNr)
              + " colorformat: "
              + colorFormat.get(panelNr));
    }
  }
  @Test
  public void testPixelInvadersNetConfig() {
    Properties config = new Properties();
    config.put(ConfigConstant.PIXELINVADERS_ROW1, "ROTATE_180, NO_ROTATE");
    config.put(ConfigConstant.PIXELINVADERS_ROW2, "ROTATE_90, NO_ROTATE");
    config.put(ConfigConstant.PIXELINVADERS_PANEL_ORDER, "0,3, 1,2");
    config.put(ConfigConstant.PIXELINVADERS_NET_IP, "127.0.0.1");
    config.put(ConfigConstant.PIXELINVADERS_NET_PORT, "5333");
    ApplicationConfigurationHelper ph = new ApplicationConfigurationHelper(config);

    assertEquals(4, ph.getNrOfScreens());
    assertEquals(8, ph.getDeviceXResolution());
    assertEquals(8, ph.getDeviceYResolution());

    List<Integer> order = ph.getPanelOrder();
    assertEquals(Integer.valueOf(0), order.get(0));
    assertEquals(Integer.valueOf(3), order.get(1));
    assertEquals(Integer.valueOf(1), order.get(2));
    assertEquals(Integer.valueOf(2), order.get(3));

    assertEquals(0, ph.getI2cAddr().size());
    assertEquals(4, ph.getLpdDevice().size());
    assertEquals(OutputDeviceEnum.PIXELINVADERS_NET, ph.getOutputDevice());

    Map<Integer, RGBAdjust> correction = ph.getPixelInvadersCorrectionMap();
    assertTrue(correction != null);
  }
  @Test
  public void testInvalidPixelInvadersConfigTwo() {
    Properties config = new Properties();
    config.put(ConfigConstant.PIXELINVADERS_ROW1, "ROTATE_180,NO_ROTATE");
    config.put(ConfigConstant.PIXELINVADERS_ROW2, "ROTATE_90,NO_ROTATE");
    config.put(ConfigConstant.PIXELINVADERS_PANEL_ORDER, "0");
    ApplicationConfigurationHelper ph = new ApplicationConfigurationHelper(config);

    // panel order is ignored, due invalid value
    List<Integer> order = ph.getPanelOrder();
    assertEquals(Integer.valueOf(0), order.get(0));
    assertEquals(Integer.valueOf(1), order.get(1));
    assertEquals(Integer.valueOf(2), order.get(2));
    assertEquals(Integer.valueOf(3), order.get(3));
  }
  @Test
  public void testPixelInvadersConfig() {
    Properties config = new Properties();
    config.put(ConfigConstant.PIXELINVADERS_ROW1, "ROTATE_180, NO_ROTATE");
    config.put(ConfigConstant.PIXELINVADERS_ROW2, "ROTATE_90, NO_ROTATE");
    config.put(ConfigConstant.PIXELINVADERS_PANEL_ORDER, "0,3, 1,2");

    config.put(ConfigConstant.PIXELINVADERS_COLORADJUST_R + "1", "100");
    config.put(ConfigConstant.PIXELINVADERS_COLORADJUST_G + "1", "130  ");
    config.put(ConfigConstant.PIXELINVADERS_COLORADJUST_B + "1", "150");

    config.put(ConfigConstant.PIXELINVADERS_COLORADJUST_R + "2", "4");
    config.put(ConfigConstant.PIXELINVADERS_COLORADJUST_G + "2", "-222");
    config.put(ConfigConstant.PIXELINVADERS_COLORADJUST_B + "2", "zzz");

    ApplicationConfigurationHelper ph = new ApplicationConfigurationHelper(config);

    assertEquals(4, ph.getNrOfScreens());
    assertEquals(8, ph.getDeviceXResolution());
    assertEquals(8, ph.getDeviceYResolution());

    List<Integer> order = ph.getPanelOrder();
    assertEquals(Integer.valueOf(0), order.get(0));
    assertEquals(Integer.valueOf(3), order.get(1));
    assertEquals(Integer.valueOf(1), order.get(2));
    assertEquals(Integer.valueOf(2), order.get(3));

    assertEquals(0, ph.getI2cAddr().size());
    assertEquals(4, ph.getLpdDevice().size());
    assertEquals(OutputDeviceEnum.PIXELINVADERS, ph.getOutputDevice());

    Map<Integer, RGBAdjust> correction = ph.getPixelInvadersCorrectionMap();
    assertFalse(correction.containsKey(ConfigConstant.PIXELINVADERS_COLORADJUST_R + "0"));
    assertFalse(correction.containsKey(ConfigConstant.PIXELINVADERS_COLORADJUST_G + "0"));
    assertFalse(correction.containsKey(ConfigConstant.PIXELINVADERS_COLORADJUST_B + "0"));

    RGBAdjust corr = correction.get(1);
    assertTrue(corr != null);
    assertEquals(100, corr.getR());
    assertEquals(130, corr.getG());
    assertEquals(150, corr.getB());

    corr = correction.get(2);
    assertTrue(corr != null);
    assertEquals(4, corr.getR());
    assertEquals(0, corr.getG());
    assertEquals(0, corr.getB());
  }
  @Test
  public void testMultipleE131Config() {
    Properties config = new Properties();
    config.put(ConfigConstant.E131_IP, "192.168.1.1");
    config.put(ConfigConstant.E131_ROW1, "NO_ROTATE,NO_ROTATE");
    config.put(ConfigConstant.E131_ROW2, "NO_ROTATE,NO_ROTATE");
    config.put(ConfigConstant.OUTPUT_DEVICE_RESOLUTION_X, "10");
    config.put(ConfigConstant.OUTPUT_DEVICE_RESOLUTION_Y, "8");
    config.put(ConfigConstant.OUTPUT_DEVICE_SNAKE_CABELING, "true");
    ApplicationConfigurationHelper ph = new ApplicationConfigurationHelper(config);

    assertEquals(4, ph.getNrOfScreens());
    assertEquals(10, ph.getDeviceXResolution());
    assertEquals(8, ph.getDeviceYResolution());
    assertEquals(true, ph.isOutputSnakeCabeling());
    assertEquals(4, ph.getPanelOrder().size());
  }
  @Test
  public void testPixelInvadersDefaultConfig() {
    Properties config = new Properties();
    config.put(ConfigConstant.PIXELINVADERS_ROW1, "ROTATE_180,NO_ROTATE");
    config.put(ConfigConstant.PIXELINVADERS_ROW2, "ROTATE_90,NO_ROTATE");
    ApplicationConfigurationHelper ph = new ApplicationConfigurationHelper(config);

    List<Integer> order = ph.getPanelOrder();
    assertEquals(Integer.valueOf(0), order.get(0));
    assertEquals(Integer.valueOf(1), order.get(1));
    assertEquals(Integer.valueOf(2), order.get(2));
    assertEquals(Integer.valueOf(3), order.get(3));

    List<ColorFormat> colorFormat = ph.getColorFormat();
    assertEquals(ColorFormat.RGB, colorFormat.get(0));
    assertEquals(ColorFormat.RGB, colorFormat.get(1));
    assertEquals(ColorFormat.RGB, colorFormat.get(2));
    assertEquals(ColorFormat.RGB, colorFormat.get(3));
  }