Browse Source

Added debugger test: Callstack

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@864 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
David Srbecký 20 years ago
parent
commit
247da12b8e
  1. 1
      src/AddIns/Misc/Debugger/Debugger.Tests/Project/Debugger.Tests.csproj
  2. 49
      src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/DebuggerTests.cs
  3. 1
      src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestProgram.cs
  4. 29
      src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/Callstack.cs

1
src/AddIns/Misc/Debugger/Debugger.Tests/Project/Debugger.Tests.csproj

@ -47,6 +47,7 @@
<Compile Include="Src\TestPrograms\Break.cs" /> <Compile Include="Src\TestPrograms\Break.cs" />
<Compile Include="Src\TestPrograms\FileRelease.cs" /> <Compile Include="Src\TestPrograms\FileRelease.cs" />
<Compile Include="Src\TestPrograms\Stepping.cs" /> <Compile Include="Src\TestPrograms\Stepping.cs" />
<Compile Include="Src\TestPrograms\Callstack.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Folder Include="Src" /> <Folder Include="Src" />

49
src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/DebuggerTests.cs

@ -11,6 +11,7 @@ using NUnit.Framework;
using System; using System;
using System.CodeDom.Compiler; using System.CodeDom.Compiler;
using System.Collections; using System.Collections;
using System.Collections.Generic;
using System.IO; using System.IO;
using System.Reflection; using System.Reflection;
using System.Resources; using System.Resources;
@ -57,7 +58,7 @@ namespace Debugger.Tests
debugger.Start(exeFilename, Path.GetDirectoryName(exeFilename), programName); debugger.Start(exeFilename, Path.GetDirectoryName(exeFilename), programName);
} }
public void WaitForPause(PausedReason expectedReason, string expectedLastLogMessage) void WaitForPause(PausedReason expectedReason, string expectedLastLogMessage)
{ {
if (expectedLastLogMessage != null) expectedLastLogMessage += "\r\n"; if (expectedLastLogMessage != null) expectedLastLogMessage += "\r\n";
debugger.WaitForPause(); debugger.WaitForPause();
@ -66,11 +67,11 @@ namespace Debugger.Tests
Assert.AreEqual(expectedLastLogMessage, lastLogMessage); Assert.AreEqual(expectedLastLogMessage, lastLogMessage);
} }
[Test] [Test]
public void SimpleProgram() public void SimpleProgram()
{ {
StartProgram("SimpleProgram"); StartProgram("SimpleProgram");
debugger.WaitForPrecessExit(); debugger.WaitForPrecessExit();
} }
@ -78,9 +79,7 @@ namespace Debugger.Tests
public void HelloWorld() public void HelloWorld()
{ {
StartProgram("HelloWorld"); StartProgram("HelloWorld");
debugger.WaitForPrecessExit(); debugger.WaitForPrecessExit();
Assert.AreEqual("Hello world!\r\n", log); Assert.AreEqual("Hello world!\r\n", log);
} }
@ -88,10 +87,9 @@ namespace Debugger.Tests
public void Break() public void Break()
{ {
StartProgram("Break"); StartProgram("Break");
WaitForPause(PausedReason.Break, null); WaitForPause(PausedReason.Break, null);
debugger.Continue();
debugger.Continue();
debugger.WaitForPrecessExit(); debugger.WaitForPrecessExit();
} }
@ -102,11 +100,10 @@ namespace Debugger.Tests
Assert.IsTrue(File.Exists(symbolsFilename), "Symbols file not found (.pdb)"); Assert.IsTrue(File.Exists(symbolsFilename), "Symbols file not found (.pdb)");
StartProgram("Symbols"); StartProgram("Symbols");
WaitForPause(PausedReason.Break, null); WaitForPause(PausedReason.Break, null);
Assert.AreEqual(true, debugger.GetModule(Path.GetFileName(assemblyFilename)).SymbolsLoaded, "Module symbols not loaded"); Assert.AreEqual(true, debugger.GetModule(Path.GetFileName(assemblyFilename)).SymbolsLoaded, "Module symbols not loaded");
debugger.Continue();
debugger.Continue();
debugger.WaitForPrecessExit(); debugger.WaitForPrecessExit();
} }
@ -116,21 +113,19 @@ namespace Debugger.Tests
Breakpoint b = debugger.AddBreakpoint(@"D:\corsavy\SharpDevelop\src\AddIns\Misc\Debugger\Debugger.Tests\Project\Src\TestPrograms\Breakpoint.cs", 18); Breakpoint b = debugger.AddBreakpoint(@"D:\corsavy\SharpDevelop\src\AddIns\Misc\Debugger\Debugger.Tests\Project\Src\TestPrograms\Breakpoint.cs", 18);
StartProgram("Breakpoint"); StartProgram("Breakpoint");
WaitForPause(PausedReason.Break, null); WaitForPause(PausedReason.Break, null);
Assert.AreEqual(true, b.Enabled); Assert.AreEqual(true, b.Enabled);
Assert.AreEqual(true, b.HadBeenSet, "Breakpoint is not set"); Assert.AreEqual(true, b.HadBeenSet, "Breakpoint is not set");
Assert.AreEqual(18, b.SourcecodeSegment.StartLine); Assert.AreEqual(18, b.SourcecodeSegment.StartLine);
debugger.Continue();
WaitForPause(PausedReason.Breakpoint, "Mark 1");
debugger.Continue(); debugger.Continue();
WaitForPause(PausedReason.Breakpoint, "Mark 1");
WaitForPause(PausedReason.Break, "Mark 2");
debugger.Continue(); debugger.Continue();
WaitForPause(PausedReason.Break, "Mark 2");
debugger.Continue();
debugger.WaitForPrecessExit(); debugger.WaitForPrecessExit();
Assert.AreEqual("Mark 1\r\nMark 2\r\n", log); Assert.AreEqual("Mark 1\r\nMark 2\r\n", log);
} }
@ -153,7 +148,6 @@ namespace Debugger.Tests
Assert.IsTrue(File.Exists(newSymbolsFilename), "Symbols file copying failed"); Assert.IsTrue(File.Exists(newSymbolsFilename), "Symbols file copying failed");
StartProgram(newAssemblyFilename, "FileRelease"); StartProgram(newAssemblyFilename, "FileRelease");
debugger.WaitForPrecessExit(); debugger.WaitForPrecessExit();
try { try {
@ -202,5 +196,32 @@ namespace Debugger.Tests
debugger.Continue(); debugger.Continue();
debugger.WaitForPrecessExit(); debugger.WaitForPrecessExit();
} }
[Test]
public void Callstack()
{
List<Function> callstack;
StartProgram("Callstack");
WaitForPause(PausedReason.Break, null);
callstack = new List<Function>(debugger.CurrentThread.Callstack);
Assert.AreEqual("Sub2", callstack[0].Name);
Assert.AreEqual("Sub1", callstack[1].Name);
Assert.AreEqual("Main", callstack[2].Name);
debugger.StepOut();
WaitForPause(PausedReason.StepComplete, null);
callstack = new List<Function>(debugger.CurrentThread.Callstack);
Assert.AreEqual("Sub1", callstack[0].Name);
Assert.AreEqual("Main", callstack[1].Name);
debugger.StepOut();
WaitForPause(PausedReason.StepComplete, null);
callstack = new List<Function>(debugger.CurrentThread.Callstack);
Assert.AreEqual("Main", callstack[0].Name);
debugger.Continue();
debugger.WaitForPrecessExit();
}
} }
} }

1
src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestProgram.cs

@ -21,6 +21,7 @@ namespace Debugger.Tests
switch (args[0]) { switch (args[0]) {
case "Break": Progs.Break.Main(); break; case "Break": Progs.Break.Main(); break;
case "Breakpoint": Progs.Breakpoint.Main(); break; case "Breakpoint": Progs.Breakpoint.Main(); break;
case "Callstack": Progs.Callstack.Main(); break;
case "FileRelease": Progs.FileRelease.Main(); break; case "FileRelease": Progs.FileRelease.Main(); break;
case "HelloWorld": Progs.HelloWorld.Main(); break; case "HelloWorld": Progs.HelloWorld.Main(); break;
case "SimpleProgram": Progs.SimpleProgram.Main(); break; case "SimpleProgram": Progs.SimpleProgram.Main(); break;

29
src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/Callstack.cs

@ -0,0 +1,29 @@
// <file>
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
// <license see="prj:///doc/license.txt">GNU General Public License</license>
// <owner name="David Srbecký" email="dsrbecky@gmail.com"/>
// <version>$Revision$</version>
// </file>
using System;
namespace Debugger.Tests.TestPrograms
{
public class Callstack
{
public static void Main()
{
Sub1();
}
static void Sub1()
{
Sub2();
}
static void Sub2()
{
System.Diagnostics.Debugger.Break();
}
}
}
Loading…
Cancel
Save