You can subscribe to this list here.
| 2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(31) |
Dec
(26) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2003 |
Jan
(8) |
Feb
(27) |
Mar
(15) |
Apr
|
May
(2) |
Jun
(13) |
Jul
(59) |
Aug
(48) |
Sep
(9) |
Oct
(4) |
Nov
(24) |
Dec
|
| 2004 |
Jan
(24) |
Feb
(2) |
Mar
(12) |
Apr
(9) |
May
(4) |
Jun
(26) |
Jul
(20) |
Aug
(23) |
Sep
(13) |
Oct
(31) |
Nov
(23) |
Dec
(11) |
| 2005 |
Jan
|
Feb
|
Mar
|
Apr
(19) |
May
(64) |
Jun
(7) |
Jul
(20) |
Aug
(1) |
Sep
(6) |
Oct
|
Nov
(3) |
Dec
|
| 2006 |
Jan
|
Feb
(69) |
Mar
(18) |
Apr
(1) |
May
(4) |
Jun
(3) |
Jul
(27) |
Aug
(19) |
Sep
(12) |
Oct
(3) |
Nov
(13) |
Dec
(6) |
| 2007 |
Jan
(20) |
Feb
(17) |
Mar
(1) |
Apr
(3) |
May
(4) |
Jun
(11) |
Jul
(10) |
Aug
(24) |
Sep
(19) |
Oct
(13) |
Nov
(8) |
Dec
(7) |
| 2008 |
Jan
(54) |
Feb
(24) |
Mar
(11) |
Apr
(35) |
May
(13) |
Jun
(10) |
Jul
(30) |
Aug
(18) |
Sep
(21) |
Oct
(18) |
Nov
(40) |
Dec
(76) |
| 2009 |
Jan
(64) |
Feb
(23) |
Mar
(15) |
Apr
(23) |
May
(46) |
Jun
(25) |
Jul
(31) |
Aug
(7) |
Sep
(7) |
Oct
(6) |
Nov
(15) |
Dec
(19) |
| 2010 |
Jan
(13) |
Feb
(8) |
Mar
(6) |
Apr
(4) |
May
(8) |
Jun
(7) |
Jul
(3) |
Aug
(9) |
Sep
(6) |
Oct
(15) |
Nov
(3) |
Dec
(5) |
| 2011 |
Jan
(1) |
Feb
|
Mar
(4) |
Apr
(5) |
May
(2) |
Jun
|
Jul
(2) |
Aug
(2) |
Sep
(2) |
Oct
(4) |
Nov
(2) |
Dec
(3) |
| 2012 |
Jan
(6) |
Feb
(2) |
Mar
(3) |
Apr
(3) |
May
(3) |
Jun
(1) |
Jul
|
Aug
|
Sep
(2) |
Oct
(2) |
Nov
|
Dec
(1) |
| 2013 |
Jan
(3) |
Feb
(1) |
Mar
|
Apr
|
May
(1) |
Jun
(1) |
Jul
|
Aug
(5) |
Sep
|
Oct
(1) |
Nov
(2) |
Dec
|
| 2014 |
Jan
|
Feb
|
Mar
|
Apr
(1) |
May
|
Jun
(1) |
Jul
(1) |
Aug
|
Sep
(1) |
Oct
|
Nov
|
Dec
(1) |
| 2015 |
Jan
|
Feb
(19) |
Mar
(115) |
Apr
(23) |
May
(41) |
Jun
(48) |
Jul
(59) |
Aug
(29) |
Sep
(40) |
Oct
(78) |
Nov
(58) |
Dec
(47) |
| 2016 |
Jan
(25) |
Feb
(30) |
Mar
(29) |
Apr
(10) |
May
(17) |
Jun
(1) |
Jul
(1) |
Aug
(6) |
Sep
(2) |
Oct
(1) |
Nov
(3) |
Dec
(2) |
| 2017 |
Jan
(5) |
Feb
(2) |
Mar
(7) |
Apr
(1) |
May
(7) |
Jun
(2) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2018 |
Jan
|
Feb
|
Mar
(5) |
Apr
|
May
(1) |
Jun
|
Jul
(3) |
Aug
|
Sep
|
Oct
|
Nov
(2) |
Dec
|
| 2019 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(1) |
Dec
(3) |
| 2020 |
Jan
|
Feb
|
Mar
|
Apr
(6) |
May
|
Jun
|
Jul
(29) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2021 |
Jan
|
Feb
|
Mar
(1) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(5) |
Dec
(3) |
| 2022 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(5) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2023 |
Jan
|
Feb
|
Mar
|
Apr
(3) |
May
|
Jun
(7) |
Jul
(1) |
Aug
|
Sep
(6) |
Oct
(4) |
Nov
(1) |
Dec
(4) |
| 2024 |
Jan
(2) |
Feb
(5) |
Mar
|
Apr
|
May
(8) |
Jun
(159) |
Jul
(90) |
Aug
(22) |
Sep
|
Oct
(6) |
Nov
(8) |
Dec
(1) |
| 2025 |
Jan
(20) |
Feb
(6) |
Mar
(2) |
Apr
(4) |
May
(29) |
Jun
(63) |
Jul
(62) |
Aug
(70) |
Sep
(120) |
Oct
(46) |
Nov
(33) |
Dec
(25) |
| 2026 |
Jan
(37) |
Feb
(56) |
Mar
(62) |
Apr
(24) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
|
From: Steve F. <st...@m3...> - 2003-11-23 10:08:38
|
Glad to hear that. No we haven't overlooked it, just haven't done it. We're currently working on the java version as a prerequisite to reworking nmock. We're also working on the mockobjects wiki. Of course, there is /one/ way for you to have some documentation written ;-) S. Nick Robinson wrote: > I have been using NMock to help decouple my test rig from the DB > layer, and it has worked like a dream. However, I need to introduce > the team to it, and already I have felt some resistance because I > couldnt produce any documentation for NMock. I dont believe I have > seen any anywhere? Have I overlooked it? > > Thanks, |
|
From: Joe W. <jo...@tr...> - 2003-11-21 16:37:31
|
Hi Nick, Unfortunately, documentation is a soar spot for NMock. We're working on it, but unfortunately time is a limiting factor. Wanna help out? ;) -joe Nick Robinson wrote: >Hi - this is my first post here... > >I have been using NMock to help decouple my test rig from the DB layer, and it has worked like a >dream. However, I need to introduce the team to it, and already I have felt some resistance because >I couldnt produce any documentation for NMock. I dont believe I have seen any anywhere? Have I >overlooked it? > >Thanks, > >nick robinson >www.fromconcept.co.uk > > > > >------------------------------------------------------- >This SF.net email is sponsored by: SF.net Giveback Program. >Does SourceForge.net help you be more productive? Does it >help you create better code? SHARE THE LOVE, and help us help >YOU! Click Here: http://sourceforge.net/donate/ >_______________________________________________ >Nmock-general mailing list >Nmo...@li... >https://lists.sourceforge.net/lists/listinfo/nmock-general > > |
|
From: Mike B. <mbr...@vi...> - 2003-11-21 16:17:30
|
> It's true we're having problems with properties, but in this case
>
> > registry.ExpectAndReturn("get_LocalMachine", ...
>
> should be
>
> registry.ExpectAndReturn("LocalMachine", ...
This solved my problem. Thank you.
Mike Bresnahan
|
|
From: Nick R. <nic...@fr...> - 2003-11-21 10:29:47
|
Hi - this is my first post here... I have been using NMock to help decouple my test rig from the DB layer, and it has worked like a dream. However, I need to introduce the team to it, and already I have felt some resistance because I couldnt produce any documentation for NMock. I dont believe I have seen any anywhere? Have I overlooked it? Thanks, nick robinson www.fromconcept.co.uk |
|
From: <st...@m3...> - 2003-11-14 09:35:54
|
On 14 November, 2003, Mike Bresnahan wrote:
It's true we're having problems with properties, but in this case
> registry.ExpectAndReturn("get_LocalMachine", ...
should be
registry.ExpectAndReturn("LocalMachine", ...
This is why we're having problems, because the library sometimes gets confu=
sed between gets and puts.
Also, you don't need to cast the mock instances when putting them into Exce=
ptAndReturn unless you want to be explicit.
S.
|
|
From: Mike B. <mbr...@vi...> - 2003-11-14 02:09:21
|
Does NMock not work with properties (yet)? I'm new to NMock (and C#) and am
having trouble with the following code where I try to set a property to an
expected value. When I access the property I get a null. I had been
assuming this was my own fault until I read the attached message in the
mailing list archive.
public interface IRegistry {
// This property is causing me troubles.
IRegistryKey LocalMachine { get; }
}
public interface IRegistryKey {
IRegistryKey OpenSubKey( string name);
string[] GetSubKeyNames();
object GetValue( string name);
}
public class RegistryFacade {
private IRegistry registry;
public RegistryFacade( IRegistry registry) {
this.registry = registry;
}
public InstalledJDK[] getInstalledJDKs() {
// This throws an null reference exception, because LocalMachine
is null.
IRegistryKey jdkKey = registry.LocalMachine.OpenSubKey("foo");
}
}
[NUnit.Framework.TestFixture]
public class TestRegistryFacade {
[NUnit.Framework.Test]
public void test02() {
NMock.IMock registry = new NMock.DynamicMock( typeof( IRegistry));
NMock.IMock localMachine = new NMock.DynamicMock( typeof(
IRegistryKey));
registry.ExpectAndReturn("get_LocalMachine",
(IRegistryKey)localMachine.MockInstance);
RegistryFacade facade = new RegistryFacade(
(IRegistry)registry.MockInstance);
InstalledJDK[] installedJdks = facade.getInstalledJDKs();
}
}
Mike
-----
I had a look at this today. SetupResult() does work, but as soon as you
Expect() on the same property's setter, the mock's internal record of the
property's expected signature is overwrittten (ie it expects the getter to
be called with an argument).
As I'm not that familiar with the internals of Method, Mock and co. I
thought I would ask you lot for input before I fixed it. My feeling is
that properties should be treated differently to methods (not necessarily
at the public API level, but internally). Although properties are
technically methods, they have, conceptually, two signatures. At the
moment, NMock doesn't care whether it's invoking a getter or a setter (it
even strips the "get_" and "set_" from the names), and that's essentially
the problem - calls to "get_Foo" and "set_Foo" are just recorded as a call
to "Foo".
So unless anyone has a better idea, I'll extend ClassGenerator and Mock to
treat properties differently.
Jim
Thoughtworks
|
|
From: Joe W. <jo...@th...> - 2003-11-12 17:51:49
|
Sounds good to me. -joe Jim Arnold wrote: > > >I had a look at this today. SetupResult() does work, but as soon as you >Expect() on the same property's setter, the mock's internal record of the >property's expected signature is overwrittten (ie it expects the getter to >be called with an argument). > >As I'm not that familiar with the internals of Method, Mock and co. I >thought I would ask you lot for input before I fixed it. My feeling is >that properties should be treated differently to methods (not necessarily >at the public API level, but internally). Although properties are >technically methods, they have, conceptually, two signatures. At the >moment, NMock doesn't care whether it's invoking a getter or a setter (it >even strips the "get_" and "set_" from the names), and that's essentially >the problem - calls to "get_Foo" and "set_Foo" are just recorded as a call >to "Foo". > >So unless anyone has a better idea, I'll extend ClassGenerator and Mock to >treat properties differently. > >Jim > >Thoughtworks > > > > >|---------+-----------------------------------------> >| | Steve Freeman | >| | <st...@m3...> | >| | Sent by: | >| | nmo...@li...| >| | ceforge.net | >| | | >| | | >| | 09/11/2003 11:53 | >| | | >|---------+-----------------------------------------> > >------------------------------------------------------------------------------------------------------------------------------| > | | > | To: "Jeremy Dunck (6433)" <JD...@ib...> | > | cc: "Nmock-General (E-mail)" <nmo...@li...> | > | Subject: Re: [Nmock-general] Mock properties? | > >------------------------------------------------------------------------------------------------------------------------------| > > > > >Yep, it's a bug and there's already a test to prove it called > > SetAndGetPropertiesDoesNotWorkWithSetupReturn > >For now, could you use ExpectAndReturn() ? > >S. > >Jeremy Dunck (6433) wrote: > > >>It's a 3rd-party binary. >> >>Fortunately, COM interop provides an interface when it generates the >>wrapper class, so that was free. :) >> >>Unfortunately, now I'm getting a different error. >> >>I've whittled it down to a failing test. Perhaps I'm doing something >>wrong, or perhaps we found a bug. :) >> >>Thanks for the feedback. >> >> > > > >------------------------------------------------------- >This SF.Net email sponsored by: ApacheCon 2003, >16-19 November in Las Vegas. Learn firsthand the latest >developments in Apache, PHP, Perl, XML, Java, MySQL, >WebDAV, and more! http://www.apachecon.com/ >_______________________________________________ >Nmock-general mailing list >Nmo...@li... >https://lists.sourceforge.net/lists/listinfo/nmock-general > > > > > > |
|
From: Jim A. <JA...@th...> - 2003-11-12 17:04:13
|
I had a look at this today. SetupResult() does work, but as soon as you Expect() on the same property's setter, the mock's internal record of the property's expected signature is overwrittten (ie it expects the getter to be called with an argument). As I'm not that familiar with the internals of Method, Mock and co. I thought I would ask you lot for input before I fixed it. My feeling is that properties should be treated differently to methods (not necessarily at the public API level, but internally). Although properties are technically methods, they have, conceptually, two signatures. At the moment, NMock doesn't care whether it's invoking a getter or a setter (it even strips the "get_" and "set_" from the names), and that's essentially the problem - calls to "get_Foo" and "set_Foo" are just recorded as a call to "Foo". So unless anyone has a better idea, I'll extend ClassGenerator and Mock to treat properties differently. Jim Thoughtworks |---------+-----------------------------------------> | | Steve Freeman | | | <st...@m3...> | | | Sent by: | | | nmo...@li...| | | ceforge.net | | | | | | | | | 09/11/2003 11:53 | | | | |---------+-----------------------------------------> >------------------------------------------------------------------------------------------------------------------------------| | | | To: "Jeremy Dunck (6433)" <JD...@ib...> | | cc: "Nmock-General (E-mail)" <nmo...@li...> | | Subject: Re: [Nmock-general] Mock properties? | >------------------------------------------------------------------------------------------------------------------------------| Yep, it's a bug and there's already a test to prove it called SetAndGetPropertiesDoesNotWorkWithSetupReturn For now, could you use ExpectAndReturn() ? S. Jeremy Dunck (6433) wrote: > It's a 3rd-party binary. > > Fortunately, COM interop provides an interface when it generates the > wrapper class, so that was free. :) > > Unfortunately, now I'm getting a different error. > > I've whittled it down to a failing test. Perhaps I'm doing something > wrong, or perhaps we found a bug. :) > > Thanks for the feedback. ------------------------------------------------------- This SF.Net email sponsored by: ApacheCon 2003, 16-19 November in Las Vegas. Learn firsthand the latest developments in Apache, PHP, Perl, XML, Java, MySQL, WebDAV, and more! http://www.apachecon.com/ _______________________________________________ Nmock-general mailing list Nmo...@li... https://lists.sourceforge.net/lists/listinfo/nmock-general |
|
From: Steve F. <st...@m3...> - 2003-11-09 22:10:48
|
No problem. It's a good reminder that we should fix it (or you could ;-) S. Jeremy Dunck (6433) wrote: > Arg. Sorry to waste your time. :( > > Thanks for the help. > |
|
From: Jeremy D. (6433) <JD...@ib...> - 2003-11-09 20:36:39
|
Arg. Sorry to waste your time. :( Thanks for the help. > -----Original Message----- > From: Steve Freeman [mailto:st...@m3...] > Sent: Sunday, November 09, 2003 5:53 AM > To: Jeremy Dunck (6433) > Cc: Nmock-General (E-mail) > Subject: Re: [Nmock-general] Mock properties? > > > Yep, it's a bug and there's already a test to prove it called > > SetAndGetPropertiesDoesNotWorkWithSetupReturn > > For now, could you use ExpectAndReturn() ? > > S. > > Jeremy Dunck (6433) wrote: > > It's a 3rd-party binary. > > > > Fortunately, COM interop provides an interface when it > generates the > > wrapper class, so that was free. :) > > > > Unfortunately, now I'm getting a different error. > > > > I've whittled it down to a failing test. Perhaps I'm doing > something > > wrong, or perhaps we found a bug. :) > > > > Thanks for the feedback. > |
|
From: Steve F. <st...@m3...> - 2003-11-09 11:53:27
|
Yep, it's a bug and there's already a test to prove it called SetAndGetPropertiesDoesNotWorkWithSetupReturn For now, could you use ExpectAndReturn() ? S. Jeremy Dunck (6433) wrote: > It's a 3rd-party binary. > > Fortunately, COM interop provides an interface when it generates the > wrapper class, so that was free. :) > > Unfortunately, now I'm getting a different error. > > I've whittled it down to a failing test. Perhaps I'm doing something > wrong, or perhaps we found a bug. :) > > Thanks for the feedback. |
|
From: <sm...@us...> - 2003-11-08 00:01:29
|
Update of /cvsroot/nmock/nmock/test
In directory sc8-pr-cvs1:/tmp/cvs-serv19255/test
Modified Files:
test.csproj
Log Message:
Upgraded to nant 0.8.3.50105 and NUnit 2.1
Index: test.csproj
===================================================================
RCS file: /cvsroot/nmock/nmock/test/test.csproj,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -d -r1.6 -r1.7
*** test.csproj 25 Jul 2003 17:14:53 -0000 1.6
--- test.csproj 8 Nov 2003 00:01:24 -0000 1.7
***************
*** 84,97 ****
/>
<Reference
- Name = "nunit.util"
- AssemblyName = "nunit.util"
- HintPath = "..\lib\nunit.util.dll"
- />
- <Reference
- Name = "nunit.framework"
- AssemblyName = "nunit.framework"
- HintPath = "..\lib\nunit.framework.dll"
- />
- <Reference
Name = "src"
Project = "{4859B9E5-3F65-4517-878C-AFC58B9D0035}"
--- 84,87 ----
***************
*** 102,105 ****
--- 92,100 ----
AssemblyName = "System.Runtime.Remoting"
HintPath = "..\..\..\WINNT\Microsoft.NET\Framework\v1.1.4322\System.Runtime.Remoting.dll"
+ />
+ <Reference
+ Name = "nunit.framework"
+ AssemblyName = "nunit.framework"
+ HintPath = "..\lib\nunit.framework.dll"
/>
</References>
|
|
From: <sm...@us...> - 2003-11-08 00:01:29
|
Update of /cvsroot/nmock/nmock In directory sc8-pr-cvs1:/tmp/cvs-serv19255 Modified Files: .cvsignore Log Message: Upgraded to nant 0.8.3.50105 and NUnit 2.1 Index: .cvsignore =================================================================== RCS file: /cvsroot/nmock/nmock/.cvsignore,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** .cvsignore 30 Jul 2003 15:49:22 -0000 1.1 --- .cvsignore 8 Nov 2003 00:01:24 -0000 1.2 *************** *** 1,2 **** --- 1,3 ---- build .project + dist |
|
From: <sm...@us...> - 2003-11-08 00:01:29
|
Update of /cvsroot/nmock/nmock/lib
In directory sc8-pr-cvs1:/tmp/cvs-serv19255/lib
Modified Files:
nunit-console.exe
Added Files:
nunit-console.exe.config
Removed Files:
nunit.util.dll
Log Message:
Upgraded to nant 0.8.3.50105 and NUnit 2.1
--- NEW FILE: nunit-console.exe.config ---
<?xml version="1.0" encoding="Windows-1252"?>
<configuration>
<appSettings>
<!-- User application and configured property settings go here.-->
<!-- Example: <add key="settingName" value="settingValue"/> -->
<add key="toolTip.ShowAlways" value="False" />
<add key="shadowfiles.path" value="%temp%\nunit20\ShadowCopyCache" />
</appSettings>
<startup>
<requiredRuntime version="v1.0.3705" />
<supportedRuntime version="v1.1.4322" />
<supportedRuntime version="v1.0.3705" />
</startup>
</configuration>
Index: nunit-console.exe
===================================================================
RCS file: /cvsroot/nmock/nmock/lib/nunit-console.exe,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
Binary files /tmp/cvsncu10C and /tmp/cvssqwnI5 differ
--- nunit.util.dll DELETED ---
|
|
From: <sm...@us...> - 2003-11-07 23:28:42
|
Update of /cvsroot/nmock/nmock/test/NMock
In directory sc8-pr-cvs1:/tmp/cvs-serv13217/test/NMock
Modified Files:
DynamicMockTest.cs
Log Message:
Some reorg.
Index: DynamicMockTest.cs
===================================================================
RCS file: /cvsroot/nmock/nmock/test/NMock/DynamicMockTest.cs,v
retrieving revision 1.16
retrieving revision 1.17
diff -C2 -d -r1.16 -r1.17
*** DynamicMockTest.cs 16 Oct 2003 13:49:13 -0000 1.16
--- DynamicMockTest.cs 7 Nov 2003 23:28:39 -0000 1.17
***************
*** 70,73 ****
--- 70,81 ----
string Name { get; set; }
}
+ class WithNonVirtualMethod
+ {
+ public void NonVirtualMethod() { }
+ }
+ interface WithDifferentTypesOfParameters
+ {
+ void SomeParametersMethod(string p1, string p2);
+ }
#endregion
***************
*** 153,157 ****
}
! [Test] [ExpectedException(typeof(VerifyException))] public void ExpectationWillFailIfValueDoesntMatchMockInstance()
{
DynamicMock m1 = new DynamicMock(typeof(Thingy));
--- 161,165 ----
}
! [Test] public void InvocationFailsIfParamaterValueIsIncorrect()
{
DynamicMock m1 = new DynamicMock(typeof(Thingy));
***************
*** 160,164 ****
m2.Expect("y", thingy);
! m2.Invoke("y", "something else");
}
--- 168,180 ----
m2.Expect("y", thingy);
! try
! {
! m2.Invoke("y", "something else");
! }
! catch (VerifyException)
! {
! return;
! }
! Fail("Should have thrown VerifyException");
}
***************
*** 195,206 ****
mock.Verify();
}
! [Test] [ExpectedException(typeof(MissingMethodException))] public void CannotYetMockMembersWithOnlyAParamsArgument()
{
IMock mock = new DynamicMock(typeof(IWithParams));
! mock.Expect("WithoutLeadingParameter", new Object[] {1, 2, 3});
!
! IWithParams p = (IWithParams)mock.MockInstance;
! p.WithoutLeadingParameter(1, 2, 3);
! mock.Verify();
}
[Test] public void CanMockOverloadedMethods()
--- 211,235 ----
mock.Verify();
}
! [Test] public void CannotYetMockMembersWithOnlyAParamsArgument()
{
IMock mock = new DynamicMock(typeof(IWithParams));
! try
! {
! mock.Expect("WithoutLeadingParameter", new Object[] {1, 2, 3});
! Fail("Should have thrown MissingMethodException");
! }
! catch (MissingMethodException)
! {}
! }
! [Test] public void CannotMockNonVirtualMethodsOfAClass()
! {
! IMock mock = new DynamicMock(typeof(WithNonVirtualMethod));
! try
! {
! mock.Expect("NonVirtualMethod");
! Fail("Should have thrown ArgumentException");
! }
! catch (ArgumentException)
! {}
}
[Test] public void CanMockOverloadedMethods()
***************
*** 208,216 ****
IMock mock = new DynamicMock(typeof(IOverloadedMethods));
mock.Expect("DoStuff", "one", 2);
! mock.Expect("DoStuff", "one");
IOverloadedMethods instance = (IOverloadedMethods)mock.MockInstance;
instance.DoStuff("one", 2);
! instance.DoStuff("one");
mock.Verify();
}
--- 237,245 ----
IMock mock = new DynamicMock(typeof(IOverloadedMethods));
mock.Expect("DoStuff", "one", 2);
! mock.ExpectNoCall("DoStuff", typeof(string));
IOverloadedMethods instance = (IOverloadedMethods)mock.MockInstance;
instance.DoStuff("one", 2);
!
mock.Verify();
}
***************
*** 228,235 ****
mock.Verify();
}
! [Test] [ExpectedException(typeof(NotSupportedException))] public void CannotCreateMockInstanceWithNonEmptyConstructor()
{
IMock mock = new DynamicMock(typeof(WithNonEmptyConstructor));
! WithNonEmptyConstructor nonEmpty = (WithNonEmptyConstructor)mock.MockInstance;
}
--- 257,269 ----
mock.Verify();
}
! [Test] public void CannotCreateMockInstanceWithNonEmptyConstructor()
{
IMock mock = new DynamicMock(typeof(WithNonEmptyConstructor));
! try
! {
! WithNonEmptyConstructor nonEmpty = (WithNonEmptyConstructor)mock.MockInstance;
! Fail("Should have thrown NotSupportedException");
! }
! catch (NotSupportedException) {}
}
***************
*** 248,252 ****
}
- [Ignore("SetupResult doesn't work for properties")]
[Test] public void SetAndGetPropertiesDoesNotWorkWithSetupReturn()
{
--- 282,285 ----
***************
*** 257,275 ****
mock.Expect("Name", "jim");
! AssertEquals("Should be property Name", "fred", withProperty.Name);
! withProperty.Name = "jim";
!
! mock.Verify();
! }
!
! #region null parameter bug
! interface WithDifferentTypesOfParameters
! {
! void SomeParametersMethod(string p1, string p2);
}
! [Test]
! public void TestNullParameterCanStillResolveCorrectMethod()
{
DynamicMock mock = new DynamicMock(typeof(WithDifferentTypesOfParameters));
--- 290,308 ----
mock.Expect("Name", "jim");
! try
! {
! AssertEquals("Should be property Name", "fred", withProperty.Name);
! withProperty.Name = "jim";
! mock.Verify();
! }
! catch (VerifyException)
! {
! return;
! }
! Fail("Should have thrown VerifyException");
}
! [Test] public void TestNullParameterCanStillResolveCorrectMethod()
{
DynamicMock mock = new DynamicMock(typeof(WithDifferentTypesOfParameters));
***************
*** 287,292 ****
}
! [Test]
! public void TestNullConstraintsCanStillResolveCorrectMethod()
{
DynamicMock mock = new DynamicMock(typeof(WithDifferentTypesOfParameters));
--- 320,324 ----
}
! [Test] public void TestNullConstraintsCanStillResolveCorrectMethod()
{
DynamicMock mock = new DynamicMock(typeof(WithDifferentTypesOfParameters));
***************
*** 304,310 ****
}
-
- #endregion
-
}
}
--- 336,339 ----
|
|
From: Steve F. <st...@m3...> - 2003-11-07 22:47:24
|
Jeremy Dunck (6433) wrote: > I've been using Nmock's DynamicMock for a bit now, but have recently bumped > into what seems a severe limitation. > > I need to mock an object which has a property. I can't see anyway to set a > return for a property get, nor how to have the mock return it's set value on > subsequent gets. > > Am I missing something obvious? Are the properties virtual? It's annoying, but I don't think we can do non-virtual features. S. |
|
From: Jeremy D. (6433) <JD...@ib...> - 2003-11-07 22:06:08
|
I've been using Nmock's DynamicMock for a bit now, but have recently bumped into what seems a severe limitation. I need to mock an object which has a property. I can't see anyway to set a return for a property get, nor how to have the mock return it's set value on subsequent gets. Am I missing something obvious? Thanks for the great tool! -Jeremy |
|
From: <sk...@us...> - 2003-10-16 13:49:21
|
Update of /cvsroot/nmock/nmock/src/NMock
In directory sc8-pr-cvs1:/tmp/cvs-serv16965/src/NMock
Modified Files:
DynamicMock.cs MockCall.cs
Log Message:
Fixed bug with null parameters at execution to do with method resolution
Index: DynamicMock.cs
===================================================================
RCS file: /cvsroot/nmock/nmock/src/NMock/DynamicMock.cs,v
retrieving revision 1.16
retrieving revision 1.17
diff -C2 -d -r1.16 -r1.17
*** DynamicMock.cs 14 Oct 2003 14:08:52 -0000 1.16
--- DynamicMock.cs 16 Oct 2003 13:49:13 -0000 1.17
***************
*** 7,116 ****
namespace NMock
{
! public class DynamicMock : Mock
! {
! private object mockInstance;
! private Type type;
! private IList ignoredMethodNames;
! private readonly Type superclassIfTypeIsInterface;
! public DynamicMock(Type type) : this(type, "Mock" + type.Name) {}
! public DynamicMock(Type type, string name) : this (type, name, null) {}
! public DynamicMock(Type type, string name, Type superclassIfTypeIsInterface) : base(name)
! {
! this.ignoredMethodNames = new ArrayList();
! this.type = type;
! this.superclassIfTypeIsInterface = superclassIfTypeIsInterface;
! }
! public override object MockInstance
! {
! get
! {
! if (mockInstance == null)
! {
! mockInstance = CreateClassGenerator().Generate();
! }
! return mockInstance;
! }
! }
! /// <summary>
! /// Don't generate mock method for suppied methodName.
! /// </summary>
! public virtual void Ignore(string methodName)
! {
! ignoredMethodNames.Add(methodName);
! }
! private ClassGenerator CreateClassGenerator()
! {
! return new ClassGenerator(type, this, ignoredMethodNames, superclassIfTypeIsInterface);
! }
! protected override IMethod getMethod(MethodSignature signature)
! {
! checkMethodIsValidIfNoConstraints(signature);
!
! return base.getMethod(signature);
! }
! public override void SetupResult(string methodName, object returnVal, params Type[] argTypes)
! {
! MethodSignature signature = new MethodSignature(Name, methodName, argTypes);
! checkMethodIsValidIfNoConstraints(signature);
! checkReturnTypeIsValid(methodName, returnVal);
! base.SetupResult(methodName, returnVal, argTypes);
! }
! void checkReturnTypeIsValid(string methodName, object returnVal)
! {
! if (returnVal == null)
! {
! return;
! }
! MethodInfo method = type.GetMethod(methodName, ClassGenerator.ALL_INSTANCE_METHODS);
! Type realReturnType = (method == null
! ? type.GetProperty(methodName, ClassGenerator.ALL_INSTANCE_METHODS).PropertyType
! : method.ReturnType);
! if(! realReturnType.IsAssignableFrom(returnVal.GetType()))
! {
! throw new ArgumentException(String.Format("method <{0}> returns a {1}", methodName, realReturnType));
! }
! }
! void checkMethodIsValidIfNoConstraints(MethodSignature signature)
! {
! foreach(Type argType in signature.argumentTypes)
! {
! if(typeof(IConstraint).IsAssignableFrom(argType)) return;
! }
! Type[] allTypes = new InterfaceLister().List(type);
! foreach (Type t in allTypes)
! {
! MethodInfo method = t.GetMethod(signature.methodName, ClassGenerator.ALL_INSTANCE_METHODS, null,
! signature.argumentTypes, null);
! PropertyInfo property = t.GetProperty(signature.methodName, ClassGenerator.ALL_INSTANCE_METHODS);
! if (property != null)
! {
! return;
! }
! if(method != null)
! {
! if(!method.IsVirtual)
! {
! throw new ArgumentException(String.Format("method <{0}> is not virtual", signature.methodName));
! }
! return;
! }
! }
! throw new MissingMethodException(String.Format("method <{0}> not defined", signature.methodName));
! }
!
! }
}
--- 7,166 ----
namespace NMock
{
! public class DynamicMock : Mock
! {
! private object mockInstance;
! private Type type;
! private IList ignoredMethodNames;
! private readonly Type superclassIfTypeIsInterface;
! public DynamicMock(Type type) : this(type, "Mock" + type.Name) {}
! public DynamicMock(Type type, string name) : this (type, name, null) {}
! public DynamicMock(Type type, string name, Type superclassIfTypeIsInterface) : base(name)
! {
! this.ignoredMethodNames = new ArrayList();
! this.type = type;
! this.superclassIfTypeIsInterface = superclassIfTypeIsInterface;
! }
! public override object MockInstance
! {
! get
! {
! if (mockInstance == null)
! {
! mockInstance = CreateClassGenerator().Generate();
! }
! return mockInstance;
! }
! }
! /// <summary>
! /// Don't generate mock method for suppied methodName.
! /// </summary>
! public virtual void Ignore(string methodName)
! {
! ignoredMethodNames.Add(methodName);
! }
! private ClassGenerator CreateClassGenerator()
! {
! return new ClassGenerator(type, this, ignoredMethodNames, superclassIfTypeIsInterface);
! }
! protected override IMethod getMethod(MethodSignature signature)
! {
! checkMethodIsValidIfNoConstraints(signature);
! return base.getMethod(signature);
! }
! public override void SetupResult(string methodName, object returnVal, params Type[] argTypes)
! {
! MethodSignature signature = new MethodSignature(Name, methodName, argTypes);
! checkMethodIsValidIfNoConstraints(signature);
! checkReturnTypeIsValid(methodName, returnVal);
! base.SetupResult(methodName, returnVal, argTypes);
! }
! void checkReturnTypeIsValid(string methodName, object returnVal)
! {
! if (returnVal == null)
! {
! return;
! }
! MethodInfo method = type.GetMethod(methodName, ClassGenerator.ALL_INSTANCE_METHODS);
! Type realReturnVal;
! if(method == null)
! {
! realReturnVal = type.GetProperty(methodName, ClassGenerator.ALL_INSTANCE_METHODS).PropertyType;
! }
! else
! {
! realReturnVal = method.ReturnType;
! }
! if (realReturnVal == null)
! {
! realReturnVal = type.GetProperty(methodName, ClassGenerator.ALL_INSTANCE_METHODS).PropertyType;
! }
!
! if(realReturnVal != returnVal.GetType())
! {
! throw new ArgumentException(String.Format("method <{0}> returns a {1}", methodName, realReturnVal));
! }
! }
! void checkMethodIsValidIfNoConstraints(MethodSignature signature)
! {
! foreach(Type argType in signature.argumentTypes)
! {
! if(typeof(IConstraint).IsAssignableFrom(argType)) return;
! }
! Type[] allTypes = new InterfaceLister().List(type);
!
! //find method with argumentTypes
! foreach (Type t in allTypes)
! {
! PropertyInfo property = t.GetProperty(signature.methodName, ClassGenerator.ALL_INSTANCE_METHODS);
! if (property != null)
! {
! return;
! }
!
! MethodInfo method = FindBestMatchingMethod(t, signature);
! if(method != null)
! {
! if(!method.IsVirtual)
! {
! throw new ArgumentException(String.Format("method <{0}> is not virtual", signature.methodName));
! }
! return;
! }
!
! }
!
! throw new MissingMethodException(String.Format("method <{0}> not defined", signature.methodName));
! }
!
!
! public MethodInfo FindBestMatchingMethod(Type t, MethodSignature signature)
! {
! //find any methods that match all non-null argument types
! MethodInfo[] methods = t.GetMethods(ClassGenerator.ALL_INSTANCE_METHODS);
! foreach (MethodInfo m in methods)
! {
! if (!m.Name.Equals(signature.methodName))
! continue;
!
! ParameterInfo[] parameters = m.GetParameters();
! if ( parameters.Length!=signature.argumentTypes.Length )
! continue;
!
! bool match = true;
! for ( int pi=0; pi<parameters.Length; pi++ )
! {
! if ( signature.argumentTypes[pi]==null )
! continue;
!
! if ( parameters[pi].GetType().IsAssignableFrom(signature.argumentTypes[pi]) )
! {
! match = false;
! break;
! }
!
! }
!
! if (match)
! {
! return m;
! }
! }
! return null;
! }
!
! }
}
Index: MockCall.cs
===================================================================
RCS file: /cvsroot/nmock/nmock/src/NMock/MockCall.cs,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** MockCall.cs 8 Aug 2003 00:05:03 -0000 1.4
--- MockCall.cs 16 Oct 2003 13:49:13 -0000 1.5
***************
*** 99,103 ****
if (args[i] == null)
{
! result[i] = typeof(object);
}
else
--- 99,103 ----
if (args[i] == null)
{
! result[i] = null; //typeof(object);
}
else
|
|
From: <sk...@us...> - 2003-10-16 13:49:20
|
Update of /cvsroot/nmock/nmock/test/NMock
In directory sc8-pr-cvs1:/tmp/cvs-serv16965/test/NMock
Modified Files:
DynamicMockTest.cs
Log Message:
Fixed bug with null parameters at execution to do with method resolution
Index: DynamicMockTest.cs
===================================================================
RCS file: /cvsroot/nmock/nmock/test/NMock/DynamicMockTest.cs,v
retrieving revision 1.15
retrieving revision 1.16
diff -C2 -d -r1.15 -r1.16
*** DynamicMockTest.cs 13 Aug 2003 21:19:58 -0000 1.15
--- DynamicMockTest.cs 16 Oct 2003 13:49:13 -0000 1.16
***************
*** 262,265 ****
--- 262,310 ----
mock.Verify();
}
+
+
+ #region null parameter bug
+ interface WithDifferentTypesOfParameters
+ {
+ void SomeParametersMethod(string p1, string p2);
+ }
+
+ [Test]
+ public void TestNullParameterCanStillResolveCorrectMethod()
+ {
+ DynamicMock mock = new DynamicMock(typeof(WithDifferentTypesOfParameters));
+ WithDifferentTypesOfParameters instance = (WithDifferentTypesOfParameters)mock.MockInstance;
+
+ //works
+ mock.Expect("SomeParametersMethod", "foo", "foo");
+ instance.SomeParametersMethod("foo", "foo");
+
+ //fails
+ mock.Expect("SomeParametersMethod", "foo", null);
+ instance.SomeParametersMethod("foo", null);
+
+ mock.Verify();
+ }
+
+ [Test]
+ public void TestNullConstraintsCanStillResolveCorrectMethod()
+ {
+ DynamicMock mock = new DynamicMock(typeof(WithDifferentTypesOfParameters));
+ WithDifferentTypesOfParameters instance = (WithDifferentTypesOfParameters)mock.MockInstance;
+
+ //works
+ mock.Expect("SomeParametersMethod", "foo", "foo");
+ instance.SomeParametersMethod("foo", "foo");
+
+ //bug - cannot resolve this
+ mock.Expect("SomeParametersMethod", "foo", new IsNull());
+ instance.SomeParametersMethod("foo", null);
+
+ mock.Verify();
+ }
+
+
+ #endregion
+
}
}
|
|
From: <sm...@us...> - 2003-10-14 14:08:57
|
Update of /cvsroot/nmock/nmock/src/NMock
In directory sc8-pr-cvs1:/tmp/cvs-serv12109/src/NMock
Modified Files:
DynamicMock.cs
Log Message:
Fixed SetupResult to check for conformance of return type, not just strict match
Tidied up some conditional logic.
Index: DynamicMock.cs
===================================================================
RCS file: /cvsroot/nmock/nmock/src/NMock/DynamicMock.cs,v
retrieving revision 1.15
retrieving revision 1.16
diff -C2 -d -r1.15 -r1.16
*** DynamicMock.cs 13 Aug 2003 20:44:12 -0000 1.15
--- DynamicMock.cs 14 Oct 2003 14:08:52 -0000 1.16
***************
*** 7,127 ****
namespace NMock
{
! public class DynamicMock : Mock
! {
! private object mockInstance;
! private Type type;
! private IList ignoredMethodNames;
! private readonly Type superclassIfTypeIsInterface;
! public DynamicMock(Type type) : this(type, "Mock" + type.Name) {}
! public DynamicMock(Type type, string name) : this (type, name, null) {}
! public DynamicMock(Type type, string name, Type superclassIfTypeIsInterface) : base(name)
! {
! this.ignoredMethodNames = new ArrayList();
! this.type = type;
! this.superclassIfTypeIsInterface = superclassIfTypeIsInterface;
! }
! public override object MockInstance
! {
! get
! {
! if (mockInstance == null)
! {
! mockInstance = CreateClassGenerator().Generate();
! }
! return mockInstance;
! }
! }
! /// <summary>
! /// Don't generate mock method for suppied methodName.
! /// </summary>
! public virtual void Ignore(string methodName)
! {
! ignoredMethodNames.Add(methodName);
! }
! private ClassGenerator CreateClassGenerator()
! {
! return new ClassGenerator(type, this, ignoredMethodNames, superclassIfTypeIsInterface);
! }
! protected override IMethod getMethod(MethodSignature signature)
! {
! checkMethodIsValidIfNoConstraints(signature);
! return base.getMethod(signature);
! }
! public override void SetupResult(string methodName, object returnVal, params Type[] argTypes)
! {
! MethodSignature signature = new MethodSignature(Name, methodName, argTypes);
! checkMethodIsValidIfNoConstraints(signature);
! checkReturnTypeIsValid(methodName, returnVal);
! base.SetupResult(methodName, returnVal, argTypes);
! }
! void checkReturnTypeIsValid(string methodName, object returnVal)
! {
! if (returnVal == null)
! {
! return;
! }
! MethodInfo method = type.GetMethod(methodName, ClassGenerator.ALL_INSTANCE_METHODS);
! Type realReturnVal;
! if(method == null)
! {
! realReturnVal = type.GetProperty(methodName, ClassGenerator.ALL_INSTANCE_METHODS).PropertyType;
! }
! else
! {
! realReturnVal = method.ReturnType;
! }
! if (realReturnVal == null)
! {
! realReturnVal = type.GetProperty(methodName, ClassGenerator.ALL_INSTANCE_METHODS).PropertyType;
! }
!
! if(realReturnVal != returnVal.GetType())
! {
! throw new ArgumentException(String.Format("method <{0}> returns a {1}", methodName, realReturnVal));
! }
! }
! void checkMethodIsValidIfNoConstraints(MethodSignature signature)
! {
! foreach(Type argType in signature.argumentTypes)
! {
! if(typeof(IConstraint).IsAssignableFrom(argType)) return;
! }
! Type[] allTypes = new InterfaceLister().List(type);
! foreach (Type t in allTypes)
! {
! MethodInfo method = t.GetMethod(signature.methodName, ClassGenerator.ALL_INSTANCE_METHODS, null,
! signature.argumentTypes, null);
! PropertyInfo property = t.GetProperty(signature.methodName, ClassGenerator.ALL_INSTANCE_METHODS);
! if (property != null)
! {
! return;
! }
! if(method != null)
! {
! if(!method.IsVirtual)
! {
! throw new ArgumentException(String.Format("method <{0}> is not virtual", signature.methodName));
! }
! return;
! }
! }
! throw new MissingMethodException(String.Format("method <{0}> not defined", signature.methodName));
! }
! }
}
--- 7,116 ----
namespace NMock
{
! public class DynamicMock : Mock
! {
! private object mockInstance;
! private Type type;
! private IList ignoredMethodNames;
! private readonly Type superclassIfTypeIsInterface;
! public DynamicMock(Type type) : this(type, "Mock" + type.Name) {}
! public DynamicMock(Type type, string name) : this (type, name, null) {}
! public DynamicMock(Type type, string name, Type superclassIfTypeIsInterface) : base(name)
! {
! this.ignoredMethodNames = new ArrayList();
! this.type = type;
! this.superclassIfTypeIsInterface = superclassIfTypeIsInterface;
! }
! public override object MockInstance
! {
! get
! {
! if (mockInstance == null)
! {
! mockInstance = CreateClassGenerator().Generate();
! }
! return mockInstance;
! }
! }
! /// <summary>
! /// Don't generate mock method for suppied methodName.
! /// </summary>
! public virtual void Ignore(string methodName)
! {
! ignoredMethodNames.Add(methodName);
! }
! private ClassGenerator CreateClassGenerator()
! {
! return new ClassGenerator(type, this, ignoredMethodNames, superclassIfTypeIsInterface);
! }
! protected override IMethod getMethod(MethodSignature signature)
! {
! checkMethodIsValidIfNoConstraints(signature);
! return base.getMethod(signature);
! }
! public override void SetupResult(string methodName, object returnVal, params Type[] argTypes)
! {
! MethodSignature signature = new MethodSignature(Name, methodName, argTypes);
! checkMethodIsValidIfNoConstraints(signature);
! checkReturnTypeIsValid(methodName, returnVal);
! base.SetupResult(methodName, returnVal, argTypes);
! }
! void checkReturnTypeIsValid(string methodName, object returnVal)
! {
! if (returnVal == null)
! {
! return;
! }
! MethodInfo method = type.GetMethod(methodName, ClassGenerator.ALL_INSTANCE_METHODS);
! Type realReturnType = (method == null
! ? type.GetProperty(methodName, ClassGenerator.ALL_INSTANCE_METHODS).PropertyType
! : method.ReturnType);
! if(! realReturnType.IsAssignableFrom(returnVal.GetType()))
! {
! throw new ArgumentException(String.Format("method <{0}> returns a {1}", methodName, realReturnType));
! }
! }
! void checkMethodIsValidIfNoConstraints(MethodSignature signature)
! {
! foreach(Type argType in signature.argumentTypes)
! {
! if(typeof(IConstraint).IsAssignableFrom(argType)) return;
! }
! Type[] allTypes = new InterfaceLister().List(type);
! foreach (Type t in allTypes)
! {
! MethodInfo method = t.GetMethod(signature.methodName, ClassGenerator.ALL_INSTANCE_METHODS, null,
! signature.argumentTypes, null);
! PropertyInfo property = t.GetProperty(signature.methodName, ClassGenerator.ALL_INSTANCE_METHODS);
! if (property != null)
! {
! return;
! }
! if(method != null)
! {
! if(!method.IsVirtual)
! {
! throw new ArgumentException(String.Format("method <{0}> is not virtual", signature.methodName));
! }
! return;
! }
! }
! throw new MissingMethodException(String.Format("method <{0}> not defined", signature.methodName));
! }
! }
}
|
|
From: Vaughn, C. <Va...@va...> - 2003-10-01 12:38:36
|
Thanx Jim, >Might be because multidimensional arrays need to be treated differently in >MSIL - you need to use factory methods on the Array class to instantiate >and set values on them instead of the basic newobj/stelem_* opcodes. >MethodImplementor will need beefing up - I'll try and look at it tonight. >Jim |
|
From: Jim A. <JA...@th...> - 2003-09-30 09:23:01
|
Might be because multidimensional arrays need to be treated differently in MSIL - you need to use factory methods on the Array class to instantiate and set values on them instead of the basic newobj/stelem_* opcodes. MethodImplementor will need beefing up - I'll try and look at it tonight. Jim >Sorry, me neither. Lack of time at the moment :(. Anyone else want to >step up? > -j >Steve Freeman wrote: >> Sorry, I fear not. Anyone want to chip in? >> >> S. >> >> Vaughn, Clifton wrote: >> >>> Hello, >>> >>> Has anyone had a chance to look at the 2d array bug I put a test up for? >> >> >> >> >> >> >> ------------------------------------------------------- >> This sf.net email is sponsored by:ThinkGeek >> Welcome to geek heaven. >> http://thinkgeek.com/sf >> _______________________________________________ >> Nmock-general mailing list >> Nmock-general@li... >> https://lists.sourceforge.net/lists/listinfo/nmock-general |
|
From: Joe W. <jo...@tr...> - 2003-09-24 08:05:30
|
Sorry, me neither. Lack of time at the moment :(. Anyone else want to step up? -j Steve Freeman wrote: > Sorry, I fear not. Anyone want to chip in? > > S. > > Vaughn, Clifton wrote: > >> Hello, >> >> Has anyone had a chance to look at the 2d array bug I put a test up for? > > > > > > > ------------------------------------------------------- > This sf.net email is sponsored by:ThinkGeek > Welcome to geek heaven. > http://thinkgeek.com/sf > _______________________________________________ > Nmock-general mailing list > Nmo...@li... > https://lists.sourceforge.net/lists/listinfo/nmock-general |
|
From: Steve F. <st...@m3...> - 2003-09-23 22:51:37
|
Sorry, I fear not. Anyone want to chip in? S. Vaughn, Clifton wrote: > Hello, > > Has anyone had a chance to look at the 2d array bug I put a test up for? |
|
From: Vaughn, C. <Va...@va...> - 2003-09-23 14:43:42
|
Hello, Has anyone had a chance to look at the 2d array bug I put a test up for? thanks cliff Clifton F. Vaughn Senior Business Analyst Information Technology Valassis / IT Division 19975 Victor Parkway Livonia, MI 48152 Tel 734.591.3000 Ext. 16726 Fax 734.632.6151 va...@va... www.valassis.com This message may have included proprietary or protected information. This message and the information contained herein are not to be further communicated without my express written consent. |