Skip to content

Commit dbec8a9

Browse files
committed
Proper Compatibility for AC Ammo in MHQ
1 parent 899eefe commit dbec8a9

File tree

3 files changed

+74
-19
lines changed

3 files changed

+74
-19
lines changed

MekHQ/src/mekhq/campaign/parts/AmmoStorage.java

+4-3
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,6 @@
3131
import java.io.PrintWriter;
3232
import java.util.Objects;
3333

34-
import org.w3c.dom.Node;
35-
import org.w3c.dom.NodeList;
36-
3734
import megamek.common.AmmoType;
3835
import megamek.common.ITechnology;
3936
import megamek.common.TargetRoll;
@@ -48,6 +45,8 @@
4845
import mekhq.campaign.personnel.Person;
4946
import mekhq.campaign.work.IAcquisitionWork;
5047
import mekhq.utilities.MHQXMLUtility;
48+
import org.w3c.dom.Node;
49+
import org.w3c.dom.NodeList;
5150

5251
/**
5352
* This will be a special type of part that will only exist as spares
@@ -152,6 +151,8 @@ public boolean isSameAmmoType(AmmoType otherAmmoType) {
152151
* is compatible with this instance's ammo.
153152
*
154153
* @param otherAmmoType The other {@code AmmoType}.
154+
* @return False if the ammo does not support "compatibility" or is not compatible, true if the ammo type
155+
* supports compatibility and is compatible
155156
*/
156157
public boolean isCompatibleAmmo(AmmoType otherAmmoType) {
157158
return getType().isCompatibleWith(otherAmmoType);

MekHQ/src/mekhq/campaign/parts/equipment/AmmoBin.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -490,8 +490,9 @@ public boolean isSamePartType(Part part) {
490490
// AmmoType and number of rounds of ammo (i.e. they are the same
491491
// irrespective of "munition type" or "bomb type").
492492
return (getClass() == part.getClass()) &&
493-
getType().isCompatibleWith(((AmmoBin) part).getType()) &&
494-
(((AmmoBin) part).getFullShots() == getFullShots());
493+
((getType().isCompatibleWith(((AmmoBin) part).getType())) ||
494+
(getType().equals(((AmmoBin) part).getType()))) &&
495+
(((AmmoBin) part).getFullShots() == getFullShots());
495496
}
496497

497498
@Override

MekHQ/unittests/mekhq/campaign/parts/equipment/AmmoBinTest.java

+67-14
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,29 @@
2727
*/
2828
package mekhq.campaign.parts.equipment;
2929

30+
import static mekhq.campaign.parts.AmmoUtilities.getAmmoType;
31+
import static org.junit.jupiter.api.Assertions.assertEquals;
32+
import static org.junit.jupiter.api.Assertions.assertFalse;
33+
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
34+
import static org.junit.jupiter.api.Assertions.assertNotNull;
35+
import static org.junit.jupiter.api.Assertions.assertNull;
36+
import static org.junit.jupiter.api.Assertions.assertTrue;
37+
import static org.mockito.ArgumentMatchers.any;
38+
import static org.mockito.ArgumentMatchers.anyInt;
39+
import static org.mockito.ArgumentMatchers.eq;
40+
import static org.mockito.Mockito.doAnswer;
41+
import static org.mockito.Mockito.mock;
42+
import static org.mockito.Mockito.times;
43+
import static org.mockito.Mockito.verify;
44+
import static org.mockito.Mockito.when;
45+
46+
import java.io.ByteArrayInputStream;
47+
import java.io.IOException;
48+
import java.io.PrintWriter;
49+
import java.io.StringWriter;
50+
import javax.xml.parsers.DocumentBuilder;
51+
import javax.xml.parsers.ParserConfigurationException;
52+
3053
import megamek.Version;
3154
import megamek.common.AmmoType;
3255
import megamek.common.Entity;
@@ -43,25 +66,13 @@
4366
import mekhq.campaign.unit.Unit;
4467
import mekhq.campaign.work.IAcquisitionWork;
4568
import mekhq.utilities.MHQXMLUtility;
69+
import org.junit.jupiter.api.BeforeEach;
70+
import org.junit.jupiter.api.Nested;
4671
import org.junit.jupiter.api.Test;
4772
import org.w3c.dom.Document;
4873
import org.w3c.dom.Element;
4974
import org.xml.sax.SAXException;
5075

51-
import javax.xml.parsers.DocumentBuilder;
52-
import javax.xml.parsers.ParserConfigurationException;
53-
import java.io.ByteArrayInputStream;
54-
import java.io.IOException;
55-
import java.io.PrintWriter;
56-
import java.io.StringWriter;
57-
58-
import static mekhq.campaign.parts.AmmoUtilities.getAmmoType;
59-
import static org.junit.jupiter.api.Assertions.*;
60-
import static org.mockito.ArgumentMatchers.any;
61-
import static org.mockito.ArgumentMatchers.anyInt;
62-
import static org.mockito.ArgumentMatchers.eq;
63-
import static org.mockito.Mockito.*;
64-
6576
public class AmmoBinTest {
6677
@Test
6778
public void deserializationCtorTest() {
@@ -1460,4 +1471,46 @@ public void fixFullBinAfterChangingAmmoType() {
14601471
// ... but the correct amount of our original ammo type unloaded from the bin.
14611472
assertEquals(ammoType.getShots(), quartermaster.getAmmoAvailable(ammoType));
14621473
}
1474+
1475+
@Nested
1476+
class AmmoBinSamePartTypeTests {
1477+
Campaign mockCampaign;
1478+
AmmoType ammo1;
1479+
AmmoType ammo2;
1480+
int shotsNeeded = 1;
1481+
int equipmentNum = 42;
1482+
1483+
@BeforeEach
1484+
void beforeEach() {
1485+
mockCampaign = mock(Campaign.class);
1486+
1487+
AmmoMounted mockAmmoRack1 = mock(AmmoMounted.class);
1488+
AmmoMounted mockAmmoRack2 = mock(AmmoMounted.class);
1489+
1490+
when(mockAmmoRack1.getType()).thenReturn(ammo1);
1491+
when(mockAmmoRack2.getType()).thenReturn(ammo2);
1492+
}
1493+
1494+
@Test void matchingACAmmo () {
1495+
ammo1 = (AmmoType) AmmoType.get("ISAC5 Ammo");
1496+
ammo2 = (AmmoType) AmmoType.get("ISAC5 Ammo");
1497+
1498+
// Create an Ammo Bin with some ammo ...
1499+
AmmoBin ammoBin1 = new AmmoBin(0, ammo1, equipmentNum, shotsNeeded, false, false, mockCampaign);
1500+
AmmoBin ammoBin2 = new AmmoBin(0, ammo2, equipmentNum, shotsNeeded, false, false, mockCampaign);
1501+
1502+
assertTrue(ammoBin1.isSamePartType(ammoBin2));
1503+
}
1504+
1505+
@Test void mismatchedACAmmo () {
1506+
ammo1 = (AmmoType) AmmoType.get("ISAC5 Ammo");
1507+
ammo2 = (AmmoType) AmmoType.get("ISAC10 Ammo");
1508+
1509+
// Create an Ammo Bin with some ammo ...
1510+
AmmoBin ammoBin1 = new AmmoBin(0, ammo1, equipmentNum, shotsNeeded, false, false, mockCampaign);
1511+
AmmoBin ammoBin2 = new AmmoBin(0, ammo2, equipmentNum, shotsNeeded, false, false, mockCampaign);
1512+
1513+
assertFalse(ammoBin1.isSamePartType(ammoBin2));
1514+
}
1515+
}
14631516
}

0 commit comments

Comments
 (0)