Browse Source

Unit test for yield/delegate local variables

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@4827 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
David Srbecký 16 years ago
parent
commit
b9888b0418
  1. 3
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Metadata/MethodInfo.cs
  2. 4
      src/AddIns/Misc/Debugger/Debugger.Tests/Project/Debugger.Tests.csproj
  3. 5
      src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/DebuggerTestsBase.cs
  4. 121
      src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/CompilerGeneratedClasses.cs

3
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Metadata/MethodInfo.cs

@ -455,7 +455,8 @@ namespace Debugger.MetaData @@ -455,7 +455,8 @@ namespace Debugger.MetaData
LocalVarSig.LocalVariable locVarSig = sigReader.ReadLocalVariable(sigReader.Blob, 0, out start);
DebugType type = DebugType.CreateFromSignature(this.Module, locVarSig.Type, this.DeclaringType);
// Compiler generated?
if ((symVar.Attributes & 1) == 1) {
// NB: Display class does not have the compiler-generated flag
if ((symVar.Attributes & 1) == 1 || symVar.Name.StartsWith("CS$")) {
if (type.IsDisplayClass) {
}

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

@ -31,6 +31,9 @@ @@ -31,6 +31,9 @@
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Xml" />
<Reference Include="System.Windows.Forms" />
<Reference Include="nunit.framework">
@ -48,6 +51,7 @@ @@ -48,6 +51,7 @@
<Compile Include="Src\TestPrograms\Break.cs" />
<Compile Include="Src\TestPrograms\Breakpoint.cs" />
<Compile Include="Src\TestPrograms\Callstack.cs" />
<Compile Include="Src\TestPrograms\CompilerGeneratedClasses.cs" />
<Compile Include="Src\TestPrograms\DebuggeeKilled.cs" />
<Compile Include="Src\TestPrograms\DebugTypes.cs" />
<Compile Include="Src\TestPrograms\DefinedTypes.cs" />

5
src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/DebuggerTestsBase.cs

@ -254,7 +254,10 @@ namespace Debugger.Tests @@ -254,7 +254,10 @@ namespace Debugger.Tests
Type type = obj.GetType();
if (!(obj is IEnumerable)) {
XmlElement newContainer = doc.CreateElement(XmlConvert.EncodeName(type.Name));
string name = XmlConvert.EncodeName(type.Name);
if (name.Contains("__AnonymousType"))
name = "AnonymousType";
XmlElement newContainer = doc.CreateElement(name);
container.AppendChild(newContainer);
container = newContainer;
}

121
src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/CompilerGeneratedClasses.cs

@ -0,0 +1,121 @@ @@ -0,0 +1,121 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="David Srbecký" email="dsrbecky@gmail.com"/>
// <version>$Revision: 3230 $</version>
// </file>
using System;
using System.Collections.Generic;
namespace Debugger.Tests.TestPrograms
{
public class CompilerGeneratedClasses
{
delegate void IntDelegate(int i);
public static void Main()
{
new List<object>(MyEnum());
}
static IEnumerable<object> MyEnum()
{
int stateFullVar = 101;
int stateFullVar_DelegRef = 102;
int stateFullVar_NestedDelegRef = 103;
yield return stateFullVar + stateFullVar_DelegRef + stateFullVar_NestedDelegRef;
{
int stateLessVar = 201;
int stateLessVar_DelegRef = 202;
int stateLessVar_NestedDelegRef = 203;
System.Diagnostics.Debugger.Break();
IntDelegate deleg = delegate (int delegArg_NestedDelegRef) {
int delegVar = 301;
int delegVar_NestedDelegRef = 302;
Console.WriteLine(stateFullVar_DelegRef);
Console.WriteLine(stateLessVar_DelegRef);
IntDelegate nestedDeleg = delegate (int nestedDelegArg) {
int nestedDelegVar = 303;
Console.WriteLine(delegArg_NestedDelegRef);
Console.WriteLine(delegVar_NestedDelegRef);
Console.WriteLine(stateFullVar_NestedDelegRef);
Console.WriteLine(stateLessVar_NestedDelegRef);
};
System.Diagnostics.Debugger.Break();
};
deleg(401);
}
}
}
}
#if TEST_CODE
namespace Debugger.Tests {
using System.Linq;
public partial class DebuggerTests
{
[NUnit.Framework.Test]
public void CompilerGeneratedClasses()
{
StartTest("CompilerGeneratedClasses.cs");
ObjectDump("YieldLocalVariables",
process.SelectedStackFrame.MethodInfo.LocalVariables.
Select(v => new { v.Name, Value = v.GetValue(process.SelectedStackFrame) })
);
process.Continue();
ObjectDump("DelegateLocalVariables",
process.SelectedStackFrame.MethodInfo.LocalVariables.
Select(v => new { v.Name, Value = v.GetValue(process.SelectedStackFrame) })
);
EndTest();
}
}
}
#endif
#if EXPECTED_OUTPUT
<?xml version="1.0" encoding="utf-8"?>
<DebuggerTests>
<Test
name="CompilerGeneratedClasses.cs">
<ProcessStarted />
<ModuleLoaded>mscorlib.dll (No symbols)</ModuleLoaded>
<ModuleLoaded>CompilerGeneratedClasses.exe (Has symbols)</ModuleLoaded>
<DebuggingPaused>Break CompilerGeneratedClasses.cs:35,5-35,41</DebuggingPaused>
<YieldLocalVariables>
<Item>
<AnonymousType
Name="stateLessVar"
Value="stateLessVar = 201" />
</Item>
<Item>
<AnonymousType
Name="deleg"
Value="deleg = null" />
</Item>
</YieldLocalVariables>
<DebuggingPaused>Break CompilerGeneratedClasses.cs:51,6-51,42</DebuggingPaused>
<DelegateLocalVariables>
<Item>
<AnonymousType
Name="delegVar"
Value="delegVar = 301" />
</Item>
<Item>
<AnonymousType
Name="nestedDeleg"
Value="nestedDeleg = {IntDelegate}" />
</Item>
</DelegateLocalVariables>
<ProcessExited />
</Test>
</DebuggerTests>
#endif // EXPECTED_OUTPUT
Loading…
Cancel
Save