Corrected EquatePluginTest1 failure and ConvertCommand

This commit is contained in:
ghidra1
2019-10-09 11:45:35 -04:00
parent 05f1d707f5
commit 6d5c3fbde6
3 changed files with 41 additions and 12 deletions

View File

@@ -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;
}

View File

@@ -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);

View File

@@ -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);