From 6d5c3fbde6f8b068afebea600754e1ecf9fa3c49 Mon Sep 17 00:00:00 2001 From: ghidra1 Date: Wed, 9 Oct 2019 11:45:35 -0400 Subject: [PATCH] Corrected EquatePluginTest1 failure and ConvertCommand --- .../plugin/core/equate/ConvertCommand.java | 3 +- .../core/equate/AbstractEquatePluginTest.java | 20 ++++++------- .../plugin/core/equate/EquatePlugin1Test.java | 30 +++++++++++++++++++ 3 files changed, 41 insertions(+), 12 deletions(-) diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/equate/ConvertCommand.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/equate/ConvertCommand.java index a8c320c735..3877ea357e 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/equate/ConvertCommand.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/equate/ConvertCommand.java @@ -95,7 +95,8 @@ public class ConvertCommand extends BackgroundCommand { DataType dt = data.getBaseDataType(); Settings settings = data; Settings defaultSettings = dt.getDefaultSettings(); - if (Scalar.class.equals(data.getValueClass()) || !(dt instanceof AbstractIntegerDataType)) { + if (!(Scalar.class.equals(data.getValueClass())) || + !(dt instanceof AbstractIntegerDataType)) { msg = "Unsupported data type for convert: " + data.getDataType().getDisplayName(); return false; } diff --git a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/equate/AbstractEquatePluginTest.java b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/equate/AbstractEquatePluginTest.java index 4379ea6433..110bc473f6 100644 --- a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/equate/AbstractEquatePluginTest.java +++ b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/equate/AbstractEquatePluginTest.java @@ -433,22 +433,20 @@ public abstract class AbstractEquatePluginTest extends AbstractProgramBasedTest } protected void createSignedData(Address addr) throws Exception { - int id = program.startTransaction("Test - Create Signed Data"); - - SignedWordDataType dt = new SignedWordDataType(program.getDataTypeManager()); - int length = dt.getLength(); - listing.clearCodeUnits(addr, addr.add(length), true); - listing.createData(addr, dt); - - program.endTransaction(id, true); + createData(addr, SignedWordDataType.dataType); } protected void createUnsignedData(Address addr) throws Exception { - int id = program.startTransaction("Test - Create Unsigned Data"); + createData(addr, WordDataType.dataType); + } - WordDataType dt = new WordDataType(program.getDataTypeManager()); + protected void createData(Address addr, DataType dt) throws Exception { + int id = program.startTransaction("Test - Create Data"); + + dt = dt.clone(program.getDataTypeManager()); int length = dt.getLength(); - listing.clearCodeUnits(addr, addr.add(length), true); + assertTrue("", length > 0); + listing.clearCodeUnits(addr, addr.add(length - 1), true); program.getListing().createData(addr, dt); program.endTransaction(id, true); diff --git a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/equate/EquatePlugin1Test.java b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/equate/EquatePlugin1Test.java index d727512cca..340ad37bc5 100644 --- a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/equate/EquatePlugin1Test.java +++ b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/equate/EquatePlugin1Test.java @@ -40,6 +40,7 @@ import ghidra.app.util.viewer.field.ListingTextField; import ghidra.program.model.address.Address; import ghidra.program.model.address.AddressSet; import ghidra.program.model.data.*; +import ghidra.program.model.data.Enum; import ghidra.program.model.listing.Data; import ghidra.program.model.listing.Instruction; import ghidra.program.model.scalar.Scalar; @@ -821,6 +822,35 @@ public class EquatePlugin1Test extends AbstractEquatePluginTest { assertTrue(data.getDataType() instanceof SignedWordDataType); } + @Test + public void testNoConvertOnData() throws Exception { + Address addr = addr(0x01003384); + + // action should not apply to BooleanDataType which produces Scalar value + createData(addr, BooleanDataType.dataType); + Data data = program.getListing().getDataAt(addr); + assertTrue(data.getDataType() instanceof BooleanDataType); + + goTo(addr); + DockingActionIf action = getAction(equatePlugin, "Convert To Signed Decimal"); + + assertFalse(action.isAddToPopup(getListingContext())); + assertFalse(action.isEnabledForContext(getListingContext())); + + // action should not apply to Enum which produces Scalar value + EnumDataType myEnum = new EnumDataType("Joe", 2); + myEnum.add("ValFFFF", -1); + + createData(addr, myEnum); + data = program.getListing().getDataAt(addr); + assertTrue(data.getDataType() instanceof Enum); + + goTo(addr); + + assertFalse(action.isAddToPopup(getListingContext())); + assertFalse(action.isEnabledForContext(getListingContext())); + } + @Test public void testConvertPickSameDatatype() throws Exception { Address addr = addr(0x01003384);