// The minimal setup for log4J
  protected void setUp() throws Exception {
    apps.tests.Log4JFixture.setUp();

    super.setUp();
    JUnitUtil.resetInstanceManager();
    JUnitUtil.initDefaultUserMessagePreferences();
    JUnitUtil.initInternalTurnoutManager();
    JUnitUtil.initInternalLightManager();
    JUnitUtil.initInternalSensorManager();
    JUnitUtil.initInternalSignalHeadManager();

    _logixTable =
        new LogixTableAction() {
          /** */
          private static final long serialVersionUID = 6004896064187980424L;

          // skip dialog box if in edit mode, just assume OK pressed
          boolean checkEditConditional() {
            if (inEditConditionalMode) {
              return true;
            }
            return false;
          }
        };
    assertNotNull("LogixTableAction is null!", _logixTable); // test has begun
    _logixTable._suppressReminder = true;

    for (int i = 0; i < 10; i++) {
      Sensor s = InstanceManager.sensorManagerInstance().newSensor("IS" + i, "Sensor" + i);
      assertNotNull(i + "th Sensor is null!", s);
      Turnout t = InstanceManager.turnoutManagerInstance().newTurnout("IT" + i, "Turnout" + i);
      assertNotNull(i + "th Turnout is null!", t);
      Light l = InstanceManager.lightManagerInstance().newLight("IL" + (i), "Light" + i);
      assertNotNull(i + "th Light is null!", l);
      Conditional c =
          InstanceManager.conditionalManagerInstance()
              .createNewConditional("C" + i, "Conditional" + i);
      assertNotNull(i + "th Conditional is null!", c);
      Memory m = InstanceManager.memoryManagerInstance().provideMemory("IMemory" + i);
      assertNotNull(i + "th Memory is null!", m);
      SignalHead sh = new jmri.implementation.VirtualSignalHead("Signal" + i);
      assertNotNull(i + "th SignalHead is null!", sh);
      InstanceManager.signalHeadManagerInstance().register(sh);
      Route r = new jmri.implementation.DefaultRoute("Route" + i);
      assertNotNull(i + "th Route is null!", r);
      InstanceManager.routeManagerInstance().register(r);
    }
  }
  public void testCreateLogix() throws Exception {
    // Setting these two prevents any pop up message generated by the system trying to save
    // messages.
    jmri.InstanceManager.getDefault(jmri.UserPreferencesManager.class)
        .setPreferenceState("jmri.managers.DefaultUserMessagePreferences", "reminder", true);
    jmri.InstanceManager.getDefault(jmri.UserPreferencesManager.class)
        .setPreferenceState("jmri.jmrit.beantable.LogixTableAction", "remindSaveLogix", true);

    jmri.InstanceManager.store(
        new jmri.jmrit.signalling.EntryExitPairs(), jmri.jmrit.signalling.EntryExitPairs.class);

    try {
      _logixTable.prefMgr = jmri.InstanceManager.getDefault(jmri.UserPreferencesManager.class);
      _logixTable.actionPerformed(null);
      _logixTable.addPressed(null);
      _logixTable._addUserName.setText("TestLogix");
      _logixTable._systemName.setText("TX");
      _logixTable._autoSystemName.setSelected(false);
      _logixTable.createPressed(null);
      _logixTable.donePressed(null);
      // note: _logixTable.m.EDITCOL = BeanTableDataModel.DELETECOL
      _logixTable.m.setValueAt(rbx.getString("ButtonEdit"), 0, BeanTableDataModel.DELETECOL);
      _logixTable.newConditionalPressed(null);
      // _logixTable.helpPressed(null);
      _logixTable.conditionalUserName.setText("TestConditional");
      _logixTable.updateConditionalPressed(null);

      // now close window
      // TestHelper.disposeWindow(_logixTable.editConditionalFrame,this);
      _logixTable.newConditionalPressed(null);
      _logixTable.conditionalTableModel.setValueAt(
          null, 0, LogixTableAction.ConditionalTableModel.BUTTON_COLUMN);
      for (int i = 0; i < 2; i++) {
        _logixTable.addVariablePressed(null);
        _logixTable._variableTypeBox.setSelectedIndex(Conditional.ITEM_TYPE_SENSOR);
        _logixTable._variableStateBox.setSelectedIndex(i);
        _logixTable._variableNameField.setText("IS" + i);
        _logixTable.updateVariablePressed();
      }
      for (int i = 0; i < 2; i++) {
        _logixTable.addVariablePressed(null);
        _logixTable._variableTypeBox.setSelectedIndex(Conditional.ITEM_TYPE_TURNOUT);
        _logixTable._variableStateBox.setSelectedIndex(i);
        _logixTable._variableNameField.setText("Turnout" + i);
        _logixTable.updateVariablePressed();
      }
      for (int i = 0; i < 2; i++) {
        _logixTable.addVariablePressed(null);
        _logixTable._variableTypeBox.setSelectedIndex(Conditional.ITEM_TYPE_LIGHT);
        _logixTable._variableStateBox.setSelectedIndex(i);
        _logixTable._variableNameField.setText("IL" + i);
        _logixTable.updateVariablePressed();
      }
      for (int i = 0; i < 2; i++) {
        _logixTable.addVariablePressed(null);
        _logixTable._variableTypeBox.setSelectedIndex(Conditional.ITEM_TYPE_CONDITIONAL);
        _logixTable._variableStateBox.setSelectedIndex(i);
        _logixTable._variableNameField.setText("C" + i);
        _logixTable.updateVariablePressed();
      }
      /* SignalHead code changed - test cannot be done this way
      Must implement from UI dialogs to get the right info to updateVariablePressed()
      for (int i=0; i<9; i++){
      if (i==3 || i==7) {        // lunar aspects
      continue;
      }
      _logixTable.addVariablePressed(null);
      _logixTable._variableTypeBox.setSelectedIndex(Conditional.ITEM_TYPE_SIGNALHEAD);
      _logixTable._variableStateBox.setSelectedIndex(i);
      _logixTable._variableNameField.setText("Signal"+i);
      _logixTable.updateVariablePressed();
      }
      */
      _logixTable.addActionPressed(null);
      _logixTable.cancelEditActionPressed();

      _logixTable.addActionPressed(null);
      _logixTable._actionItemTypeBox.setSelectedIndex(Conditional.ITEM_TYPE_TURNOUT);
      _logixTable._actionTypeBox.setSelectedIndex(1); // ACTION_SET_TURNOUT
      _logixTable._actionOptionBox.setSelectedIndex(2); // on false
      _logixTable._actionNameField.setText("Turnout3");
      _logixTable._actionBox.setSelectedIndex(0); // Turnout.CLOSED
      _logixTable.updateActionPressed();
      /*
      // Test is done and turnoutManagerInstance gone by the time the timer goes off
      _logixTable.addActionPressed(null);
      _logixTable._actionItemTypeBox.setSelectedIndex(Conditional.ITEM_TYPE_TURNOUT);
      _logixTable._actionTypeBox.setSelectedIndex(2);         // ACTION_DELAYED_TURNOUT
      _logixTable._actionOptionBox.setSelectedIndex(1);       // on false
      _logixTable._actionNameField.setText("IT4");
      _logixTable._actionBox.setSelectedIndex(1);             // Turnout.THROWN
      _logixTable._shortActionString.setText("1");           // delay 1 sec
      _logixTable.updateActionPressed();
      */
      _logixTable.addActionPressed(null);
      _logixTable._actionItemTypeBox.setSelectedIndex(Conditional.ITEM_TYPE_TURNOUT);
      _logixTable._actionTypeBox.setSelectedIndex(3); // ACTION_LOCK_TURNOUT
      _logixTable._actionOptionBox.setSelectedIndex(0); // on false
      _logixTable._actionNameField.setText("Turnout5");
      _logixTable._actionBox.setSelectedIndex(2);
      _logixTable.updateActionPressed();

      _logixTable.updateConditionalPressed(null);

      // move on to another
      assertEquals(
          "State Variable count", 8, _logixTable._curConditional.getCopyOfStateVariables().size());
      assertEquals("Action count", 2, _logixTable._curConditional.getCopyOfActions().size());
      _logixTable.newConditionalPressed(null);
      // _logixTable.helpPressed(null);
      _logixTable.conditionalUserName.setText("SecondConditional");
      _logixTable.updateConditionalPressed(null);

      Assert.assertEquals("Conditional count", 1, _logixTable._curLogix.getNumConditionals());
      // _logixTable.donePressed(null);

      // note: _logixTable.m.EDITCOL = BeanTableDataModel.DELETECOL
      // _logixTable.m.setValueAt(rbx.getString("ButtonEdit"), 0, BeanTableDataModel.DELETECOL);
      _logixTable.conditionalTableModel.setValueAt(
          null, 0, LogixTableAction.ConditionalTableModel.BUTTON_COLUMN);
      _logixTable.conditionalUserName.setText("FirstConditional");
      _logixTable.updateConditionalPressed(null);

      _logixTable.calculatePressed(null);
      _logixTable.donePressed(null);

      // now close window
      TestHelper.disposeWindow(_logixTable.editConditionalFrame, this);

    } catch (Exception ex) {
      ex.printStackTrace();
      throw ex;
    }
  }