1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-08 11:38:21 +02:00

Adding functionality to allow for watch testing

This commit is contained in:
Brian Fiete 2019-11-07 06:53:56 -08:00
parent d6db6bf774
commit 2f2230ec79

View file

@ -767,7 +767,7 @@ namespace IDE
if (!File.Exists(outFilePath)) if (!File.Exists(outFilePath))
{ {
ScriptManager.sActiveManager.Fail("Unable to locate project file '{0}'", outFilePath); mScriptManager.Fail("Unable to locate project file '{0}'", outFilePath);
} }
} }
@ -782,7 +782,7 @@ namespace IDE
if (!File.Exists(outFilePath)) if (!File.Exists(outFilePath))
{ {
ScriptManager.sActiveManager.Fail("Unable to locate file '{0}'", outFilePath); mScriptManager.Fail("Unable to locate file '{0}'", outFilePath);
} }
} }
@ -791,7 +791,7 @@ namespace IDE
var sourceViewPanel = gApp.GetActiveSourceViewPanel(); var sourceViewPanel = gApp.GetActiveSourceViewPanel();
if (sourceViewPanel == null) if (sourceViewPanel == null)
{ {
ScriptManager.sActiveManager.Fail("No active source view panel"); mScriptManager.Fail("No active source view panel");
return null; return null;
} }
sourceViewPanel.EnsureReady(); sourceViewPanel.EnsureReady();
@ -802,7 +802,7 @@ namespace IDE
{ {
var textPanel = gApp.GetActivePanel() as TextPanel; var textPanel = gApp.GetActivePanel() as TextPanel;
if (textPanel == null) if (textPanel == null)
ScriptManager.sActiveManager.Fail("No active text panel"); mScriptManager.Fail("No active text panel");
return textPanel; return textPanel;
} }
@ -894,6 +894,28 @@ namespace IDE
public bool IsPaused() public bool IsPaused()
{ {
/*if (gApp.mWatchPanel.mVisible)
{
bool hasPendingWatch = false;
gApp.mWatchPanel.mListView.GetRoot().WithItems(scope [&] (item) =>
{
var watchListViewItem = (WatchListViewItem)item;
if (!watchListViewItem.mVisible)
return;
if (watchListViewItem.mMustUpdateBeforeEvaluate)
hasPendingWatch = true;
if ((watchListViewItem.mWatchEntry != null) && (!watchListViewItem.mWatchEntry.mHasValue))
{
var parentWatchListViewItem = watchListViewItem.mParentItem as WatchListViewItem;
if ((!watchListViewItem.mDisabled) || (parentWatchListViewItem == null) || (watchListViewItem.mWatchEntry.mIsNewExpression))
hasPendingWatch = true;
}
});
if (hasPendingWatch)
return false;
}*/
if (gApp.mLastActiveSourceViewPanel != null) if (gApp.mLastActiveSourceViewPanel != null)
{ {
var sourceViewPanel = gApp.mLastActiveSourceViewPanel; var sourceViewPanel = gApp.mLastActiveSourceViewPanel;
@ -1013,7 +1035,7 @@ namespace IDE
case .Ok(let flags): case .Ok(let flags):
gApp.mDebugger.SetSymSrvOptions(symCacheDir, symSrvStr, flags); gApp.mDebugger.SetSymSrvOptions(symCacheDir, symSrvStr, flags);
case .Err: case .Err:
ScriptManager.sActiveManager.Fail("Failed to parse flags"); mScriptManager.Fail("Failed to parse flags");
} }
} }
@ -1031,7 +1053,7 @@ namespace IDE
{ {
if (Utils.DelTree(dirPath) case .Err) if (Utils.DelTree(dirPath) case .Err)
{ {
ScriptManager.sActiveManager.Fail(scope String()..AppendF("Failed to deltree '{}'", dirPath)); mScriptManager.Fail(scope String()..AppendF("Failed to deltree '{}'", dirPath));
} }
} }
@ -1041,7 +1063,7 @@ namespace IDE
let fileStream = scope FileStream(); let fileStream = scope FileStream();
if (fileStream.Create(path) case .Err) if (fileStream.Create(path) case .Err)
{ {
ScriptManager.sActiveManager.Fail("Failed to create file '{}'", path); mScriptManager.Fail("Failed to create file '{}'", path);
return; return;
} }
fileStream.Write(text); fileStream.Write(text);
@ -1052,7 +1074,7 @@ namespace IDE
{ {
if (File.Move(origPath, newPath) case .Err) if (File.Move(origPath, newPath) case .Err)
{ {
ScriptManager.sActiveManager.Fail("Failed to move file '{}' to '{}'", origPath, newPath); mScriptManager.Fail("Failed to move file '{}' to '{}'", origPath, newPath);
} }
} }
@ -1295,7 +1317,7 @@ namespace IDE
String content = scope .(); String content = scope .();
if (File.ReadAllText(origPath, content, true) case .Err) if (File.ReadAllText(origPath, content, true) case .Err)
{ {
ScriptManager.sActiveManager.Fail("Failed to open file '{}'", origPath); mScriptManager.Fail("Failed to open file '{}'", origPath);
return; return;
} }
@ -1316,7 +1338,7 @@ namespace IDE
FileStream tempStream = scope .(); FileStream tempStream = scope .();
if (tempStream.Create(tempPath) case .Err) if (tempStream.Create(tempPath) case .Err)
{ {
ScriptManager.sActiveManager.Fail("Failed to create temp file '{}'", tempPath); mScriptManager.Fail("Failed to create temp file '{}'", tempPath);
return; return;
} }
tempStream.Write(content); tempStream.Write(content);
@ -1324,13 +1346,13 @@ namespace IDE
if (File.Move(tempPath, newPath) case .Err) if (File.Move(tempPath, newPath) case .Err)
{ {
ScriptManager.sActiveManager.Fail("Failed to move file '{}' to '{}'", origPath, newPath); mScriptManager.Fail("Failed to move file '{}' to '{}'", origPath, newPath);
return; return;
} }
if (File.Delete(origPath) case .Err) if (File.Delete(origPath) case .Err)
{ {
ScriptManager.sActiveManager.Fail("Failed to delete file '{}'", origPath); mScriptManager.Fail("Failed to delete file '{}'", origPath);
return; return;
} }
} }
@ -1356,7 +1378,7 @@ namespace IDE
var panelHeader = sourceViewPanel.[Friend]mPanelHeader; var panelHeader = sourceViewPanel.[Friend]mPanelHeader;
if (panelHeader == null) if (panelHeader == null)
{ {
ScriptManager.sActiveManager.Fail("No panel present"); mScriptManager.Fail("No panel present");
return; return;
} }
@ -1372,7 +1394,7 @@ namespace IDE
} }
} }
ScriptManager.sActiveManager.Fail("Button '{0}' not found", buttonName); mScriptManager.Fail("Button '{0}' not found", buttonName);
} }
[IDECommand] [IDECommand]
@ -1394,7 +1416,7 @@ namespace IDE
if (outVal != evalResult) if (outVal != evalResult)
{ {
ScriptManager.sActiveManager.Fail("Assert failed: {0} == {1}", outVal, evalResult); mScriptManager.Fail("Assert failed: {0} == {1}", outVal, evalResult);
} }
} }
@ -1407,10 +1429,136 @@ namespace IDE
if (!outVal.Contains(evalResult)) if (!outVal.Contains(evalResult))
{ {
ScriptManager.sActiveManager.Fail("Assert failed: {0} contains {1}", outVal, evalResult); mScriptManager.Fail("Assert failed: {0} contains {1}", outVal, evalResult);
} }
} }
[IDECommand]
public void AddWatch(String evalStr)
{
gApp.mWatchPanel.AddWatchItem(evalStr);
}
[IDECommand]
public void SelectWatch(String str)
{
UpdateWatches();
int foundIdx = 0;
gApp.mWatchPanel.mListView.GetRoot().WithItems(scope [&] (item) =>
{
if (item.mLabel == str)
{
if (foundIdx == 0)
item.Focused = true;
else
item.Selected = true;
foundIdx++;
}
else
item.Selected = false;
});
if (foundIdx == 0)
mScriptManager.Fail("Unable to find watch '{}'", str);
}
[IDECommand]
public void FocusWatchDir(int dir)
{
if (dir < 0)
{
for (int idx < -dir)
gApp.mWatchPanel.mListView.KeyDown(.Up, false);
}
else
{
for (int idx < dir)
gApp.mWatchPanel.mListView.KeyDown(.Down, false);
}
}
[IDECommand]
public void AssertSelectedWatchEquals(String val)
{
UpdateWatches();
int foundIdx = 0;
gApp.mWatchPanel.mListView.GetRoot().WithItems(scope [&] (item) =>
{
let watchItem = (WatchListViewItem)item;
if (watchItem.Selected)
{
foundIdx++;
ForceWatchItem(watchItem);
let valueWatchItem = (WatchListViewItem)watchItem.GetSubItem(1);
if (valueWatchItem.Label != val)
mScriptManager.Fail("Assert failed: {} == {}", valueWatchItem.Label, val);
}
});
if (foundIdx == 0)
mScriptManager.Fail("No watches selected");
}
[IDECommand]
public void UpdateWatches()
{
gApp.mWatchPanel.CheckClearDirtyWatches();
gApp.mWatchPanel.mListView.GetRoot().WithItems(scope [&] (item) =>
{
let watchItem = (WatchListViewItem)item;
if (!watchItem.mVisible)
return;
ForceWatchItem(watchItem);
});
}
void ForceWatchItem(WatchListViewItem item)
{
item.CalculatedDesiredHeight();
if (item.mMustUpdateBeforeEvaluate)
item.Update();
if ((item.mWatchEntry != null) && (!item.mWatchEntry.mHasValue))
{
item.mWatchOwner.UpdateWatch(item);
}
}
[IDECommand]
public void OpenSelectedWatches()
{
gApp.mWatchPanel.mListView.GetRoot().WithItems(scope (item) =>
{
if (item.Selected)
{
let watchItem = (WatchListViewItem)item;
ForceWatchItem(watchItem);
item.Open(true, true);
item.CalculatedDesiredHeight();
watchItem.WithItems(scope (subItem) =>
{
var watchSubItem = (WatchListViewItem)subItem;
if (watchSubItem.mMustUpdateBeforeEvaluate)
watchSubItem.Update();
});
}
});
}
[IDECommand]
public void CloseSelectedWatches()
{
gApp.mWatchPanel.mListView.GetRoot().WithItems(scope (item) =>
{
if (item.Selected)
item.Open(false, true);
});
}
[IDECommand] [IDECommand]
public void ImmediateEvaluate(String evalStr) public void ImmediateEvaluate(String evalStr)
{ {
@ -1430,7 +1578,7 @@ namespace IDE
gApp.mDebugger.UpdateCallStack(); gApp.mDebugger.UpdateCallStack();
if (stackCount == gApp.mDebugger.GetCallStackCount()) if (stackCount == gApp.mDebugger.GetCallStackCount())
{ {
ScriptManager.sActiveManager.Fail("Stack idx '{0}' is out of range", selectIdx); mScriptManager.Fail("Stack idx '{0}' is out of range", selectIdx);
} }
} }
@ -1462,7 +1610,7 @@ namespace IDE
stackIdx++; stackIdx++;
} }
ScriptManager.sActiveManager.Fail("Failed to find stack frame containing string '{}'", str); mScriptManager.Fail("Failed to find stack frame containing string '{}'", str);
} }
public bool AssertRunning() public bool AssertRunning()
@ -1541,7 +1689,7 @@ namespace IDE
if (methodName != stackframeInfo) if (methodName != stackframeInfo)
{ {
ScriptManager.sActiveManager.Fail("Expect method name '{0}', got '{1}'", methodName, stackframeInfo); mScriptManager.Fail("Expect method name '{0}', got '{1}'", methodName, stackframeInfo);
} }
} }
@ -1579,7 +1727,7 @@ namespace IDE
var lastBreakpoint = gApp.mDebugger.mBreakpointList.Back; var lastBreakpoint = gApp.mDebugger.mBreakpointList.Back;
if (lastBreakpoint == null) if (lastBreakpoint == null)
{ {
ScriptManager.sActiveManager.Fail("No last breakpoint"); mScriptManager.Fail("No last breakpoint");
return; return;
} }
lastBreakpoint.SetCondition(condition); lastBreakpoint.SetCondition(condition);
@ -1591,13 +1739,13 @@ namespace IDE
var lastBreakpoint = gApp.mDebugger.mBreakpointList.Back; var lastBreakpoint = gApp.mDebugger.mBreakpointList.Back;
if (lastBreakpoint == null) if (lastBreakpoint == null)
{ {
ScriptManager.sActiveManager.Fail("No last breakpoint"); mScriptManager.Fail("No last breakpoint");
return; return;
} }
switch (Enum.Parse<Breakpoint.HitCountBreakKind>(hitCountBreakKindStr)) switch (Enum.Parse<Breakpoint.HitCountBreakKind>(hitCountBreakKindStr))
{ {
case .Err: case .Err:
ScriptManager.sActiveManager.Fail("Invalid break kind: '{0}'", hitCountBreakKindStr); mScriptManager.Fail("Invalid break kind: '{0}'", hitCountBreakKindStr);
case .Ok(let hitCountBreakKind): case .Ok(let hitCountBreakKind):
lastBreakpoint.SetHitCountTarget(hitCountTarget, hitCountBreakKind); lastBreakpoint.SetHitCountTarget(hitCountTarget, hitCountBreakKind);
} }
@ -1619,20 +1767,20 @@ namespace IDE
var textPanel = GetActiveTextPanel(); var textPanel = GetActiveTextPanel();
if (textPanel == null) if (textPanel == null)
{ {
ScriptManager.sActiveManager.Fail("No text panel active"); mScriptManager.Fail("No text panel active");
return null; return null;
} }
var ewc = textPanel.EditWidget.mEditWidgetContent as SourceEditWidgetContent; var ewc = textPanel.EditWidget.mEditWidgetContent as SourceEditWidgetContent;
if (ewc == null) if (ewc == null)
{ {
ScriptManager.sActiveManager.Fail("Not an autocomplete text view"); mScriptManager.Fail("Not an autocomplete text view");
return null; return null;
} }
if (ewc.mAutoComplete == null) if (ewc.mAutoComplete == null)
{ {
ScriptManager.sActiveManager.Fail("No autocomplete content"); mScriptManager.Fail("No autocomplete content");
return null; return null;
} }
@ -1669,9 +1817,9 @@ namespace IDE
if (found != wantsFind) if (found != wantsFind)
{ {
if (wantsFind) if (wantsFind)
ScriptManager.sActiveManager.Fail("Autocomplete entry '{0}' not found", wantEntry); mScriptManager.Fail("Autocomplete entry '{0}' not found", wantEntry);
else else
ScriptManager.sActiveManager.Fail("Autocomplete entry '{0}' found, but it shouldn't have been", wantEntry); mScriptManager.Fail("Autocomplete entry '{0}' found, but it shouldn't have been", wantEntry);
return false; return false;
} }
return true; return true;
@ -1721,7 +1869,7 @@ namespace IDE
if (contents != wantsContents) if (contents != wantsContents)
{ {
ScriptManager.sActiveManager.Fail("Autocomplete not showing expected values. Expected '{}', got '{}'.", wantsContents, contents); mScriptManager.Fail("Autocomplete not showing expected values. Expected '{}', got '{}'.", wantsContents, contents);
return false; return false;
} }
return true; return true;
@ -1754,14 +1902,14 @@ namespace IDE
if (!Path.Equals(filePath, sourceViewPanel.mFilePath)) if (!Path.Equals(filePath, sourceViewPanel.mFilePath))
{ {
ScriptManager.sActiveManager.Fail("Expected source file '{0}', got '{1}'", filePath, sourceViewPanel.mFilePath); mScriptManager.Fail("Expected source file '{0}', got '{1}'", filePath, sourceViewPanel.mFilePath);
return; return;
} }
let atLine = sourceViewPanel.mEditWidget.mEditWidgetContent.CursorLineAndColumn.mLine + 1; let atLine = sourceViewPanel.mEditWidget.mEditWidgetContent.CursorLineAndColumn.mLine + 1;
if (atLine != lineNum) if (atLine != lineNum)
{ {
ScriptManager.sActiveManager.Fail("Expected line '{0}', got '{1}'", lineNum, atLine); mScriptManager.Fail("Expected line '{0}', got '{1}'", lineNum, atLine);
return; return;
} }
} }
@ -1778,14 +1926,14 @@ namespace IDE
if (!Path.Equals(filePath, sourceViewPanel.mFilePath)) if (!Path.Equals(filePath, sourceViewPanel.mFilePath))
{ {
ScriptManager.sActiveManager.Fail("Expected source file '{0}', got '{1}'", filePath, sourceViewPanel.mFilePath); mScriptManager.Fail("Expected source file '{0}', got '{1}'", filePath, sourceViewPanel.mFilePath);
return; return;
} }
let atColumn = sourceViewPanel.mEditWidget.mEditWidgetContent.CursorLineAndColumn.mColumn + 1; let atColumn = sourceViewPanel.mEditWidget.mEditWidgetContent.CursorLineAndColumn.mColumn + 1;
if (atColumn != column) if (atColumn != column)
{ {
ScriptManager.sActiveManager.Fail("Expected column '{0}', got '{1}'", column, atColumn); mScriptManager.Fail("Expected column '{0}', got '{1}'", column, atColumn);
return; return;
} }
} }
@ -1798,7 +1946,7 @@ namespace IDE
var textPanel = GetActiveTextPanel(); var textPanel = GetActiveTextPanel();
if (textPanel == null) if (textPanel == null)
{ {
ScriptManager.sActiveManager.Fail("No active text panel"); mScriptManager.Fail("No active text panel");
return; return;
} }
var ewc = textPanel.EditWidget.mEditWidgetContent; var ewc = textPanel.EditWidget.mEditWidgetContent;
@ -1828,7 +1976,7 @@ namespace IDE
} }
} }
ScriptManager.sActiveManager.Fail("Unable to find text '{0}'", findText); mScriptManager.Fail("Unable to find text '{0}'", findText);
} }
[IDECommand] [IDECommand]
@ -1852,7 +2000,7 @@ namespace IDE
if (!lineText.Contains(findText)) if (!lineText.Contains(findText))
{ {
ScriptManager.sActiveManager.Fail("Lines does not contain text '{0}'", findText); mScriptManager.Fail("Lines does not contain text '{0}'", findText);
} }
} }
@ -1960,7 +2108,7 @@ namespace IDE
} }
if (gApp.mLastCompileFailed) if (gApp.mLastCompileFailed)
ScriptManager.sActiveManager.Fail("Compile failed"); mScriptManager.Fail("Compile failed");
} }
[IDECommand] [IDECommand]
@ -1973,7 +2121,7 @@ namespace IDE
var ewc = sourceViewPanel.mEditWidget.mEditWidgetContent; var ewc = sourceViewPanel.mEditWidget.mEditWidgetContent;
GotoText(textFrom); GotoText(textFrom);
if (ScriptManager.sActiveManager.Failed) if (mScriptManager.Failed)
return; return;
@ -2082,7 +2230,7 @@ namespace IDE
if (ScriptManager.sActiveManager.mExpectingError != null) if (ScriptManager.sActiveManager.mExpectingError != null)
{ {
DeleteAndNullify!(ScriptManager.sActiveManager.mExpectingError); DeleteAndNullify!(ScriptManager.sActiveManager.mExpectingError);
ScriptManager.sActiveManager.Fail("Expected error did not occur"); mScriptManager.Fail("Expected error did not occur");
} }
} }
@ -2092,7 +2240,7 @@ namespace IDE
var textPanel = GetActiveSourceViewPanel(); var textPanel = GetActiveSourceViewPanel();
if (textPanel == null) if (textPanel == null)
{ {
ScriptManager.sActiveManager.Fail("No active text panel"); mScriptManager.Fail("No active text panel");
return; return;
} }
var ewc = textPanel.EditWidget.mEditWidgetContent; var ewc = textPanel.EditWidget.mEditWidgetContent;