Skip to content

Instantly share code, notes, and snippets.

@Scooletz
Last active March 2, 2016 06:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Scooletz/de7f6b63bce5f51b9053 to your computer and use it in GitHub Desktop.
Save Scooletz/de7f6b63bce5f51b9053 to your computer and use it in GitHub Desktop.
Both tests don't work. When a struct is turned into a class, they start to work
using System;
using CodeCop.Core;
using CodeCop.Core.Fluent;
using NUnit.Framework;
namespace CodeCop.Tests
{
public class CodeCopStructBugTests
{
public unsafe struct WithPtr
{
private readonly long* _ptr;
public WithPtr(long* ptr)
{
_ptr = ptr;
}
public long Read()
{
return *_ptr;
}
}
private long _return;
public CodeCopStructBugTests()
{
Cop.AsFluent();
typeof(WithPtr).GetMethod("Read").Override(c =>
{
// is this a problem? How is Sender passed for structs? Is it captured elsewhere, outside of the stack?
Console.WriteLine(c.Sender);
return _return;
});
Cop.Intercept();
}
[Test]
public unsafe void When_intercepting_a_struct_with_invalid_pointer()
{
const long @return = 43509847534;
_return = @return;
var withPtr = new WithPtr((long*)new IntPtr(3));
Assert.AreEqual(@return, withPtr.Read());
}
[Test]
public unsafe void When_intercepting_a_struct_with_valid_pointer()
{
const long @return = 9873453;
long l = 0;
_return = @return;
var withPtr = new WithPtr(&l);
Assert.AreEqual(@return, withPtr.Read());
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment