@Test
  public void testE131Config() {
    Properties config = new Properties();
    config.put(ConfigConstant.E131_IP, "192.168.1.1");
    config.put(ConfigConstant.E131_ROW1, "NO_ROTATE");
    ApplicationConfigurationHelper ph = new ApplicationConfigurationHelper(config);

    assertEquals(1, ph.getNrOfScreens());
    assertEquals(8, ph.getDeviceXResolution());
    assertEquals(8, ph.getDeviceYResolution());
    assertEquals(false, ph.isOutputSnakeCabeling());

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

    PixelControllerOutput controller = new PixelControllerOutput();
    E1_31Device device = new E1_31Device(ph, controller);
    assertFalse(device.isSendMulticast());
    assertEquals(170, device.getPixelsPerUniverse());
    assertEquals(1, device.getNrOfUniverse());
    assertEquals(0, device.getFirstUniverseId());

    config = new Properties();
    config.put(ConfigConstant.E131_IP, "239.255.1.1");
    config.put(ConfigConstant.E131_ROW1, "NO_ROTATE");
    config.put(ConfigConstant.E131_FIRST_UNIVERSE_ID, "1");
    config.put(ConfigConstant.E131_PIXELS_PER_UNIVERSE, "333");
    config.put(ConfigConstant.OUTPUT_DEVICE_RESOLUTION_X, "10");
    config.put(ConfigConstant.OUTPUT_DEVICE_SNAKE_CABELING, "true");
    ph = new ApplicationConfigurationHelper(config);

    assertEquals(OutputDeviceEnum.E1_31, ph.getOutputDevice());
    assertEquals(1, ph.getNrOfScreens());
    assertEquals(10, ph.getDeviceXResolution());
    assertEquals(8, ph.getDeviceYResolution());
    assertEquals(true, ph.isOutputSnakeCabeling());

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

    device = new E1_31Device(ph, controller);
    assertTrue(device.isSendMulticast());
    assertEquals(1, device.getFirstUniverseId());
    assertEquals(170, device.getPixelsPerUniverse());
  }
  @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 testMiniDmxConfig() {
    Properties config = new Properties();
    config.put(ConfigConstant.OUTPUT_DEVICE_RESOLUTION_X, "10");
    config.put(ConfigConstant.OUTPUT_DEVICE_RESOLUTION_Y, "13");
    config.put(ConfigConstant.OUTPUT_DEVICE_SNAKE_CABELING, "true");
    config.put(ConfigConstant.MINIDMX_BAUDRATE, "115200");
    ApplicationConfigurationHelper ph = new ApplicationConfigurationHelper(config);

    assertEquals(1, ph.getNrOfScreens());
    assertEquals(10, ph.getDeviceXResolution());
    assertEquals(13, ph.getDeviceYResolution());
    assertEquals(true, ph.isOutputSnakeCabeling());

    assertEquals(0, ph.getI2cAddr().size());
    assertEquals(0, ph.getLpdDevice().size());
    assertEquals(OutputDeviceEnum.MINIDMX, ph.getOutputDevice());
  }
  @Test
  public void testArtnetConfigAdvanced() {
    Properties config = new Properties();
    config.put(ConfigConstant.ARTNET_IP, "192.168.1.1");
    config.put(ConfigConstant.ARTNET_PIXELS_PER_UNIVERSE, "333");
    config.put(ConfigConstant.ARTNET_ROW1, "NO_ROTATE");
    config.put(ConfigConstant.ARTNET_ROW2, "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(OutputDeviceEnum.ARTNET, ph.getOutputDevice());
    assertEquals(2, ph.getNrOfScreens());
    assertEquals(10, ph.getDeviceXResolution());
    assertEquals(8, ph.getDeviceYResolution());
    assertEquals(true, ph.isOutputSnakeCabeling());

    PixelControllerOutput controller = new PixelControllerOutput();
    ArtnetDevice device = new ArtnetDevice(ph, controller);
    assertEquals(170, device.getPixelsPerUniverse());
  }
  @Test
  public void testArtnetConfigSimple() {
    Properties config = new Properties();
    config.put(ConfigConstant.ARTNET_IP, "192.168.1.1");
    config.put(ConfigConstant.ARTNET_ROW1, "NO_ROTATE");
    config.put(ConfigConstant.ARTNET_BROADCAST_ADDR, "255.0.0.0");
    ApplicationConfigurationHelper ph = new ApplicationConfigurationHelper(config);

    assertEquals(1, ph.getNrOfScreens());
    assertEquals(8, ph.getDeviceXResolution());
    assertEquals(8, ph.getDeviceYResolution());
    assertEquals(false, ph.isOutputSnakeCabeling());

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

    PixelControllerOutput controller = new PixelControllerOutput();
    ArtnetDevice device = new ArtnetDevice(ph, controller);
    assertTrue(device.isConnected());
    assertEquals(170, device.getPixelsPerUniverse());
    assertEquals(1, device.getNrOfUniverse());
    assertEquals(0, device.getFirstUniverseId());
  }