@Test
  public void testSwapSHS4DHS_NotInEngine() {
    // Setup
    items.add(shs);
    items.add(shs);
    items.add(shs);
    items.add(shs);
    items.add(shs); // 3 in engine, 2 outside.

    newType = dhs;
    oldType = shs;

    engineHsSlots = 0;
    equippedHs = items.size();
    maxEquippableNewType = 2;
    maxGloballyEquippableNewType = 10;

    makeDefaultCut();

    Mockito.when(component.getSlotsFree()).thenReturn(0);

    // Execute
    OpSetHeatSinkType cut = new OpSetHeatSinkType(null, loadout, dhsUpgrade);
    cut.apply();

    // Verify
    Mockito.verify(component, Mockito.times(items.size())).removeItem(shs);
    Mockito.verify(component, Mockito.times(maxEquippableNewType)).addItem(dhs);
  }
  @Test
  public void testIssue288_test2() throws DecodingException {
    String lsml = "lsml://rQAAFwAAAAAAAAAAAAAAQapmxMmTJkwmTJkwFvpkyZMAmTJh";
    Base64LoadoutCoder coder = new Base64LoadoutCoder();
    LoadoutStandard loaded = (LoadoutStandard) coder.parse(lsml);

    OpSetHeatSinkType cut = new OpSetHeatSinkType(null, loaded, UpgradeDB.DOUBLE_HEATSINKS);
    cut.apply();

    for (HeatSink item : loaded.items(HeatSink.class)) {
      assertNotEquals(item, ItemDB.SHS);
    }
  }
  @Test
  public void testDHSBug1() throws DecodingException {
    String lsml = "lsml://rQAAawgMBA4ODAQMBA4IQapmzq6gTJgt1+H0kJkx1dSMFA==";
    Base64LoadoutCoder coder = new Base64LoadoutCoder();
    LoadoutStandard loaded = (LoadoutStandard) coder.parse(lsml);

    OpSetHeatSinkType cut = new OpSetHeatSinkType(null, loaded, UpgradeDB.DOUBLE_HEATSINKS);
    cut.apply();

    for (HeatSink item : loaded.items(HeatSink.class)) {
      assertNotEquals(item, ItemDB.SHS);
    }
  }
  @Test
  public void testIssue288() throws DecodingException {
    String lsml = "lsml://rRoAkUBDDVASZBRDDVAGvqmbPkyZMmTJkxmZiZMmTJkyZMJkxgjXEyZMVZOTTAI=";
    Base64LoadoutCoder coder = new Base64LoadoutCoder();
    LoadoutStandard loaded = (LoadoutStandard) coder.parse(lsml);

    OpSetHeatSinkType cut = new OpSetHeatSinkType(null, loaded, UpgradeDB.DOUBLE_HEATSINKS);
    cut.apply();

    for (HeatSink item : loaded.items(HeatSink.class)) {
      assertNotEquals(item, ItemDB.SHS);
    }
  }