diff --git a/.gitignore b/.gitignore
index 913a11e5..62fa9116 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,7 @@
+# NuGet Packages Directory
+packages
+
+.vs/
bin/
obj/
.idea/
@@ -10,6 +14,9 @@ Thumbs.db
*.obj
*.exe
*.pdb
+*.pidb
+*.userprefs
+*.test-cache
*.user
*.aps
*.pch
@@ -34,3 +41,9 @@ obj/
_ReSharper*/
[Tt]est[Rr]esult*
App_Data/
+.DS_Store
+*.resharper.user
+*.suo
+*.user
+*.ncrunch*
+*.gpState
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
index 9daf02d2..5df016fa 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2007-2011, Demis Bellot, ServiceStack.
+Copyright (c) 2007-2016, Demis Bellot, ServiceStack.
http://www.servicestack.net
All rights reserved.
diff --git a/README.md b/README.md
index 26cb80cf..a5b63bf4 100644
--- a/README.md
+++ b/README.md
@@ -4,44 +4,43 @@ for twitter updates.
#Example Projects built with [ServiceStack](https://github.com/ServiceStack/ServiceStack), [C# RedisClient](https://github.com/ServiceStack/ServiceStack.Redis), [OrmLite](https://github.com/ServiceStack/ServiceStack.OrmLite), etc
-## Live Demo
+## [Download](https://github.com/ServiceStack/ServiceStack.Examples/archive/master.zip)
-A live demo and tutorials are available at the following locations:
+Download the tarball:
-### [Backbone.js TODO app with REST and Redis backend](http://servicestack.net/Backbone.Todos/)
-[](http://servicestack.net/Backbone.Todos/)
+[https://github.com/ServiceStack/ServiceStack.Examples/archive/master.zip](https://github.com/ServiceStack/ServiceStack.Examples/archive/master.zip)
-### [Creating a Hello World Web service from scratch](http://servicestack.net/ServiceStack.Hello/)
-[](http://servicestack.net/ServiceStack.Hello/)
+or clone this repo to download the source:
-### [GitHub-like browser to maange remote filesystem over REST](http://servicestack.net/RestFiles/)
-[](http://servicestack.net/RestFiles/)
+ git clone git://github.com/ServiceStack/ServiceStack.Examples.git
-### [Creating a StackOverflow-like app in Redis](http://servicestack.net/RedisStackOverflow/)
-[](http://servicestack.net/RedisStackOverflow/)
-### [Complete REST Web service example](http://servicestack.net/ServiceStack.MovieRest/)
-[](http://servicestack.net/ServiceStack.MovieRest/)
+## [Live Demos](https://github.com/ServiceStackApps/LiveDemos)
-### [Calling Web Services with Ajax](http://servicestack.net/ServiceStack.Examples.Clients/)
-[](http://servicestack.net/ServiceStack.Examples.Clients/)
+[Live demos](https://github.com/ServiceStackApps/LiveDemos) and tutorials are available at the following locations:
-### Other examples
-* [Calling Web Services with Mono Touch](http://www.servicestack.net/monotouch/remote-info/)
-* [Calling Web Services using Silverlight](http://servicestack.net/ServiceStack.Examples.Clients/Silverlight.htm)
-* [Calling SOAP 1.1 Web Service Examples](http://servicestack.net/ServiceStack.Examples.Clients/Soap11.aspx)
-* [Calling SOAP 1.2 Web Service Examples](http://servicestack.net/ServiceStack.Examples.Clients/Soap12.aspx)
+### [Backbone.js TODO app with REST and Redis backend](http://todos.servicestack.net)
+[](http://todos.servicestack.net)
+
+### [Creating a Hello World Web service from scratch](http://mono.servicestack.net/ServiceStack.Hello/)
+[](http://mono.servicestack.net/ServiceStack.Hello/)
-_All live examples hosted on CentOS/Nginx/FastCGI/Mono_
+### [GitHub-like browser to manage remote filesystem over REST](http://restfiles.servicestack.net)
+[](http://restfiles.servicestack.net)
-# Download
+### [Creating a StackOverflow-like app in Redis](http://redisstackoverflow.servicestack.net)
+[](http://redisstackoverflow.servicestack.net)
-You can find the latest releases for download at:
+### [Northwind dataset services](http://northwind.servicestack.net)
+[](http://northwind.servicestack.net)
-* [ServiceStack.Examples/downloads](https://github.com/ServiceStack/ServiceStack.Examples/downloads)
+### Other examples
+* [Calling Web Services with Mono Touch](http://mono.servicestack.net/monotouch/remote-info/)
+* [Calling Web Services using Silverlight](http://mono.servicestack.net/ServiceStack.Examples.Clients/Silverlight.htm)
+* [Calling SOAP 1.1 Web Service Examples](http://mono.servicestack.net/ServiceStack.Examples.Clients/Soap11.aspx)
+* [Calling SOAP 1.2 Web Service Examples](http://mono.servicestack.net/ServiceStack.Examples.Clients/Soap12.aspx)
### Troubleshooting
-- Since the example project uses 32bit Sqlite.dll, on a 64 bit machine you must set IIS to run 32bit apps (in the App Domain config)
-
+- Since the example project uses 32bit Sqlite.dll, on a 64bit machine you must set IIS to run 32bit apps (in the App Domain config)
diff --git a/lib/Mono.Data.Sqlite.dll b/lib/Mono.Data.Sqlite.dll
deleted file mode 100644
index dad79f06..00000000
Binary files a/lib/Mono.Data.Sqlite.dll and /dev/null differ
diff --git a/lib/ServiceStack.Common.dll b/lib/ServiceStack.Common.dll
deleted file mode 100644
index 910e3bbe..00000000
Binary files a/lib/ServiceStack.Common.dll and /dev/null differ
diff --git a/lib/ServiceStack.Interfaces.dll b/lib/ServiceStack.Interfaces.dll
deleted file mode 100644
index b5fd9f88..00000000
Binary files a/lib/ServiceStack.Interfaces.dll and /dev/null differ
diff --git a/lib/ServiceStack.OrmLite.SqlServer.dll b/lib/ServiceStack.OrmLite.SqlServer.dll
deleted file mode 100644
index 21b56d9f..00000000
Binary files a/lib/ServiceStack.OrmLite.SqlServer.dll and /dev/null differ
diff --git a/lib/ServiceStack.OrmLite.Sqlite.dll b/lib/ServiceStack.OrmLite.Sqlite.dll
deleted file mode 100644
index 5961f3c9..00000000
Binary files a/lib/ServiceStack.OrmLite.Sqlite.dll and /dev/null differ
diff --git a/lib/ServiceStack.OrmLite.dll b/lib/ServiceStack.OrmLite.dll
deleted file mode 100644
index 2b2638a5..00000000
Binary files a/lib/ServiceStack.OrmLite.dll and /dev/null differ
diff --git a/lib/ServiceStack.Redis.dll b/lib/ServiceStack.Redis.dll
deleted file mode 100644
index 78ae57bf..00000000
Binary files a/lib/ServiceStack.Redis.dll and /dev/null differ
diff --git a/lib/ServiceStack.ServiceInterface.dll b/lib/ServiceStack.ServiceInterface.dll
deleted file mode 100644
index 5f544843..00000000
Binary files a/lib/ServiceStack.ServiceInterface.dll and /dev/null differ
diff --git a/lib/ServiceStack.Text.dll b/lib/ServiceStack.Text.dll
deleted file mode 100644
index cc52cebd..00000000
Binary files a/lib/ServiceStack.Text.dll and /dev/null differ
diff --git a/lib/ServiceStack.dll b/lib/ServiceStack.dll
deleted file mode 100644
index e14ec19e..00000000
Binary files a/lib/ServiceStack.dll and /dev/null differ
diff --git a/lib/sqlite3.dll b/lib/sqlite3.dll
deleted file mode 100644
index 321d48d3..00000000
Binary files a/lib/sqlite3.dll and /dev/null differ
diff --git a/lib/tests/Moq.dll b/lib/tests/Moq.dll
deleted file mode 100644
index abcb72ee..00000000
Binary files a/lib/tests/Moq.dll and /dev/null differ
diff --git a/lib/tests/Moq.xml b/lib/tests/Moq.xml
deleted file mode 100644
index a29e2306..00000000
--- a/lib/tests/Moq.xml
+++ /dev/null
@@ -1,2930 +0,0 @@
-
-
-
- Moq
-
-
-
-
- A that returns an empty default value
- for invocations that do not have expectations or return values, with loose mocks.
- This is the default behavior for a mock.
-
-
-
-
- Interface to be implemented by classes that determine the
- default value of non-expected invocations.
-
-
-
-
- Provides a value for the given member and arguments.
-
- The member to provide a default
- value for.
- Optional arguments passed in
- to the call that requires a default value.
-
-
- Type to mock, which can be an interface or a class.
-
- Provides a mock implementation of .
-
-
- Only abstract and virtual members of classes can be mocked.
-
- The behavior of the mock with regards to the expectations and the actual calls is determined
- by the optional that can be passed to the
- constructor.
-
-
-
- The following example shows setting expectations with specific values
- for method invocations:
-
- //setup - data
- var order = new Order(TALISKER, 50);
- var mock = new Mock<IWarehouse>();
-
- //setup - expectations
- mock.Expect(x => x.HasInventory(TALISKER, 50)).Returns(true);
-
- //exercise
- order.Fill(mock.Object);
-
- //verify
- Assert.True(order.IsFilled);
-
- The following example shows how to use the class
- to specify conditions for arguments instead of specific values:
-
- //setup - data
- var order = new Order(TALISKER, 50);
- var mock = new Mock<IWarehouse>();
-
- //setup - expectations
- //shows how to expect a value within a range
- mock.Expect(x => x.HasInventory(
- It.IsAny<string>(),
- It.IsInRange(0, 100, Range.Inclusive)))
- .Returns(false);
-
- //shows how to throw for unexpected calls. contrast with the "verify" approach of other mock libraries.
- mock.Expect(x => x.Remove(
- It.IsAny<string>(),
- It.IsAny<int>()))
- .Throws(new InvalidOperationException());
-
- //exercise
- order.Fill(mock.Object);
-
- //verify
- Assert.False(order.IsFilled);
-
-
-
-
-
- Helper interface used to hide the base
- members from the fluent API to make it much cleaner
- in Visual Studio intellisense.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Adds an interface implementation to the mock,
- allowing expectations to be set for it.
-
-
- This method can only be called before the first use
- of the mock property, at which
- point the runtime type has already been generated
- and no more interfaces can be added to it.
-
- Also, must be an
- interface and not a class, which must be specified
- when creating the mock instead.
-
-
- The mock type
- has already been generated by accessing the property.
- The specified
- is not an interface.
-
- The following example creates a mock for the main interface
- and later adds to it to verify
- it's called by the consumer code:
-
- var mock = new Mock<IProcessor>();
- mock.Expect(x => x.Execute("ping"));
-
- // add IDisposable interface
- var disposable = mock.As<IDisposable>();
- disposable.Expect(d => d.Dispose()).Verifiable();
-
-
- Type of interface to cast the mock to.
-
-
-
- Sets an expectation on the mocked type for a call to
- to a value returning method.
-
- Type of the return value. Typically omitted as it can be inferred from the expression.
-
- If more than one expectation is set for the same method or property,
- the latest one wins and is the one that will be executed.
-
- Lambda expression that specifies the expected method invocation.
-
-
- mock.Expect(x => x.HasInventory("Talisker", 50)).Returns(true);
-
-
-
-
-
- Sets an expectation on the mocked type for a call to
- to a void method.
-
-
- If more than one expectation is set for the same method or property,
- the latest one wins and is the one that will be executed.
-
- Lambda expression that specifies the expected method invocation.
-
-
- var mock = new Mock<IProcessor>();
- mock.Expect(x => x.Execute("ping"));
-
-
-
-
-
- Sets an expectation on the mocked type for a call to
- to a property getter.
-
-
- If more than one expectation is set for the same property getter,
- the latest one wins and is the one that will be executed.
-
- Type of the property. Typically omitted as it can be inferred from the expression.
- Lambda expression that specifies the expected property getter.
-
-
- mock.ExpectGet(x => x.Suspended)
- .Returns(true);
-
-
-
-
-
- Sets an expectation on the mocked type for a call to
- to a property setter.
-
-
- If more than one expectation is set for the same property setter,
- the latest one wins and is the one that will be executed.
-
- Type of the property. Typically omitted as it can be inferred from the expression.
- Lambda expression that specifies the expected property setter.
-
-
- mock.ExpectSet(x => x.Suspended);
-
-
-
-
-
- Sets an expectation on the mocked type for a call to
- to a property setter with a specific value.
-
-
- More than one expectation can be set for the setter with
- different values.
-
- Type of the property. Typically omitted as it can be inferred from the expression.
- Lambda expression that specifies the expected property setter.
- The value expected to be set for the property.
-
-
- mock.ExpectSet(x => x.Suspended, true);
-
-
-
-
-
- Implements .
-
-
-
-
- Implements .
-
-
-
-
- Verifies that a specific invocation matching the given
- expression was performed on the mock. Use in conjuntion
- with the default .
-
-
- This example assumes that the mock has been used,
- and later we want to verify that a given invocation
- with specific parameters was performed:
-
- var mock = new Mock<IProcessor>();
- // exercise mock
- //...
- // Will throw if the test code didn't call Execute with a "ping" string argument.
- mock.Verify(proc => proc.Execute("ping"));
-
-
- The invocation was not performed on the mock.
- Expression to verify.
-
-
-
- Verifies that a specific invocation matching the given
- expression was performed on the mock. Use in conjuntion
- with the default .
-
-
- This example assumes that the mock has been used,
- and later we want to verify that a given invocation
- with specific parameters was performed:
-
- var mock = new Mock<IWarehouse>();
- // exercise mock
- //...
- // Will throw if the test code didn't call HasInventory.
- mock.Verify(warehouse => warehouse.HasInventory(TALISKER, 50));
-
-
- The invocation was not performed on the mock.
- Expression to verify.
- Type of return value from the expression.
-
-
-
- Verifies that a property was read on the mock.
- Use in conjuntion with the default .
-
-
- This example assumes that the mock has been used,
- and later we want to verify that a given property
- was retrieved from it:
-
- var mock = new Mock<IWarehouse>();
- // exercise mock
- //...
- // Will throw if the test code didn't retrieve the IsClosed property.
- mock.VerifyGet(warehouse => warehouse.IsClosed);
-
-
- The invocation was not performed on the mock.
- Expression to verify.
- Type of the property to verify. Typically omitted as it can
- be inferred from the expression's return type.
-
-
-
- Verifies that a property has been set on the mock.
- Use in conjuntion with the default .
-
-
- This example assumes that the mock has been used,
- and later we want to verify that a given invocation
- with specific parameters was performed:
-
- var mock = new Mock<IWarehouse>();
- // exercise mock
- //...
- // Will throw if the test code didn't set the IsClosed property.
- mock.VerifySet(warehouse => warehouse.IsClosed);
-
-
- The invocation was not performed on the mock.
- Expression to verify.
- Type of the property to verify. Typically omitted as it can
- be inferred from the expression's return type.
-
-
-
- Verifies that a property has been set on the mock to the given value.
- Use in conjuntion with the default .
-
-
- This example assumes that the mock has been used,
- and later we want to verify that a given invocation
- with specific parameters was performed:
-
- var mock = new Mock<IWarehouse>();
- // exercise mock
- //...
- // Will throw if the test code didn't set the IsClosed property to true
- mock.VerifySet(warehouse => warehouse.IsClosed, true);
-
-
- The invocation was not performed on the mock.
- Expression to verify.
- The value that should have been set on the property.
- Type of the property to verify. Typically omitted as it can
- be inferred from the expression's return type.
-
-
-
- Exposes the mocked object instance.
-
-
-
-
- Specifies the behavior to use when returning default values for
- unexpected invocations.
-
-
-
-
- Behavior of the mock, according to the value set in the constructor.
-
-
-
-
- Implements the fluent API.
-
-
-
-
- Defines the Callback verb and overloads.
-
-
-
-
- Specifies a callback to invoke when the method is called.
-
- Callback method to invoke.
-
- The following example specifies a callback to set a boolean
- value that can be used later:
-
- bool called = false;
- mock.Expect(x => x.Execute())
- .Callback(() => called = true);
-
-
-
-
-
- Specifies a callback to invoke when the method is called that receives the original
- arguments.
-
- Argument type of the invoked method.
- Callback method to invoke.
-
- Invokes the given callback with the concrete invocation argument value.
-
- Notice how the specific string argument is retrieved by simply declaring
- it as part of the lambda expression for the callback:
-
-
- mock.Expect(x => x.Execute(It.IsAny<string>()))
- .Callback((string command) => Console.WriteLine(command));
-
-
-
-
-
- Specifies a callback to invoke when the method is called that receives the original
- arguments.
-
- Type of the first argument of the invoked method.
- Type of the second argument of the invoked method.
- Callback method to invoke.
-
- Invokes the given callback with the concrete invocation arguments values.
-
- Notice how the specific arguments are retrieved by simply declaring
- them as part of the lambda expression for the callback:
-
-
- mock.Expect(x => x.Execute(
- It.IsAny<string>(),
- It.IsAny<string>()))
- .Callback((string arg1, string arg2) => Console.WriteLine(arg1 + arg2));
-
-
-
-
-
- Specifies a callback to invoke when the method is called that receives the original
- arguments.
-
- Type of the first argument of the invoked method.
- Type of the second argument of the invoked method.
- Type of the third argument of the invoked method.
- Callback method to invoke.
-
- Invokes the given callback with the concrete invocation arguments values.
-
- Notice how the specific arguments are retrieved by simply declaring
- them as part of the lambda expression for the callback:
-
-
- mock.Expect(x => x.Execute(
- It.IsAny<string>(),
- It.IsAny<string>(),
- It.IsAny<int>()))
- .Callback((string arg1, string arg2, int arg3) => Console.WriteLine(arg1 + arg2 + arg3));
-
-
-
-
-
- Specifies a callback to invoke when the method is called that receives the original
- arguments.
-
- Type of the first argument of the invoked method.
- Type of the second argument of the invoked method.
- Type of the third argument of the invoked method.
- Type of the fourth argument of the invoked method.
- Callback method to invoke.
-
- Invokes the given callback with the concrete invocation arguments values.
-
- Notice how the specific arguments are retrieved by simply declaring
- them as part of the lambda expression for the callback:
-
-
- mock.Expect(x => x.Execute(
- It.IsAny<string>(),
- It.IsAny<string>(),
- It.IsAny<int>(),
- It.IsAny<bool>()))
- .Callback((string arg1, string arg2, int arg3, bool arg4) => Console.WriteLine(arg1 + arg2 + arg3 + arg4));
-
-
-
-
-
- Defines occurrence members to constraint expectations.
-
-
-
-
- The expected invocation can happen at most once.
-
-
-
- var mock = new Mock<ICommand>();
- mock.Expect(foo => foo.Execute("ping"))
- .AtMostOnce();
-
-
-
-
-
- The expected invocation can happen at most specified number of times.
-
-
-
- var mock = new Mock<ICommand>();
- mock.Expect(foo => foo.Execute("ping"))
- .AtMost( 5 );
-
-
-
-
-
- Defines the Verifiable verb.
-
-
-
-
- Marks the expectation as verifiable, meaning that a call
- to will check if this particular
- expectation was met.
-
-
- The following example marks the expectation as verifiable:
-
- mock.Expect(x => x.Execute("ping"))
- .Returns(true)
- .Verifiable();
-
-
-
-
-
- Defines the Raises verb.
-
-
-
-
- Specifies the mocked event that will be raised
- when the expectation is met.
-
- The mocked event, retrieved from
- or .
-
- The event args to pass when raising the event.
-
- The following example shows how to set an expectation that will
- raise an event when it's met:
-
- var mock = new Mock<IContainer>();
- // create handler to associate with the event to raise
- var handler = mock.CreateEventHandler();
- // associate the handler with the event to raise
- mock.Object.Added += handler;
- // set the expectation and the handler to raise
- mock.Expect(add => add.Add(It.IsAny<string>(), It.IsAny<object>()))
- .Raises(handler, EventArgs.Empty);
-
-
-
-
-
- Specifies the mocked event that will be raised
- when the expectation is met.
-
- The mocked event, retrieved from
- or .
-
- A function that will build the
- to pass when raising the event.
-
-
-
-
- Specifies the mocked event that will be raised
- when the expectation is met.
-
- The mocked event, retrieved from
- or .
-
- A function that will build the
- to pass when raising the event.
- Type of the argument received by the expected invocation.
-
-
-
-
- Specifies the mocked event that will be raised
- when the expectation is met.
-
- The mocked event, retrieved from
- or .
-
- A function that will build the
- to pass when raising the event.
- Type of the first argument received by the expected invocation.
- Type of the second argument received by the expected invocation.
-
-
-
-
- Specifies the mocked event that will be raised
- when the expectation is met.
-
- The mocked event, retrieved from
- or .
-
- A function that will build the
- to pass when raising the event.
- Type of the first argument received by the expected invocation.
- Type of the second argument received by the expected invocation.
- Type of the third argument received by the expected invocation.
-
-
-
-
- Specifies the mocked event that will be raised
- when the expectation is met.
-
- The mocked event, retrieved from
- or .
-
- A function that will build the
- to pass when raising the event.
- Type of the first argument received by the expected invocation.
- Type of the second argument received by the expected invocation.
- Type of the third argument received by the expected invocation.
- Type of the fourth argument received by the expected invocation.
-
-
-
-
- Marks a method as a matcher, which allows complete replacement
- of the built-in class with your own argument
- matching rules.
-
-
- The argument matching is used to determine whether a concrete
- invocation in the mock matches a given expectation. This
- matching mechanism is fully extensible.
-
- There are two parts of a matcher: the compiler matcher
- and the runtime matcher.
-
-
- Compiler matcher
- Used to satisfy the compiler requirements for the
- argument. Needs to be a method optionally receiving any arguments
- you might need for the matching, but with a return type that
- matches that of the argument.
-
- Let's say I want to match a lists of orders that contains
- a particular one. I might create a compiler matcher like the following:
-
-
- public static class Orders
- {
- [Matcher]
- public static IEnumerable<Order> Contains(Order order)
- {
- return null;
- }
- }
-
- Now we can invoke this static method instead of an argument in an
- invocation:
-
- var order = new Order { ... };
- var mock = new Mock<IRepository<Order>>();
-
- mock.Expect(x => x.Save(Orders.Contains(order)))
- .Throws<ArgumentException>();
-
- Note that the return value from the compiler matcher is irrelevant.
- This method will never be called, and is just used to satisfy the
- compiler and to signal Moq that this is not a method that we want
- to be invoked at runtime.
-
-
-
- Runtime matcher
-
- The runtime matcher is the one that will actually perform evaluation
- when the test is run, and is defined by convention to have the
- same signature as the compiler matcher, but where the return
- value is the first argument to the call, which contains the
- object received by the actual invocation at runtime:
-
- public static bool Contains(IEnumerable<Order> orders, Order order)
- {
- return orders.Contains(order);
- }
-
- At runtime, the mocked method will be invoked with a specific
- list of orders. This value will be passed to this runtime
- matcher as the first argument, while the second argument is the
- one specified in the expectation (x.Save(Orders.Contains(order))).
-
- The boolean returned determines whether the given argument has been
- matched. If all arguments to the expected method are matched, then
- the expectation is verified.
-
-
-
-
-
- Using this extensible infrastructure, you can easily replace the entire
- set of matchers with your own. You can also avoid the
- typical (and annoying) lengthy expressions that result when you have
- multiple arguments that use generics.
-
-
- The following is the complete example explained above:
-
- public static class Orders
- {
- [Matcher]
- public static IEnumerable<Order> Contains(Order order)
- {
- return null;
- }
-
- public static bool Contains(IEnumerable<Order> orders, Order order)
- {
- return orders.Contains(order);
- }
- }
-
- And the concrete test using this matcher:
-
- var order = new Order { ... };
- var mock = new Mock<IRepository<Order>>();
-
- mock.Expect(x => x.Save(Orders.Contains(order)))
- .Throws<ArgumentException>();
-
- // use mock, invoke Save, and have the matcher filter.
-
-
-
-
-
- Casts the expression to a lambda expression, removing
- a cast if there's any.
-
-
-
-
- Casts the body of the lambda expression to a .
-
- If the body is not a method call.
-
-
-
- Converts the body of the lambda expression into the referenced by it.
-
-
-
-
- Checks whether the body of the lambda expression is a property access.
-
-
-
-
- Checks whether the expression is a property access.
-
-
-
-
- Checks whether the body of the lambda expression is a property indexer, which is true
- when the expression is an whose
- has
- equal to .
-
-
-
-
- Checks whether the expression is a property indexer, which is true
- when the expression is an whose
- has
- equal to .
-
-
-
-
- Creates an expression that casts the given expression to the
- type.
-
-
-
-
- TODO: remove this code when https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=331583
- is fixed.
-
-
-
-
- Base class for visitors of expression trees.
-
-
- Provides the functionality of the internal visitor base class that
- comes with Linq.
- Matt's comments on the implementation:
-
- In this variant there is only one visitor class that dispatches calls to the general
- Visit function out to specific VisitXXX methods corresponding to different node types.
- Note not every node type gets it own method, for example all binary operators are
- treated in one VisitBinary method. The nodes themselves do not directly participate
- in the visitation process. They are treated as just data.
- The reason for this is that the quantity of visitors is actually open ended.
- You can write your own. Therefore no semantics of visiting is coupled into the node classes.
- It’s all in the visitors. The default visit behavior for node XXX is baked into the base
- class’s version of VisitXXX.
-
-
- Another variant is that all VisitXXX methods return a node.
- The Expression tree nodes are immutable. In order to change the tree you must construct
- a new one. The default VisitXXX methods will construct a new node if any of its sub-trees change.
- If no changes are made then the same node is returned. That way if you make a change
- to a node (by making a new node) deep down in a tree, the rest of the tree is rebuilt
- automatically for you.
-
- See: http://blogs.msdn.com/mattwar/archive/2007/07/31/linq-building-an-iqueryable-provider-part-ii.aspx.
-
- Matt Warren: http://blogs.msdn.com/mattwar
- Documented by InSTEDD: http://www.instedd.org
-
-
-
- Default constructor used by derived visitors.
-
-
-
-
- Visits the , determining which
- of the concrete Visit methods to call.
-
-
-
-
- Visits the generic , determining and
- calling the appropriate Visit method according to the
- , which will result
- in calls to ,
- or .
-
-
-
-
-
-
- Visits the initializer by
- calling the for the
- .
-
-
-
-
- Visits the expression by
- calling with the expression.
-
-
-
-
- Visits the by calling
- with the ,
- and
- expressions.
-
-
-
-
- Visits the by calling
- with the
- expression.
-
-
-
-
- Visits the , by default returning the
- same without further behavior.
-
-
-
-
- Visits the by calling
- with the ,
- and
- expressions.
-
-
-
-
- Visits the returning it
- by default without further behavior.
-
-
-
-
- Visits the by calling
- with the
- expression.
-
-
-
-
- Visits the by calling
- with the expression,
- and then with the .
-
-
-
-
-
-
- Visits the by iterating
- the list and visiting each in it.
-
-
-
-
-
-
- Visits the by calling
- with the expression.
-
-
-
-
-
-
- Visits the by calling
- with the .
-
-
-
-
-
-
- Visits the by calling
- with the
- .
-
-
-
-
-
-
- Visits the by
- calling for each in the
- collection.
-
-
-
-
-
-
- Visits the by
- calling for each
- in the collection.
-
-
-
-
-
-
- Visits the by calling
- with the expression.
-
-
-
-
-
-
- Visits the by calling
- with the
- expressions.
-
-
-
-
-
-
- Visits the by calling
- with the
- expression, then with the
- .
-
-
-
-
- Visits the by calling
- with the
- expression, and then with the
- .
-
-
-
-
-
-
- Visits the by calling
- with the
- expressions.
-
-
-
-
-
-
- Visits the by calling
- with the
- expressions.
-
-
-
-
-
-
- Provides partial evaluation of subtrees, whenever they can be evaluated locally.
-
- Matt Warren: http://blogs.msdn.com/mattwar
- Documented by InSTEDD: http://www.instedd.org
-
-
-
- Performs evaluation and replacement of independent sub-trees
-
- The root of the expression tree.
- A function that decides whether a given expression
- node can be part of the local function.
- A new tree with sub-trees evaluated and replaced.
-
-
-
- Performs evaluation and replacement of independent sub-trees
-
- The root of the expression tree.
- A new tree with sub-trees evaluated and replaced.
-
-
-
- Evaluates and replaces sub-trees when first candidate is reached (top-down)
-
-
-
-
- Performs bottom-up analysis to determine which nodes can possibly
- be part of an evaluated sub-tree.
-
-
-
-
- Checks an argument to ensure it isn't null.
-
- The argument value to check.
- The name of the argument.
-
-
-
- Checks a string argument to ensure it isn't null or empty.
-
- The argument value to check.
- The name of the argument.
-
-
-
- Defines the Returns verb for property get expectations.
-
- Type of the property.
-
-
-
- Base interface for .
-
-
-
-
- Specifies the value to return.
-
- The value to return, or .
-
- Return a true value from the property getter call:
-
- mock.ExpectGet(x => x.Suspended)
- .Returns(true);
-
-
-
-
-
- Specifies a function that will calculate the value to return for the property.
-
- The function that will calculate the return value.
-
- Return a calculated value when the property is retrieved:
-
- mock.ExpectGet(x => x.Suspended)
- .Returns(() => returnValues[0]);
-
- The lambda expression to retrieve the return value is lazy-executed,
- meaning that its value may change depending on the moment the property
- is retrieved and the value the returnValues array has at
- that moment.
-
-
-
-
- Defines the Callback verb for property getter expectations.
-
-
- Type of the property.
-
-
-
- Specifies a callback to invoke when the property is retrieved.
-
- Callback method to invoke.
-
- Invokes the given callback with the property value being set.
-
- mock.ExpectGet(x => x.Suspended)
- .Callback(() => called = true)
- .Returns(true);
-
-
-
-
-
- Implements the fluent API.
-
-
-
-
- Implements the fluent API.
-
-
-
-
- Defines the Returns verb.
-
- Type of the return value from the expression.
-
-
-
- Specifies the value to return.
-
- The value to return, or .
-
- Return a true value from the method call:
-
- mock.Expect(x => x.Execute("ping"))
- .Returns(true);
-
-
-
-
-
- Specifies a function that will calculate the value to return from the method.
-
- The function that will calculate the return value.
-
- Return a calculated value when the method is called:
-
- mock.Expect(x => x.Execute("ping"))
- .Returns(() => returnValues[0]);
-
- The lambda expression to retrieve the return value is lazy-executed,
- meaning that its value may change depending on the moment the method
- is executed and the value the returnValues array has at
- that moment.
-
-
-
-
- Specifies a function that will calculate the value to return from the method,
- retrieving the arguments for the invocation.
-
- Type of the argument of the invoked method.
- The function that will calculate the return value.
-
- Return a calculated value which is evaluated lazily at the time of the invocation.
-
- The lookup list can change between invocations and the expectation
- will return different values accordingly. Also, notice how the specific
- string argument is retrieved by simply declaring it as part of the lambda
- expression:
-
-
- mock.Expect(x => x.Execute(It.IsAny<string>()))
- .Returns((string command) => returnValues[command]);
-
-
-
-
-
- Specifies a function that will calculate the value to return from the method,
- retrieving the arguments for the invocation.
-
- Type of the first argument of the invoked method.
- Type of the second argument of the invoked method.
- The function that will calculate the return value.
-
- Return a calculated value which is evaluated lazily at the time of the invocation.
-
- The return value is calculated from the value of the actual method invocation arguments.
- Notice how the arguments are retrieved by simply declaring them as part of the lambda
- expression:
-
-
- mock.Expect(x => x.Execute(
- It.IsAny<string>(),
- It.IsAny<string>()))
- .Returns((string arg1, string arg2) => arg1 + arg2);
-
-
-
-
-
- Specifies a function that will calculate the value to return from the method,
- retrieving the arguments for the invocation.
-
- Type of the first argument of the invoked method.
- Type of the second argument of the invoked method.
- Type of the third argument of the invoked method.
- The function that will calculate the return value.
-
- Return a calculated value which is evaluated lazily at the time of the invocation.
-
- The return value is calculated from the value of the actual method invocation arguments.
- Notice how the arguments are retrieved by simply declaring them as part of the lambda
- expression:
-
-
- mock.Expect(x => x.Execute(
- It.IsAny<string>(),
- It.IsAny<string>(),
- It.IsAny<int>()))
- .Returns((string arg1, string arg2, int arg3) => arg1 + arg2 + arg3);
-
-
-
-
-
- Specifies a function that will calculate the value to return from the method,
- retrieving the arguments for the invocation.
-
- Type of the first argument of the invoked method.
- Type of the second argument of the invoked method.
- Type of the third argument of the invoked method.
- Type of the fourth argument of the invoked method.
- The function that will calculate the return value.
-
- Return a calculated value which is evaluated lazily at the time of the invocation.
-
- The return value is calculated from the value of the actual method invocation arguments.
- Notice how the arguments are retrieved by simply declaring them as part of the lambda
- expression:
-
-
- mock.Expect(x => x.Execute(
- It.IsAny<string>(),
- It.IsAny<string>(),
- It.IsAny<int>(),
- It.IsAny<bool>()))
- .Returns((string arg1, string arg2, int arg3, bool arg4) => arg1 + arg2 + arg3 + arg4);
-
-
-
-
-
- Defines the Throws verb.
-
-
-
-
- Specifies the exception to throw when the method is invoked.
-
- Exception instance to throw.
-
- This example shows how to throw an exception when the method is
- invoked with an empty string argument:
-
- mock.Expect(x => x.Execute(""))
- .Throws(new ArgumentException());
-
-
-
-
-
- Specifies the type of exception to throw when the method is invoked.
-
- Type of exception to instantiate and throw when the expectation is met.
-
- This example shows how to throw an exception when the method is
- invoked with an empty string argument:
-
- mock.Expect(x => x.Execute(""))
- .Throws<ArgumentException>();
-
-
-
-
-
- Implements the fluent API.
-
-
-
-
- Implements the fluent API.
-
-
-
-
- Defines the Callback verb and overloads for callbacks on
- expectations that return a value.
-
- Type of the return value of the expectation.
-
-
-
- Specifies a callback to invoke when the method is called.
-
- Callback method to invoke.
-
- The following example specifies a callback to set a boolean
- value that can be used later:
-
- bool called = false;
- mock.Expect(x => x.Execute())
- .Callback(() => called = true)
- .Returns(true);
-
- Note that in the case of value-returning methods, after the Callback
- call you can still specify the return value.
-
-
-
-
- Specifies a callback to invoke when the method is called that receives the original
- arguments.
-
- Type of the argument of the invoked method.
- Callback method to invoke.
-
- Invokes the given callback with the concrete invocation argument value.
-
- Notice how the specific string argument is retrieved by simply declaring
- it as part of the lambda expression for the callback:
-
-
- mock.Expect(x => x.Execute(It.IsAny<string>()))
- .Callback((string command) => Console.WriteLine(command))
- .Returns(true);
-
-
-
-
-
- Specifies a callback to invoke when the method is called that receives the original
- arguments.
-
- Type of the first argument of the invoked method.
- Type of the second argument of the invoked method.
- Callback method to invoke.
-
- Invokes the given callback with the concrete invocation arguments values.
-
- Notice how the specific arguments are retrieved by simply declaring
- them as part of the lambda expression for the callback:
-
-
- mock.Expect(x => x.Execute(
- It.IsAny<string>(),
- It.IsAny<string>()))
- .Callback((string arg1, string arg2) => Console.WriteLine(arg1 + arg2))
- .Returns(true);
-
-
-
-
-
- Specifies a callback to invoke when the method is called that receives the original
- arguments.
-
- Type of the first argument of the invoked method.
- Type of the second argument of the invoked method.
- Type of the third argument of the invoked method.
- Callback method to invoke.
-
- Invokes the given callback with the concrete invocation arguments values.
-
- Notice how the specific arguments are retrieved by simply declaring
- them as part of the lambda expression for the callback:
-
-
- mock.Expect(x => x.Execute(
- It.IsAny<string>(),
- It.IsAny<string>(),
- It.IsAny<int>()))
- .Callback((string arg1, string arg2, int arg3) => Console.WriteLine(arg1 + arg2 + arg3))
- .Returns(true);
-
-
-
-
-
- Specifies a callback to invoke when the method is called that receives the original
- arguments.
-
- Type of the first argument of the invoked method.
- Type of the second argument of the invoked method.
- Type of the third argument of the invoked method.
- Type of the fourth argument of the invoked method.
- Callback method to invoke.
-
- Invokes the given callback with the concrete invocation arguments values.
-
- Notice how the specific arguments are retrieved by simply declaring
- them as part of the lambda expression for the callback:
-
-
- mock.Expect(x => x.Execute(
- It.IsAny<string>(),
- It.IsAny<string>(),
- It.IsAny<int>(),
- It.IsAny<bool>()))
- .Callback((string arg1, string arg2, int arg3, bool arg4) => Console.WriteLine(arg1 + arg2 + arg3 + arg4))
- .Returns(true);
-
-
-
-
-
- Implemented by all generated mock object instances.
-
-
-
-
- Implemented by all generated mock object instances.
-
-
-
-
- Reference the Mock that contains this as the mock.Object value.
-
-
-
-
- Reference the Mock that contains this as the mock.Object value.
-
-
-
-
- Implements the actual interception and method invocation for
- all mocks.
-
-
-
-
- Get an eventInfo for a given event name. Search type ancestors depth first if necessary.
-
- Name of the event, with the set_ or get_ prefix already removed
-
-
-
- Given a type return all of its ancestors, both types and interfaces.
-
- The type to find immediate ancestors of
-
-
-
- Implements the fluent API.
-
-
-
-
- Defines the Never verb.
-
-
-
-
- The expected invocation is never expected to happen.
-
-
-
- var mock = new Mock<ICommand>();
- mock.Expect(foo => foo.Execute("ping"))
- .Never();
-
-
-
- is always verified inmediately as
- the invocations are performed, like strict mocks do
- with unexpected invocations.
-
-
-
-
- Implements the fluent API.
-
-
-
-
- Implements the fluent API.
-
-
-
-
- Implements the fluent API.
-
-
-
-
- Defines the Callback verb for property setter expectations.
-
-
-
- Type of the property.
-
-
-
- Specifies a callback to invoke when the property is set that receives the
- property value being set.
-
- Callback method to invoke.
-
- Invokes the given callback with the property value being set.
-
- mock.ExpectSet(x => x.Suspended)
- .Callback((bool state) => Console.WriteLine(state));
-
-
-
-
-
- Allows the specification of a matching condition for an
- argument in a method invocation, rather than a specific
- argument value. "It" refers to the argument being matched.
-
-
- This class allows the expectation to match a method invocation
- with an arbitrary value, with a value in a specified range, or
- even one that matches a given predicate.
-
-
-
-
- Matches any value of the given type.
-
-
- Typically used when the actual argument value for a method
- call is not relevant.
-
-
-
- // Throws an exception for a call to Remove with any string value.
- mock.Expect(x => x.Remove(It.IsAny<string>())).Throws(new InvalidOperationException());
-
-
- Type of the value.
-
-
-
- Matches any value that satisfies the given predicate.
-
- Type of the argument to check.
- The predicate used to match the method argument.
-
- Allows the specification of a predicate to perform matching
- of method call arguments.
-
-
- This example shows how to return the value 1 whenever the argument to the
- Do method is an even number.
-
- mock.Expect(x => x.Do(It.Is<int>(i => i % 2 == 0)))
- .Returns(1);
-
- This example shows how to throw an exception if the argument to the
- method is a negative number:
-
- mock.Expect(x => x.GetUser(It.Is<int>(i => i < 0)))
- .Throws(new ArgumentException());
-
-
-
-
-
- Matches any value that is in the range specified.
-
- Type of the argument to check.
- The lower bound of the range.
- The upper bound of the range.
- The kind of range. See .
-
- The following example shows how to expect a method call
- with an integer argument within the 0..100 range.
-
- mock.Expect(x => x.HasInventory(
- It.IsAny<string>(),
- It.IsInRange(0, 100, Range.Inclusive)))
- .Returns(false);
-
-
-
-
-
- Matches a string argument if it matches the given regular expression pattern.
-
- The pattern to use to match the string argument value.
-
- The following example shows how to expect a call to a method where the
- string argument matches the given regular expression:
-
- mock.Expect(x => x.Check(It.IsRegex("[a-z]+"))).Returns(1);
-
-
-
-
-
- Matches a string argument if it matches the given regular expression pattern.
-
- The pattern to use to match the string argument value.
- The options used to interpret the pattern.
-
- The following example shows how to expect a call to a method where the
- string argument matches the given regular expression, in a case insensitive way:
-
- mock.Expect(x => x.Check(It.IsRegex("[a-z]+", RegexOptions.IgnoreCase))).Returns(1);
-
-
-
-
-
- Matcher to treat static functions as matchers.
-
- mock.Expect(x => x.StringMethod(A.MagicString()));
-
- pbulic static class A
- {
- [Matcher]
- public static string MagicString() { return null; }
- public static bool MagicString(string arg)
- {
- return arg == "magic";
- }
- }
-
- Will success if: mock.Object.StringMethod("magic");
- and fail with any other call.
-
-
-
-
- We need this non-generics base class so that
- we can use from
- generic code.
-
-
-
-
- Base class for mocks and static helper class with methods that
- apply to mocked objects, such as to
- retrieve a from an object instance.
-
-
-
-
- Base mock interface exposing non-generic members.
-
-
-
-
- Creates a handler that can be associated to an event receiving
- the given and can be used
- to raise the event.
-
- Type of
- data passed in to the event.
-
- This example shows how to invoke an event with a custom event arguments
- class in a view that will cause its corresponding presenter to
- react by changing its state:
-
- var mockView = new Mock<IOrdersView>();
- var mockedEvent = mockView.CreateEventHandler<OrderEventArgs>();
-
- var presenter = new OrdersPresenter(mockView.Object);
-
- // Check that the presenter has no selection by default
- Assert.Null(presenter.SelectedOrder);
-
- // Create a mock event handler of the appropriate type
- var handler = mockView.CreateEventHandler<OrderEventArgs>();
- // Associate it with the event we want to raise
- mockView.Object.Cancel += handler;
- // Finally raise the event with a specific arguments data
- handler.Raise(new OrderEventArgs { Order = new Order("moq", 500) });
-
- // Now the presenter reacted to the event, and we have a selected order
- Assert.NotNull(presenter.SelectedOrder);
- Assert.Equal("moq", presenter.SelectedOrder.ProductName);
-
-
-
-
-
- Creates a handler that can be associated to an event receiving
- a generic and can be used
- to raise the event.
-
-
- This example shows how to invoke a generic event in a view that will
- cause its corresponding presenter to react by changing its state:
-
- var mockView = new Mock<IOrdersView>();
- var mockedEvent = mockView.CreateEventHandler();
-
- var presenter = new OrdersPresenter(mockView.Object);
-
- // Check that the presenter is not in the "Canceled" state
- Assert.False(presenter.IsCanceled);
-
- // Create a mock event handler of the appropriate type
- var handler = mockView.CreateEventHandler();
- // Associate it with the event we want to raise
- mockView.Object.Cancel += handler;
- // Finally raise the event
- handler.Raise(EventArgs.Empty);
-
- // Now the presenter reacted to the event, and changed its state
- Assert.True(presenter.IsCanceled);
-
-
-
-
-
- Verifies that all verifiable expectations have been met.
-
-
- This example sets up an expectation and marks it as verifiable. After
- the mock is used, a call is issued on the mock
- to ensure the method in the expectation was invoked:
-
- var mock = new Mock<IWarehouse>();
- mock.Expect(x => x.HasInventory(TALISKER, 50)).Verifiable().Returns(true);
- ...
- // other test code
- ...
- // Will throw if the test code has didn't call HasInventory.
- mock.Verify();
-
-
- Not all verifiable expectations were met.
-
-
-
- Verifies all expectations regardless of whether they have
- been flagged as verifiable.
-
-
- This example sets up an expectation without marking it as verifiable. After
- the mock is used, a call is issued on the mock
- to ensure that all expectations are met:
-
- var mock = new Mock<IWarehouse>();
- mock.Expect(x => x.HasInventory(TALISKER, 50)).Returns(true);
- ...
- // other test code
- ...
- // Will throw if the test code has didn't call HasInventory, even
- // that expectation was not marked as verifiable.
- mock.VerifyAll();
-
-
- At least one expectation was not met.
-
-
-
- Whether the base member virtual implementation will be called
- for mocked classes if no expectation is met. Defaults to .
-
-
-
-
- Determines how to generate default values for loose mocks on
- unexpected invocations.
-
-
-
-
- The mocked object instance.
-
-
-
-
- Retrieves the mock object for the given object instance.
-
- Type of the mock to retrieve. Can be omitted as it's inferred
- from the object instance passed in as the instance.
- The instance of the mocked object.
- The mock associated with the mocked object.
- The received instance
- was not created by Moq.
-
- The following example shows how to add a new expectation to an object
- instance which is not the original but rather
- the object associated with it:
-
- // Typed instance, not the mock, is retrieved from some test API.
- HttpContextBase context = GetMockContext();
-
- // context.Request is the typed object from the "real" API
- // so in order to add an expectation to it, we need to get
- // the mock that "owns" it
- Mock<HttpRequestBase> request = Mock.Get(context.Request);
- mock.Expect(req => req.AppRelativeCurrentExecutionFilePath)
- .Returns(tempUrl);
-
-
-
-
-
- Initializes the mock
-
-
-
-
- Returns the mocked object value.
-
-
-
-
- Implements .
-
-
-
-
- Implements .
-
-
-
-
- Gets the interceptor target for the given expression and root mock,
- building the intermediate hierarchy of mock objects if necessary.
-
-
-
-
- Implements .
-
- Type of event argument class.
-
-
-
- Implements
-
-
-
-
- Base class for mocks and static helper class with methods that
- apply to mocked objects, such as to
- retrieve a from an object instance.
-
-
-
-
- Exposes the list of extra interfaces implemented by the mock.
-
-
-
-
- Implements .
-
-
-
-
- Implements .
-
-
-
-
- Implements .
-
-
-
-
- Specifies the class that will determine the default
- value to return when invocations are made that
- have no expectations and need to return a default
- value (for loose mocks).
-
-
-
-
- The mocked object instance. Implements .
-
-
-
-
- Retrieves the type of the mocked object, its generic type argument.
- This is used in the auto-mocking of hierarchy access.
-
-
-
-
- Represents a generic event that has been mocked and can
- be rised.
-
-
-
-
- Provided solely to allow the interceptor to determine when the attached
- handler is coming from this mocked event so we can assign the
- corresponding EventInfo for it.
-
-
-
-
- Raises the associated event with the given
- event argument data.
-
-
-
-
- Provides support for attaching a to
- a generic event.
-
- Event to convert.
-
-
-
- Event raised whenever the mocked event is rised.
-
-
-
-
- Options to customize the behavior of the mock.
-
-
-
-
- Causes the mock to always throw
- an exception for invocations that don't have a
- corresponding expectation.
-
-
-
-
- Will never throw exceptions, returning default
- values when necessary (null for reference types,
- zero for value types or empty enumerables and arrays).
-
-
-
-
- Default mock behavior, which equals .
-
-
-
-
- Exception thrown by mocks when expectations are not met,
- the mock is not properly setup, etc.
-
-
- A distinct exception type is provided so that exceptions
- thrown by the mock can be differentiated in tests that
- expect other exceptions to be thrown (i.e. ArgumentException).
-
- Richer exception hierarchy/types are not provided as
- tests typically should not catch or expect exceptions
- from the mocks. These are typically the result of changes
- in the tested class or its collaborators implementation, and
- result in fixes in the mock setup so that they dissapear and
- allow the test to pass.
-
-
-
-
-
- Supports the serialization infrastructure.
-
- Serialization information.
- Streaming context.
-
-
-
- Supports the serialization infrastructure.
-
- Serialization information.
- Streaming context.
-
-
-
- Made internal as it's of no use for
- consumers, but it's important for
- our own tests.
-
-
-
-
- Used by the mock factory to accumulate verification
- failures.
-
-
-
-
- Supports the serialization infrastructure.
-
-
-
-
- Utility factory class to use to construct multiple
- mocks when consistent verification is
- desired for all of them.
-
-
- If multiple mocks will be created during a test, passing
- the desired (if different than the
- or the one
- passed to the factory constructor) and later verifying each
- mock can become repetitive and tedious.
-
- This factory class helps in that scenario by providing a
- simplified creation of multiple mocks with a default
- (unless overriden by calling
- ) and posterior verification.
-
-
-
- The following is a straightforward example on how to
- create and automatically verify strict mocks using a :
-
- var factory = new MockFactory(MockBehavior.Strict);
-
- var foo = factory.Create<IFoo>();
- var bar = factory.Create<IBar>();
-
- // no need to call Verifiable() on the expectation
- // as we'll be validating all expectations anyway.
- foo.Expect(f => f.Do());
- bar.Expect(b => b.Redo());
-
- // exercise the mocks here
-
- factory.VerifyAll();
- // At this point all expectations are already checked
- // and an optional MockException might be thrown.
- // Note also that because the mocks are strict, any invocation
- // that doesn't have a matching expectation will also throw a MockException.
-
- The following examples shows how to setup the factory
- to create loose mocks and later verify only verifiable expectations:
-
- var factory = new MockFactory(MockBehavior.Loose);
-
- var foo = factory.Create<IFoo>();
- var bar = factory.Create<IBar>();
-
- // this expectation will be verified at the end of the "using" block
- foo.Expect(f => f.Do()).Verifiable();
-
- // this expectation will NOT be verified
- foo.Expect(f => f.Calculate());
-
- // this expectation will be verified at the end of the "using" block
- bar.Expect(b => b.Redo()).Verifiable();
-
- // exercise the mocks here
- // note that because the mocks are Loose, members
- // called in the interfaces for which no matching
- // expectations exist will NOT throw exceptions,
- // and will rather return default values.
-
- factory.Verify();
- // At this point verifiable expectations are already checked
- // and an optional MockException might be thrown.
-
- The following examples shows how to setup the factory with a
- default strict behavior, overriding that default for a
- specific mock:
-
- var factory = new MockFactory(MockBehavior.Strict);
-
- // this particular one we want loose
- var foo = factory.Create<IFoo>(MockBehavior.Loose);
- var bar = factory.Create<IBar>();
-
- // set expectations
-
- // exercise the mocks here
-
- factory.Verify();
-
-
-
-
-
-
- Initializes the factory with the given
- for newly created mocks from the factory.
-
- The behavior to use for mocks created
- using the factory method if not overriden
- by using the overload.
-
-
-
- Creates a new mock with the default
- specified at factory construction time.
-
- Type to mock.
- A new .
-
-
- var factory = new MockFactory(MockBehavior.Strict);
-
- var foo = factory.Create<IFoo>();
- // use mock on tests
-
- factory.VerifyAll();
-
-
-
-
-
- Creates a new mock with the default
- specified at factory construction time and with the
- the given constructor arguments for the class.
-
-
- The mock will try to find the best match constructor given the
- constructor arguments, and invoke that to initialize the instance.
- This applies only to classes, not interfaces.
-
- Type to mock.
- Constructor arguments for mocked classes.
- A new .
-
-
- var factory = new MockFactory(MockBehavior.Default);
-
- var mock = factory.Create<MyBase>("Foo", 25, true);
- // use mock on tests
-
- factory.Verify();
-
-
-
-
-
- Creates a new mock with the given .
-
- Type to mock.
- Behavior to use for the mock, which overrides
- the default behavior specified at factory construction time.
- A new .
-
- The following example shows how to create a mock with a different
- behavior to that specified as the default for the factory:
-
- var factory = new MockFactory(MockBehavior.Strict);
-
- var foo = factory.Create<IFoo>(MockBehavior.Loose);
-
-
-
-
-
- Creates a new mock with the given
- and with the the given constructor arguments for the class.
-
-
- The mock will try to find the best match constructor given the
- constructor arguments, and invoke that to initialize the instance.
- This applies only to classes, not interfaces.
-
- Type to mock.
- Behavior to use for the mock, which overrides
- the default behavior specified at factory construction time.
- Constructor arguments for mocked classes.
- A new .
-
- The following example shows how to create a mock with a different
- behavior to that specified as the default for the factory, passing
- constructor arguments:
-
- var factory = new MockFactory(MockBehavior.Default);
-
- var mock = factory.Create<MyBase>(MockBehavior.Strict, "Foo", 25, true);
-
-
-
-
-
- Implements creation of a new mock within the factory.
-
- Type to mock.
- The behavior for the new mock.
- Optional arguments for the construction of the mock.
-
-
-
- Verifies all verifiable expectations on all mocks created
- by this factory.
-
-
- One or more mocks had expectations that were not satisfied.
-
-
-
- Verifies all verifiable expectations on all mocks created
- by this factory.
-
-
- One or more mocks had expectations that were not satisfied.
-
-
-
- Invokes for each mock
- in , and accumulates the resulting
- that might be
- thrown from the action.
-
- The action to execute against
- each mock.
-
-
-
- Whether the base member virtual implementation will be called
- for mocked classes if no expectation is met. Defaults to .
-
-
-
-
- Specifies the behavior to use when returning default values for
- unexpected invocations on loose mocks.
-
-
-
-
- Gets the mocks that have been created by this factory and
- that will get verified together.
-
-
-
-
- A strongly-typed resource class, for looking up localized strings, etc.
-
-
-
-
- Returns the cached ResourceManager instance used by this class.
-
-
-
-
- Overrides the current thread's CurrentUICulture property for all
- resource lookups using this strongly typed resource class.
-
-
-
-
- Looks up a localized string similar to Mock type has already been initialized by accessing its Object property. Adding interfaces must be done before that..
-
-
-
-
- Looks up a localized string similar to Can only add interfaces to the mock..
-
-
-
-
- Looks up a localized string similar to Can't set return value for void method {0}..
-
-
-
-
- Looks up a localized string similar to Constructor arguments cannot be passed for interface mocks..
-
-
-
-
- Looks up a localized string similar to A matching constructor for the given arguments was not found on the mocked type..
-
-
-
-
- Looks up a localized string similar to Invalid expectation on a non-overridable member:
- {0}.
-
-
-
-
- Looks up a localized string similar to A lambda expression is expected as the argument to It.Is<T>..
-
-
-
-
- Looks up a localized string similar to Invocation {0} should not have been made..
-
-
-
-
- Looks up a localized string similar to Expression is not a method invocation: {0}.
-
-
-
-
- Looks up a localized string similar to Expression is not a property access: {0}.
-
-
-
-
- Looks up a localized string similar to Expression {0} involves a field access, which is not supported. Use properties instead..
-
-
-
-
- Looks up a localized string similar to Type to mock must be an interface or an abstract or non-sealed class. .
-
-
-
-
- Looks up a localized string similar to Cannot retrieve a mock with the given object type {0} as it's not the main type of the mock or any of its additional interfaces.
- Please cast the argument to one of the supported types: {1}.
- Remember that there's no generics covariance in the CLR, so your object must be one of these types in order for the call to succeed..
-
-
-
-
- Looks up a localized string similar to Member {0}.{1} does not exist..
-
-
-
-
- Looks up a localized string similar to Method {0}.{1} is public. Use strong-typed Expect overload instead:
- mock.Expect(x => x.{1}());
- .
-
-
-
-
- Looks up a localized string similar to {0} invocation failed with mock behavior {1}.
- {2}.
-
-
-
-
- Looks up a localized string similar to Expected only {0} calls to {1}..
-
-
-
-
- Looks up a localized string similar to Expected only one call to {0}..
-
-
-
-
- Looks up a localized string similar to All invocations on the mock must have a corresponding expectation..
-
-
-
-
- Looks up a localized string similar to The given invocation was not performed on the mock..
-
-
-
-
- Looks up a localized string similar to Object instance was not created by Moq..
-
-
-
-
- Looks up a localized string similar to Property {0}.{1} does not exist..
-
-
-
-
- Looks up a localized string similar to Property {0}.{1} is write-only..
-
-
-
-
- Looks up a localized string similar to Property {0}.{1} is read-only..
-
-
-
-
- Looks up a localized string similar to Cannot raise a mocked event unless it has been associated (attached) to a concrete event in a mocked object..
-
-
-
-
- Looks up a localized string similar to Invocation needs to return a value and therefore must have a corresponding expectation that provides it..
-
-
-
-
- Looks up a localized string similar to To set expectations for public property {0}.{1}, use the typed overloads, such as:
- mock.Expect(x => x.{1}).Returns(value);
- mock.ExpectGet(x => x.{1}).Returns(value); //equivalent to previous one
- mock.ExpectSet(x => x.{1}).Callback(callbackDelegate);
- .
-
-
-
-
- Looks up a localized string similar to Expression {0} is not supported..
-
-
-
-
- Looks up a localized string similar to Only property accesses are supported in intermediate invocations on an expectation. Unsupported expression {0}..
-
-
-
-
- Looks up a localized string similar to Expression contains intermediate property access {0}.{1} which is of type {2} and cannot be mocked. Unsupported expression {3}..
-
-
-
-
- Looks up a localized string similar to Member {0} is not supported for protected mocking..
-
-
-
-
- Looks up a localized string similar to To set expectations for protected property {0}.{1}, use:
- mock.Expect<{2}>(x => x.{1}).Returns(value);
- mock.ExpectGet(x => x.{1}).Returns(value); //equivalent to previous one
- mock.ExpectSet(x => x.{1}).Callback(callbackDelegate);.
-
-
-
-
- Looks up a localized string similar to The following expectations were not met:
- {0}.
-
-
-
-
- Allows expectations to be set for protected members by using their
- name as a string, rather than strong-typing them which is not possible
- due to their visibility.
-
-
-
-
- Sets an expectation on the void method with the given
- , optionally specifying
- arguments for the method call.
-
- Name of the void method to be invoke.
- Optional arguments for the invocation.
-
-
-
- Sets an expectation on a property or a non void method with the given
- , optionally specifying
- arguments for the method call.
-
- Name of the method or property to be invoke.
- Optional arguments for the invocation.
- Return type of the method or property.
-
-
-
- Sets an expectation on a property getter with the given
- .
-
- Name of the property.
- Type of the property.
-
-
-
- Sets an expectation on a property setter with the given
- .
-
- Name of the property.
- Type of the property.
-
-
-
- Allows the specification of a matching condition for an
- argument in a protected member expectation, rather than a specific
- argument value. "ItExpr" refers to the argument being matched.
-
-
- Use this variant of argument matching instead of
- for protected expectations.
- This class allows the expectation to match a method invocation
- with an arbitrary value, with a value in a specified range, or
- even one that matches a given predicate.
-
-
-
-
- Matches any value of the given type.
-
-
- Typically used when the actual argument value for a method
- call is not relevant.
-
-
-
- // Throws an exception for a call to Remove with any string value.
- mock.Protected()
- .Expect("Remove", ItExpr.IsAny<string>())
- .Throws(new InvalidOperationException());
-
-
- Type of the value.
-
-
-
- Matches any value that satisfies the given predicate.
-
- Type of the argument to check.
- The predicate used to match the method argument.
-
- Allows the specification of a predicate to perform matching
- of method call arguments.
-
-
- This example shows how to return the value 1 whenever the argument to the
- Do method is an even number.
-
- mock.Protected()
- .Expect("Do", ItExpr.Is<int>(i => i % 2 == 0))
- .Returns(1);
-
- This example shows how to throw an exception if the argument to the
- method is a negative number:
-
- mock.Protected()
- .Expect("GetUser", ItExpr.Is<int>(i => i < 0))
- .Throws(new ArgumentException());
-
-
-
-
-
- Matches any value that is in the range specified.
-
- Type of the argument to check.
- The lower bound of the range.
- The upper bound of the range.
- The kind of range. See .
-
- The following example shows how to expect a method call
- with an integer argument within the 0..100 range.
-
- mock.Protected()
- .Expect("HasInventory",
- ItExpr.IsAny<string>(),
- ItExpr.IsInRange(0, 100, Range.Inclusive))
- .Returns(false);
-
-
-
-
-
- Matches a string argument if it matches the given regular expression pattern.
-
- The pattern to use to match the string argument value.
-
- The following example shows how to expect a call to a method where the
- string argument matches the given regular expression:
-
- mock.Protected()
- .Expect("Check", ItExpr.IsRegex("[a-z]+"))
- .Returns(1);
-
-
-
-
-
- Matches a string argument if it matches the given regular expression pattern.
-
- The pattern to use to match the string argument value.
- The options used to interpret the pattern.
-
- The following example shows how to expect a call to a method where the
- string argument matches the given regular expression, in a case insensitive way:
-
- mock.Protected()
- .Expect("Check", ItExpr.IsRegex("[a-z]+", RegexOptions.IgnoreCase))
- .Returns(1);
-
-
-
-
-
- Enables the Protected() method on ,
- allowing expectations to be set for protected members by using their
- name as a string, rather than strong-typing them which is not possible
- due to their visibility.
-
-
-
-
- Enable protected expectations for the mock.
-
- Mocked object type. Typically omitted as it can be inferred from the mock instance.
- The mock to set the protected expectations on.
-
-
-
-
-
-
-
-
-
-
-
- Kind of range to use in a filter specified through
- .
-
-
-
-
- The range includes the to and
- from values.
-
-
-
-
- The range does not include the to and
- from values.
-
-
-
-
- Determines the way default values are generated
- calculated for loose mocks.
-
-
-
-
- Default behavior, which generates empty values for
- value types (i.e. default(int)), empty array and
- enumerables, and nulls for all other reference types.
-
-
-
-
- Whenever the default value generated by
- is null, replaces this value with a mock (if the type
- can be mocked).
-
-
- For sealed classes, a null value will be generated.
-
-
-
-
- Core implementation of the interface.
-
-
- Type to mock.
-
-
-
- Initializes an instance of the mock with default behavior and with
- the given constructor arguments for the class. (Only valid when is a class)
-
-
- The mock will try to find the best match constructor given the constructor arguments, and invoke that
- to initialize the instance. This applies only for classes, not interfaces.
-
-
- var mock = new Mock<MyProvider>(someArgument, 25);
-
- Optional constructor arguments if the mocked type is a class.
-
-
-
- Initializes an instance of the mock with default behavior.
-
-
- var mock = new Mock<IFormatProvider>();
-
-
-
-
- Initializes an instance of the mock with the specified behavior.
-
-
- var mock = new Mock<IFormatProvider>(MockBehavior.Relaxed);
-
- Behavior of the mock.
-
-
-
- Initializes an instance of the mock with a specific behavior with
- the given constructor arguments for the class.
-
-
- The mock will try to find the best match constructor given the constructor arguments, and invoke that
- to initialize the instance. This applies only to classes, not interfaces.
-
-
- var mock = new Mock<MyProvider>(someArgument, 25);
-
- Behavior of the mock.
- Optional constructor arguments if the mocked type is a class.
-
-
-
- Returns the mocked object value.
-
-
-
-
- Implements .
-
- Lambda expression that specifies the expected method invocation.
-
-
-
- Implements .
-
- Type of the return value. Typically omitted as it can be inferred from the expression.
- Lambda expression that specifies the expected method invocation.
-
-
-
- Implements .
-
- Type of the property. Typically omitted as it can be inferred from the expression.
- Lambda expression that specifies the expected property getter.
-
-
-
- Implements .
-
- Type of the property. Typically omitted as it can be inferred from the expression.
- Lambda expression that specifies the expected property setter.
-
-
-
- Implements .
-
- Type of the property. Typically omitted as it can be inferred from the expression.
- Lambda expression that specifies the expected property setter.
- The value expected to be set for the property.
-
-
-
- Implements .
-
- Expression to verify.
-
-
-
- Implements .
-
- Expression to verify.
- Type of return value from the expression.
-
-
-
- Implements .
-
- Expression to verify.
- Type of the property to verify. Typically omitted as it can
- be inferred from the expression's return type.
-
-
-
- Implements .
-
- Expression to verify.
- Type of the property to verify. Typically omitted as it can
- be inferred from the expression's return type.
-
-
-
- Implements .
-
- Expression to verify.
- The value that should have been set on the property.
- Type of the property to verify. Typically omitted as it can
- be inferred from the expression's return type.
-
-
-
- Implements .
-
-
-
-
- Implements .
-
-
-
-
- Implements .
-
- Type of interface to cast the mock to.
-
-
-
- Exposes the mocked object instance.
-
-
-
-
- A that returns an empty default value
- for non-mockeable types, and mocks for all other types (interfaces and
- non-sealed classes) that can be mocked.
-
-
-
-
- Provides a typed for a
- specific type of .
-
- The type of event arguments required by the event.
-
- The mocked event can either be a or custom
- event handler which follows .NET practice of providing object sender, EventArgs args
- kind of signature.
-
-
-
-
- Raises the associated event with the given
- event argument data.
-
- Data to pass to the event.
-
-
-
- Provides support for attaching a to
- a generic event.
-
- Event to convert.
-
-
-
- Provided solely to allow the interceptor to determine when the attached
- handler is coming from this mocked event so we can assign the
- corresponding EventInfo for it.
-
-
-
-
- Adds Stub extension method to a mock so that you can
- stub properties.
-
-
-
-
- Specifies that the given property should have stub behavior,
- meaning that setting its value will cause it to be saved and
- later returned when the property is requested.
-
- Mocked type, inferred from the object
- where this method is being applied (does not need to be specified).
- Type of the property, inferred from the property
- expression (does not need to be specified).
- The instance to stub.
- Property expression to stub.
-
- If you have an interface with an int property Value, you might
- stub it using the following straightforward call:
-
- var mock = new Mock<IHaveValue>();
- mock.Stub(v => v.Value);
-
- After the Stub call has been issued, setting and
- retrieving the object value will behave as expected:
-
- IHaveValue v = mock.Object;
-
- v.Value = 5;
- Assert.Equal(5, v.Value);
-
-
-
-
-
- Specifies that the given property should have stub behavior,
- meaning that setting its value will cause it to be saved and
- later returned when the property is requested. This overload
- allows setting the initial value for the property.
-
- Mocked type, inferred from the object
- where this method is being applied (does not need to be specified).
- Type of the property, inferred from the property
- expression (does not need to be specified).
- The instance to stub.
- Property expression to stub.
- Initial value for the property.
-
- If you have an interface with an int property Value, you might
- stub it using the following straightforward call:
-
- var mock = new Mock<IHaveValue>();
- mock.Stub(v => v.Value, 5);
-
- After the Stub call has been issued, setting and
- retrieving the object value will behave as expected:
-
- IHaveValue v = mock.Object;
- // Initial value was stored
- Assert.Equal(5, v.Value);
-
- // New value set which changes the initial value
- v.Value = 6;
- Assert.Equal(6, v.Value);
-
-
-
-
-
- Stubs all properties on the mock, setting the default value to
- the one generated as specified by the
- property.
-
- Mocked type, typically omitted as it can be inferred from the mock argument.
- The mock to stub.
-
- If the mock is set to ,
- the mocked default values will also be stubbed recursively.
-
-
-
-
diff --git a/lib/tests/ServiceStack.Common.Tests.dll b/lib/tests/ServiceStack.Common.Tests.dll
deleted file mode 100644
index 5d74477e..00000000
Binary files a/lib/tests/ServiceStack.Common.Tests.dll and /dev/null differ
diff --git a/lib/tests/nunit.framework.dll b/lib/tests/nunit.framework.dll
deleted file mode 100644
index 2729ddf2..00000000
Binary files a/lib/tests/nunit.framework.dll and /dev/null differ
diff --git a/lib/tests/nunit.framework.xml b/lib/tests/nunit.framework.xml
deleted file mode 100644
index 911ebf8b..00000000
--- a/lib/tests/nunit.framework.xml
+++ /dev/null
@@ -1,5622 +0,0 @@
-
-
-
- nunit.framework
-
-
-
-
- EmptyStringConstraint tests whether a string is empty.
-
-
-
-
- EmptyConstraint tests a whether a string or collection is empty,
- postponing the decision about which test is applied until the
- type of the actual argument is known.
-
-
-
-
- The Constraint class is the base of all built-in or
- user-defined constraints in NUnit. It provides the operator
- overloads used to combine constraints.
-
-
-
-
- Static UnsetObject used to detect derived constraints
- failing to set the actual value.
-
-
-
-
- If true, all string comparisons will ignore case
-
-
-
-
- If true, strings in error messages will be clipped
-
-
-
-
- If true, arrays will be treated as collections, allowing
- those of different dimensions to be compared
-
-
-
-
- If non-zero, equality comparisons within the specified
- tolerance will succeed.
-
-
-
-
- IComparer object used in comparisons for some constraints.
-
-
-
-
- The actual value being tested against a constraint
-
-
-
-
- Flag the constraint to use a tolerance when determining equality.
- Currently only used for doubles and floats.
-
- Tolerance to be used
- Self.
-
-
-
- Flag the constraint to use the supplied IComparer object.
-
- The IComparer object to use.
- Self.
-
-
-
- Write the failure message to the MessageWriter provided
- as an argument. The default implementation simply passes
- the constraint and the actual value to the writer, which
- then displays the constraint description and the value.
-
- Constraints that need to provide additional details,
- such as where the error occured can override this.
-
- The MessageWriter on which to display the message
-
-
-
- Test whether the constraint is satisfied by a given value
-
- The value to be tested
- True for success, false for failure
-
-
-
- Write the constraint description to a MessageWriter
-
- The writer on which the description is displayed
-
-
-
- Write the actual value for a failing constraint test to a
- MessageWriter. The default implementation simply writes
- the raw value of actual, leaving it to the writer to
- perform any formatting.
-
- The writer on which the actual value is displayed
-
-
-
- This operator creates a constraint that is satisfied only if both
- argument constraints are satisfied.
-
-
-
-
- This operator creates a constraint that is satisfied if either
- of the argument constraints is satisfied.
-
-
-
-
- This operator creates a constraint that is satisfied if the
- argument constraint is not satisfied.
-
-
-
-
- Flag the constraint to ignore case and return self.
-
-
-
-
- Flag the constraint to suppress string clipping
- and return self.
-
-
-
-
- Flag the constraint to compare arrays as collections
- and return self.
-
-
-
-
- Class used to detect any derived constraints
- that fail to set the actual value in their
- Matches override.
-
-
-
-
- Test whether the constraint is satisfied by a given value
-
- The value to be tested
- True for success, false for failure
-
-
-
- Write the constraint description to a MessageWriter
-
- The writer on which the description is displayed
-
-
-
- Test whether the constraint is satisfied by a given value
-
- The value to be tested
- True for success, false for failure
-
-
-
- Write the constraint description to a MessageWriter
-
- The writer on which the description is displayed
-
-
-
- SubstringConstraint can test whether a string contains
- the expected substring.
-
-
-
-
- Initializes a new instance of the class.
-
- The expected.
-
-
-
- Test whether the constraint is satisfied by a given value
-
- The value to be tested
- True for success, false for failure
-
-
-
- Write the constraint description to a MessageWriter
-
- The writer on which the description is displayed
-
-
-
- StartsWithConstraint can test whether a string starts
- with an expected substring.
-
-
-
-
- Initializes a new instance of the class.
-
- The expected string
-
-
-
- Test whether the constraint is matched by the actual value.
- This is a template method, which calls the IsMatch method
- of the derived class.
-
-
-
-
-
-
- Write the constraint description to a MessageWriter
-
- The writer on which the description is displayed
-
-
-
- EndsWithConstraint can test whether a string ends
- with an expected substring.
-
-
-
-
- Initializes a new instance of the class.
-
- The expected string
-
-
-
- Test whether the constraint is matched by the actual value.
- This is a template method, which calls the IsMatch method
- of the derived class.
-
-
-
-
-
-
- Write the constraint description to a MessageWriter
-
- The writer on which the description is displayed
-
-
-
- RegexConstraint can test whether a string matches
- the pattern provided.
-
-
-
-
- Initializes a new instance of the class.
-
- The pattern.
-
-
-
- Test whether the constraint is satisfied by a given value
-
- The value to be tested
- True for success, false for failure
-
-
-
- Write the constraint description to a MessageWriter
-
- The writer on which the description is displayed
-
-
-
- ConstraintBuilder is used to resolve the Not and All properties,
- which serve as prefix operators for constraints. With the addition
- of an operand stack, And and Or could be supported, but we have
- left them out in favor of a simpler, more type-safe implementation.
- Use the & and | operator overloads to combine constraints.
-
-
-
-
- Implicitly convert ConstraintBuilder to an actual Constraint
- at the point where the syntax demands it.
-
-
-
-
-
-
- Resolves the chain of constraints using an
- EqualConstraint as base.
-
-
-
-
- Resolves the chain of constraints using a
- SameAsConstraint as base.
-
-
-
-
- Resolves the chain of constraints using a
- LessThanConstraint as base.
-
-
-
-
- Resolves the chain of constraints using a
- GreaterThanConstraint as base.
-
-
-
-
- Resolves the chain of constraints using a
- LessThanOrEqualConstraint as base.
-
-
-
-
- Resolves the chain of constraints using a
- LessThanOrEqualConstraint as base.
-
-
-
-
- Resolves the chain of constraints using a
- GreaterThanOrEqualConstraint as base.
-
-
-
-
- Resolves the chain of constraints using a
- GreaterThanOrEqualConstraint as base.
-
-
-
-
- Resolves the chain of constraints using an
- ExactTypeConstraint as base.
-
-
-
-
- Resolves the chain of constraints using an
- InstanceOfTypeConstraint as base.
-
-
-
-
- Resolves the chain of constraints using an
- AssignableFromConstraint as base.
-
-
-
-
- Resolves the chain of constraints using a
- ContainsConstraint as base. This constraint
- will, in turn, make use of the appropriate
- second-level constraint, depending on the
- type of the actual argument.
-
-
-
-
- Resolves the chain of constraints using a
- CollectionContainsConstraint as base.
-
- The expected object
-
-
-
- Resolves the chain of constraints using a
- StartsWithConstraint as base.
-
-
-
-
- Resolves the chain of constraints using a
- StringEndingConstraint as base.
-
-
-
-
- Resolves the chain of constraints using a
- StringMatchingConstraint as base.
-
-
-
-
- Resolves the chain of constraints using a
- CollectionEquivalentConstraint as base.
-
-
-
-
- Resolves the chain of constraints using a
- CollectionContainingConstraint as base.
-
-
-
-
- Resolves the chain of constraints using a
- CollectionSubsetConstraint as base.
-
-
-
-
- Resolves the chain of constraints using a
- PropertyConstraint as base
-
-
-
-
- Resolves the chain of constraints using a
- PropertyCOnstraint on Length as base
-
-
-
-
-
-
- Resolves the chain of constraints using a
- PropertyCOnstraint on Length as base
-
-
-
-
-
-
- Modifies the ConstraintBuilder by pushing a Prop operator on the
- ops stack and the name of the property on the opnds stack.
-
-
-
-
-
-
- Resolve a constraint that has been recognized by applying
- any pending operators and returning the resulting Constraint.
-
- A constraint that incorporates all pending operators
-
-
-
- Resolves the chain of constraints using
- EqualConstraint(null) as base.
-
-
-
-
- Resolves the chain of constraints using
- EqualConstraint(true) as base.
-
-
-
-
- Resolves the chain of constraints using
- EqualConstraint(false) as base.
-
-
-
-
- Resolves the chain of constraints using
- Is.NaN as base.
-
-
-
-
- Resolves the chain of constraints using
- Is.Empty as base.
-
-
-
-
- Resolves the chain of constraints using
- Is.Unique as base.
-
-
-
-
- Modifies the ConstraintBuilder by pushing a Not operator on the stack.
-
-
-
-
- Modifies the ConstraintBuilder by pushing a Not operator on the stack.
-
-
-
-
- Modifies the ConstraintBuilder by pushing an All operator on the stack.
-
-
-
-
- Modifies the ConstraintBuilder by pushing a Some operator on the stack.
-
-
-
-
- Modifies the constraint builder by pushing All and Not operators on the stack
-
-
-
-
- CollectionConstraint is the abstract base class for
- constraints that operate on collections.
-
-
-
-
- Test whether the constraint is satisfied by a given value
-
- The value to be tested
- True for success, false for failure
-
-
-
- Protected method to be implemented by derived classes
-
-
-
-
-
-
- CollectionTally counts (tallies) the number of
- occurences of each object in one or more enuerations.
-
-
-
-
- Construct a CollectionTally object from a collection
-
-
-
-
-
- Remove the counts for a collection from the tally,
- so long as their are sufficient items to remove.
- The tallies are not permitted to become negative.
-
- The collection to remove
- True if there were enough items to remove, otherwise false
-
-
-
- Test whether all the counts are equal to a given value
-
- The value to be looked for
- True if all counts are equal to the value, otherwise false
-
-
-
- Get the count of the number of times an object is present in the tally
-
-
-
-
- EmptyCollectionConstraint tests whether a colletion is empty.
-
-
-
-
- Check that the collection is empty
-
-
-
-
-
-
- Write the constraint description to a MessageWriter
-
-
-
-
-
- UniqueItemsConstraint tests whether all the items in a
- collection are unique.
-
-
-
-
- Check that all items are unique.
-
-
-
-
-
-
- Write a description of this constraint to a MessageWriter
-
-
-
-
-
- CollectionContainsConstraint is used to test whether a collection
- contains an expected object as a member.
-
-
-
-
- Construct a CollectionContainsConstraint
-
-
-
-
-
- Test whether the expected item is contained in the collection
-
-
-
-
-
-
- Write a descripton of the constraint to a MessageWriter
-
-
-
-
-
- CollectionEquivalentCOnstraint is used to determine whether two
- collections are equivalent.
-
-
-
-
- Construct a CollectionEquivalentConstraint
-
-
-
-
-
- Test whether two collections are equivalent
-
-
-
-
-
-
- Write a description of this constraint to a MessageWriter
-
-
-
-
-
- CollectionSubsetConstraint is used to determine whether
- one collection is a subset of another
-
-
-
-
- Construct a CollectionSubsetConstraint
-
- The collection that the actual value is expected to be a subset of
-
-
-
- Test whether the actual collection is a subset of
- the expected collection provided.
-
-
-
-
-
-
- Write a description of this constraint to a MessageWriter
-
-
-
-
-
- EqualConstraint is able to compare an actual value with the
- expected value provided in its constructor.
-
-
-
-
- Initializes a new instance of the class.
-
- The expected value.
-
-
-
- Test whether the constraint is satisfied by a given value
-
- The value to be tested
- True for success, false for failure
-
-
-
- Write a failure message. Overridden to provide custom
- failure messages for EqualConstraint.
-
- The MessageWriter to write to
-
-
-
- Write description of this constraint
-
- The MessageWriter to write to
-
-
-
- Helper method to compare two arrays
-
-
-
-
- Method to compare two DirectoryInfo objects
-
- first directory to compare
- second directory to compare
- true if equivalent, false if not
-
-
-
- Display the failure information for two collections that did not match.
-
- The MessageWriter on which to display
- The expected collection.
- The actual collection
- The depth of this failure in a set of nested collections
-
-
-
- Displays a single line showing the types and sizes of the expected
- and actual collections or arrays. If both are identical, the value is
- only shown once.
-
- The MessageWriter on which to display
- The expected collection or array
- The actual collection or array
- The indentation level for the message line
-
-
-
- Displays a single line showing the point in the expected and actual
- arrays at which the comparison failed. If the arrays have different
- structures or dimensions, both values are shown.
-
- The MessageWriter on which to display
- The expected array
- The actual array
- Index of the failure point in the underlying collections
- The indentation level for the message line
-
-
-
- Abstract base class used for prefixes
-
-
-
-
- The base constraint
-
-
-
-
- Construct given a base constraint
-
-
-
-
-
- Set all modifiers applied to the prefix into
- the base constraint before matching
-
-
-
-
- NotConstraint negates the effect of some other constraint
-
-
-
-
- Initializes a new instance of the class.
-
- The base constraint to be negated.
-
-
-
- Test whether the constraint is satisfied by a given value
-
- The value to be tested
- True for if the base constraint fails, false if it succeeds
-
-
-
- Write the constraint description to a MessageWriter
-
- The writer on which the description is displayed
-
-
-
- Write the actual value for a failing constraint test to a MessageWriter.
-
- The writer on which the actual value is displayed
-
-
-
- AllItemsConstraint applies another constraint to each
- item in a collection, succeeding if they all succeed.
-
-
-
-
- Construct an AllItemsConstraint on top of an existing constraint
-
-
-
-
-
- Apply the item constraint to each item in the collection,
- failing if any item fails.
-
-
-
-
-
-
- Write a description of this constraint to a MessageWriter
-
-
-
-
-
- SomeItemsConstraint applies another constraint to each
- item in a collection, succeeding if any of them succeeds.
-
-
-
-
- Construct a SomeItemsConstraint on top of an existing constraint
-
-
-
-
-
- Apply the item constraint to each item in the collection,
- failing if any item fails.
-
-
-
-
-
-
- Write a description of this constraint to a MessageWriter
-
-
-
-
-
- SomeItemsConstraint applies another constraint to each
- item in a collection, succeeding if any of them succeeds.
-
-
-
-
- Construct a SomeItemsConstraint on top of an existing constraint
-
-
-
-
-
- Apply the item constraint to each item in the collection,
- failing if any item fails.
-
-
-
-
-
-
- Write a description of this constraint to a MessageWriter
-
-
-
-
-
- SameAsConstraint tests whether an object is identical to
- the object passed to its constructor
-
-
-
-
- Initializes a new instance of the class.
-
- The expected object.
-
-
-
- Test whether the constraint is satisfied by a given value
-
- The value to be tested
- True for success, false for failure
-
-
-
- Write the constraint description to a MessageWriter
-
- The writer on which the description is displayed
-
-
-
- TypeConstraint is the abstract base for constraints
- that take a Type as their expected value.
-
-
-
-
- The expected Type used by the constraint
-
-
-
-
- Construct a TypeConstraint for a given Type
-
-
-
-
-
- Write the actual value for a failing constraint test to a
- MessageWriter. TypeCOnstraints override this method to write
- the name of the type.
-
- The writer on which the actual value is displayed
-
-
-
- ExactTypeConstraint is used to test that an object
- is of the exact type provided in the constructor
-
-
-
-
- Construct an ExactTypeConstraint for a given Type
-
-
-
-
-
- Test that an object is of the exact type specified
-
-
-
-
-
-
- Write the description of this constraint to a MessageWriter
-
-
-
-
-
- InstanceOfTypeConstraint is used to test that an object
- is of the same type provided or derived from it.
-
-
-
-
- Construct an InstanceOfTypeConstraint for the type provided
-
-
-
-
-
- Test whether an object is of the specified type or a derived type
-
-
-
-
-
-
- Write a description of this constraint to a MessageWriter
-
-
-
-
-
- AssignableFromConstraint is used to test that an object
- can be assigned from a given Type.
-
-
-
-
- Construct an AssignableFromConstraint for the type provided
-
-
-
-
-
- Test whether an object can be assigned from the specified type
-
-
-
-
-
-
- Write a description of this constraint to a MessageWriter
-
-
-
-
-
- Abstract base class for constraints that compare values to
- determine if one is greater than, equal to or less than
- the other.
-
-
-
-
- The value against which a comparison is to be made
-
-
-
-
- If true, less than returns success
-
-
-
-
- if true, equal returns success
-
-
-
-
- if true, greater than returns success
-
-
-
-
- The predicate used as a part of the description
-
-
-
-
- Initializes a new instance of the class.
-
- The value against which to make a comparison.
- if set to true less succeeds.
- if set to true equal succeeds.
- if set to true greater succeeds.
- String used in describing the constraint.
-
-
-
- Test whether the constraint is satisfied by a given value
-
- The value to be tested
- True for success, false for failure
-
-
-
- Write the constraint description to a MessageWriter
-
- The writer on which the description is displayed
-
-
-
- Tests whether a value is greater than the value supplied to its constructor
-
-
-
-
- Initializes a new instance of the class.
-
- The expected value.
-
-
-
- Tests whether a value is greater than or equal to the value supplied to its constructor
-
-
-
-
- Initializes a new instance of the class.
-
- The expected value.
-
-
-
- Tests whether a value is less than the value supplied to its constructor
-
-
-
-
- Initializes a new instance of the class.
-
- The expected value.
-
-
-
- Tests whether a value is less than or equal to the value supplied to its constructor
-
-
-
-
- Initializes a new instance of the class.
-
- The expected value.
-
-
-
- The Numerics class contains common operations on numeric values.
-
-
-
-
- Checks the type of the object, returning true if
- the object is a numeric type.
-
- The object to check
- true if the object is a numeric type
-
-
-
- Checks the type of the object, returning true if
- the object is a floating point numeric type.
-
- The object to check
- true if the object is a floating point numeric type
-
-
-
- Checks the type of the object, returning true if
- the object is a fixed point numeric type.
-
- The object to check
- true if the object is a fixed point numeric type
-
-
-
- Test two numeric values for equality, performing the usual numeric
- conversions and using a provided or default tolerance. If the value
- referred to by tolerance is null, this method may set it to a default.
-
- The expected value
- The actual value
- A reference to the numeric tolerance in effect
- True if the values are equal
-
-
-
- Compare two numeric values, performing the usual numeric conversions.
-
- The expected value
- The actual value
-
-
-
-
- ContainsConstraint tests a whether a string contains a substring
- or a collection contains an object. It postpones the decision of
- which test to use until the type of the actual argument is known.
- This allows testing whether a string is contained in a collection
- or as a substring of another string using the same syntax.
-
-
-
-
- Initializes a new instance of the class.
-
- The expected.
-
-
-
- Test whether the constraint is satisfied by a given value
-
- The value to be tested
- True for success, false for failure
-
-
-
- Write the constraint description to a MessageWriter
-
- The writer on which the description is displayed
-
-
-
- Summary description for PropertyConstraint.
-
-
-
-
- Initializes a new instance of the class.
-
- The name.
- The constraint to apply to the property.
-
-
-
- Test whether the constraint is satisfied by a given value
-
- The value to be tested
- True for success, false for failure
-
-
-
- Write the constraint description to a MessageWriter
-
- The writer on which the description is displayed
-
-
-
- Write the actual value for a failing constraint test to a
- MessageWriter. The default implementation simply writes
- the raw value of actual, leaving it to the writer to
- perform any formatting.
-
- The writer on which the actual value is displayed
-
-
-
- BinaryOperation is the abstract base of all constraints
- that combine two other constraints in some fashion.
-
-
-
-
- The first constraint being combined
-
-
-
-
- The second constraint being combined
-
-
-
-
- Construct a BinaryOperation from two other constraints
-
- The first constraint
- The second constraint
-
-
-
- AndConstraint succeeds only if both members succeed.
-
-
-
-
- Create an AndConstraint from two other constraints
-
- The first constraint
- The second constraint
-
-
-
- Apply both member constraints to an actual value, succeeding
- succeeding only if both of them succeed.
-
- The actual value
- True if the constraints both succeeded
-
-
-
- Write a description for this contraint to a MessageWriter
-
- The MessageWriter to receive the description
-
-
-
- OrConstraint succeeds if either member succeeds
-
-
-
-
- Create an OrConstraint from two other constraints
-
- The first constraint
- The second constraint
-
-
-
- Apply the member constraints to an actual value, succeeding
- succeeding as soon as one of them succeeds.
-
- The actual value
- True if either constraint succeeded
-
-
-
- Write a description for this contraint to a MessageWriter
-
- The MessageWriter to receive the description
-
-
-
- The Is class is a helper class with properties and methods
- that supply a number of constraints used in Asserts.
-
-
-
-
- Is.Null returns a static constraint that tests for null
-
-
-
-
- Is.True returns a static constraint that tests whether a value is true
-
-
-
-
- Is.False returns a static constraint that tests whether a value is false
-
-
-
-
- Is.NaN returns a static constraint that tests whether a value is an NaN
-
-
-
-
- Is.Empty returns a static constraint that tests whether a string or collection is empty
-
-
-
-
- Is.Unique returns a static constraint that tests whether a collection contains all unque items.
-
-
-
-
- Is.EqualTo returns a constraint that tests whether the
- actual value equals the supplied argument
-
-
-
-
-
-
- Is.SameAs returns a constraint that tests whether the
- actual value is the same object as the supplied argument.
-
-
-
-
-
-
- Is.GreaterThan returns a constraint that tests whether the
- actual value is greater than the suppled argument
-
-
-
-
- Is.GreaterThanOrEqualTo returns a constraint that tests whether the
- actual value is greater than or equal to the suppled argument
-
-
-
-
- Is.AtLeast is a synonym for Is.GreaterThanOrEqualTo
-
-
-
-
- Is.LessThan returns a constraint that tests whether the
- actual value is less than the suppled argument
-
-
-
-
- Is.LessThanOrEqualTo returns a constraint that tests whether the
- actual value is less than or equal to the suppled argument
-
-
-
-
- Is.AtMost is a synonym for Is.LessThanOrEqualTo
-
-
-
-
- Is.TypeOf returns a constraint that tests whether the actual
- value is of the exact type supplied as an argument.
-
-
-
-
- Is.InstanceOfType returns a constraint that tests whether
- the actual value is of the type supplied as an argument
- or a derived type.
-
-
-
-
- Is.AssignableFrom returns a constraint that tests whether
- the actual value is assignable from the type supplied as
- an argument.
-
-
-
-
-
-
- Is.EquivalentTo returns a constraint that tests whether
- the actual value is a collection containing the same
- elements as the collection supplied as an arument
-
-
-
-
- Is.SubsetOf returns a constraint that tests whether
- the actual value is a subset of the collection
- supplied as an arument
-
-
-
-
- Is.Not returns a ConstraintBuilder that negates
- the constraint that follows it.
-
-
-
-
- Is.All returns a ConstraintBuilder, which will apply
- the following constraint to all members of a collection,
- succeeding if all of them succeed. This property is
- a synonym for Has.AllItems.
-
-
-
-
- The Iz class is a synonym for Is intended for use in VB,
- which regards Is as a keyword.
-
-
-
-
- The Text class is a helper class with properties and methods
- that supply a number of constraints used with strings.
-
-
-
-
- Contains returns a constraint that succeeds if the actual
- value contains the substring supplied as an argument.
-
-
-
-
- DoesNotContain returns a constraint that fails if the actual
- value contains the substring supplied as an argument.
-
-
-
-
- StartsWith returns a constraint that succeeds if the actual
- value starts with the substring supplied as an argument.
-
-
-
-
- DoesNotStartWith returns a constraint that fails if the actual
- value starts with the substring supplied as an argument.
-
-
-
-
- EndsWith returns a constraint that succeeds if the actual
- value ends with the substring supplied as an argument.
-
-
-
-
- DoesNotEndWith returns a constraint that fails if the actual
- value ends with the substring supplied as an argument.
-
-
-
-
- Matches returns a constraint that succeeds if the actual
- value matches the pattern supplied as an argument.
-
-
-
-
-
-
- DoesNotMatch returns a constraint that failss if the actual
- value matches the pattern supplied as an argument.
-
-
-
-
-
-
- Text.All returns a ConstraintBuilder, which will apply
- the following constraint to all members of a collection,
- succeeding if all of them succeed.
-
-
-
-
- The List class is a helper class with properties and methods
- that supply a number of constraints used with lists and collections.
-
-
-
-
- List.Map returns a ListMapper, which can be used to map
- the original collection to another collection.
-
-
-
-
-
-
- ListMapper is used to transform a collection used as an actual argument
- producing another collection to be used in the assertion.
-
-
-
-
- Construct a ListMapper based on a collection
-
- The collection to be transformed
-
-
-
- Produces a collection containing all the values of a property
-
- The collection of property values
-
-
-
-
- Summary description for HasNoPrefixB.
-
-
-
-
- Returns a new ConstraintBuilder, which will apply the
- following constraint to a named property of the object
- being tested.
-
- The name of the property
-
-
-
- Returns a new PropertyConstraint checking for the
- existence of a particular property value.
-
- The name of the property to look for
- The expected value of the property
-
-
-
- Returns a new PropertyConstraint for the Length property
-
-
-
-
-
-
- Returns a new PropertyConstraint or the Count property
-
-
-
-
-
-
- Returns a new CollectionContainsConstraint checking for the
- presence of a particular object in the collection.
-
- The expected object
-
-
-
- Has.No returns a ConstraintBuilder that negates
- the constraint that follows it.
-
-
-
-
- Has.AllItems returns a ConstraintBuilder, which will apply
- the following constraint to all members of a collection,
- succeeding if all of them succeed.
-
-
-
-
- Has.Some returns a ConstraintBuilder, which will apply
- the following constraint to all members of a collection,
- succeeding if any of them succeed. It is a synonym
- for Has.Item.
-
-
-
-
- Has.None returns a ConstraintBuilder, which will apply
- the following constraint to all members of a collection,
- succeeding only if none of them succeed.
-
-
-
-
- Nested class that allows us to restrict the number
- of key words that may appear after Has.No.
-
-
-
-
- Return a ConstraintBuilder conditioned to apply
- the following constraint to a property.
-
- The property name
- A ConstraintBuilder
-
-
-
- Return a Constraint that succeeds if the expected object is
- not contained in a collection.
-
- The expected object
- A Constraint
-
-
-
- The Assert class contains a collection of static methods that
- implement the most common assertions used in NUnit.
-
-
-
-
- We don't actually want any instances of this object, but some people
- like to inherit from it to add other static methods. Hence, the
- protected constructor disallows any instances of this object.
-
-
-
-
- The Equals method throws an AssertionException. This is done
- to make sure there is no mistake by calling this function.
-
-
-
-
-
-
- override the default ReferenceEquals to throw an AssertionException. This
- implementation makes sure there is no mistake in calling this function
- as part of Assert.
-
-
-
-
-
-
- Asserts that a condition is true. If the condition is false the method throws
- an .
-
- The evaluated condition
- The message to display if the condition is false
- Arguments to be used in formatting the message
-
-
-
- Asserts that a condition is true. If the condition is false the method throws
- an .
-
- The evaluated condition
- The message to display if the condition is false
-
-
-
- Asserts that a condition is true. If the condition is false the method throws
- an .
-
- The evaluated condition
-
-
-
- Asserts that a condition is false. If the condition is true the method throws
- an .
-
- The evaluated condition
- The message to display if the condition is true
- Arguments to be used in formatting the message
-
-
-
- Asserts that a condition is false. If the condition is true the method throws
- an .
-
- The evaluated condition
- The message to display if the condition is true
-
-
-
- Asserts that a condition is false. If the condition is true the method throws
- an .
-
- The evaluated condition
-
-
-
- Verifies that the object that is passed in is not equal to null
- If the object is null then an
- is thrown.
-
- The object that is to be tested
- The message to be displayed when the object is null
- Arguments to be used in formatting the message
-
-
-
- Verifies that the object that is passed in is not equal to null
- If the object is null then an
- is thrown.
-
- The object that is to be tested
- The message to be displayed when the object is null
-
-
-
- Verifies that the object that is passed in is not equal to null
- If the object is null then an
- is thrown.
-
- The object that is to be tested
-
-
-
- Verifies that the object that is passed in is equal to null
- If the object is not null then an
- is thrown.
-
- The object that is to be tested
- The message to be displayed when the object is not null
- Arguments to be used in formatting the message
-
-
-
- Verifies that the object that is passed in is equal to null
- If the object is not null then an
- is thrown.
-
- The object that is to be tested
- The message to be displayed when the object is not null
-
-
-
- Verifies that the object that is passed in is equal to null
- If the object is not null null then an
- is thrown.
-
- The object that is to be tested
-
-
-
- Verifies that the double is passed is an NaN value.
- If the object is not NaN then an
- is thrown.
-
- The value that is to be tested
- The message to be displayed when the object is not null
- Arguments to be used in formatting the message
-
-
-
- Verifies that the double is passed is an NaN value.
- If the object is not NaN then an
- is thrown.
-
- The object that is to be tested
- The message to be displayed when the object is not null
-
-
-
- Verifies that the double is passed is an NaN value.
- If the object is not NaN then an
- is thrown.
-
- The object that is to be tested
-
-
-
- Assert that a string is empty - that is equal to string.Empty
-
- The string to be tested
- The message to be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Assert that a string is empty - that is equal to string.Emtpy
-
- The string to be tested
- The message to be displayed on failure
-
-
-
- Assert that a string is empty - that is equal to string.Emtpy
-
- The string to be tested
-
-
-
- Assert that an array, list or other collection is empty
-
- An array, list or other collection implementing ICollection
- The message to be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Assert that an array, list or other collection is empty
-
- An array, list or other collection implementing ICollection
- The message to be displayed on failure
-
-
-
- Assert that an array,list or other collection is empty
-
- An array, list or other collection implementing ICollection
-
-
-
- Assert that a string is not empty - that is not equal to string.Empty
-
- The string to be tested
- The message to be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Assert that a string is empty - that is equal to string.Emtpy
-
- The string to be tested
- The message to be displayed on failure
-
-
-
- Assert that a string is empty - that is equal to string.Emtpy
-
- The string to be tested
-
-
-
- Assert that an array, list or other collection is empty
-
- An array, list or other collection implementing ICollection
- The message to be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Assert that an array, list or other collection is empty
-
- An array, list or other collection implementing ICollection
- The message to be displayed on failure
-
-
-
- Assert that an array,list or other collection is empty
-
- An array, list or other collection implementing ICollection
-
-
-
- Asserts that an object may be assigned a value of a given Type.
-
- The expected Type.
- The object under examination
-
-
-
- Asserts that an object may be assigned a value of a given Type.
-
- The expected Type.
- The object under examination
- The messge to display in case of failure
-
-
-
- Asserts that an object may be assigned a value of a given Type.
-
- The expected Type.
- The object under examination
- The message to display in case of failure
- Array of objects to be used in formatting the message
-
-
-
- Asserts that an object may not be assigned a value of a given Type.
-
- The expected Type.
- The object under examination
-
-
-
- Asserts that an object may not be assigned a value of a given Type.
-
- The expected Type.
- The object under examination
- The messge to display in case of failure
-
-
-
- Asserts that an object may not be assigned a value of a given Type.
-
- The expected Type.
- The object under examination
- The message to display in case of failure
- Array of objects to be used in formatting the message
-
-
-
- Asserts that an object is an instance of a given type.
-
- The expected Type
- The object being examined
-
-
-
- Asserts that an object is an instance of a given type.
-
- The expected Type
- The object being examined
- A message to display in case of failure
-
-
-
- Asserts that an object is an instance of a given type.
-
- The expected Type
- The object being examined
- A message to display in case of failure
- An array of objects to be used in formatting the message
-
-
-
- Asserts that an object is not an instance of a given type.
-
- The expected Type
- The object being examined
-
-
-
- Asserts that an object is not an instance of a given type.
-
- The expected Type
- The object being examined
- A message to display in case of failure
-
-
-
- Asserts that an object is not an instance of a given type.
-
- The expected Type
- The object being examined
- A message to display in case of failure
- An array of objects to be used in formatting the message
-
-
-
- Verifies that two ints are equal. If they are not, then an
- is thrown.
-
- The expected value
- The actual value
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Verifies that two ints are equal. If they are not, then an
- is thrown.
-
- The expected value
- The actual value
- The message that will be displayed on failure
-
-
-
- Verifies that two ints are equal. If they are not, then an
- is thrown.
-
- The expected value
- The actual value
-
-
-
- Verifies that two longs are equal. If they are not, then an
- is thrown.
-
- The expected value
- The actual value
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Verifies that two longs are equal. If they are not, then an
- is thrown.
-
- The expected value
- The actual value
- The message that will be displayed on failure
-
-
-
- Verifies that two longs are equal. If they are not, then an
- is thrown.
-
- The expected value
- The actual value
-
-
-
- Verifies that two uints are equal. If they are not, then an
- is thrown.
-
- The expected value
- The actual value
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Verifies that two uints are equal. If they are not, then an
- is thrown.
-
- The expected value
- The actual value
- The message that will be displayed on failure
-
-
-
- Verifies that two uints are equal. If they are not, then an
- is thrown.
-
- The expected value
- The actual value
-
-
-
- Verifies that two ulongs are equal. If they are not, then an
- is thrown.
-
- The expected value
- The actual value
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Verifies that two ulongs are equal. If they are not, then an
- is thrown.
-
- The expected value
- The actual value
- The message that will be displayed on failure
-
-
-
- Verifies that two ulongs are equal. If they are not, then an
- is thrown.
-
- The expected value
- The actual value
-
-
-
- Verifies that two decimals are equal. If they are not, then an
- is thrown.
-
- The expected value
- The actual value
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Verifies that two decimal are equal. If they are not, then an
- is thrown.
-
- The expected value
- The actual value
- The message that will be displayed on failure
-
-
-
- Verifies that two decimals are equal. If they are not, then an
- is thrown.
-
- The expected value
- The actual value
-
-
-
- Verifies that two doubles are equal considering a delta. If the
- expected value is infinity then the delta value is ignored. If
- they are not equals then an is
- thrown.
-
- The expected value
- The actual value
- The maximum acceptable difference between the
- the expected and the actual
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Verifies that two doubles are equal considering a delta. If the
- expected value is infinity then the delta value is ignored. If
- they are not equals then an is
- thrown.
-
- The expected value
- The actual value
- The maximum acceptable difference between the
- the expected and the actual
- The message that will be displayed on failure
-
-
-
- Verifies that two doubles are equal considering a delta. If the
- expected value is infinity then the delta value is ignored. If
- they are not equals then an is
- thrown.
-
- The expected value
- The actual value
- The maximum acceptable difference between the
- the expected and the actual
-
-
-
- Verifies that two floats are equal considering a delta. If the
- expected value is infinity then the delta value is ignored. If
- they are not equals then an is
- thrown.
-
- The expected value
- The actual value
- The maximum acceptable difference between the
- the expected and the actual
- The message displayed upon failure
- Arguments to be used in formatting the message
-
-
-
- Verifies that two floats are equal considering a delta. If the
- expected value is infinity then the delta value is ignored. If
- they are not equals then an is
- thrown.
-
- The expected value
- The actual value
- The maximum acceptable difference between the
- the expected and the actual
- The message displayed upon failure
-
-
-
- Verifies that two floats are equal considering a delta. If the
- expected value is infinity then the delta value is ignored. If
- they are not equals then an is
- thrown.
-
- The expected value
- The actual value
- The maximum acceptable difference between the
- the expected and the actual
-
-
-
- Verifies that two objects are equal. Two objects are considered
- equal if both are null, or if both have the same value. All
- non-numeric types are compared by using the Equals method.
- Arrays are compared by comparing each element using the same rules.
- If they are not equal an is thrown.
-
- The value that is expected
- The actual value
- The message to display if objects are not equal
- Arguments to be used in formatting the message
-
-
-
- Verifies that two objects are equal. Two objects are considered
- equal if both are null, or if both have the same value. All
- non-numeric types are compared by using the Equals method.
- If they are not equal an is thrown.
-
- The value that is expected
- The actual value
- The message to display if objects are not equal
-
-
-
- Verifies that two objects are equal. Two objects are considered
- equal if both are null, or if both have the same value. All
- non-numeric types are compared by using the Equals method.
- If they are not equal an is thrown.
-
- The value that is expected
- The actual value
-
-
-
- Asserts that two objects are not equal. If they are equal
- an is thrown.
-
- The expected object
- The actual object
- The message to be displayed when the two objects are the same object.
- Arguments to be used in formatting the message
-
-
-
- Asserts that two objects are not equal. If they are equal
- an is thrown.
-
- The expected object
- The actual object
- The message to be displayed when the objects are the same
-
-
-
- Asserts that two objects are not equal. If they are equal
- an is thrown.
-
- The expected object
- The actual object
-
-
-
- Asserts that two ints are not equal. If they are equal
- an is thrown.
-
- The expected object
- The actual object
- The message to be displayed when the two objects are the same object.
- Arguments to be used in formatting the message
-
-
-
- Asserts that two ints are not equal. If they are equal
- an is thrown.
-
- The expected object
- The actual object
- The message to be displayed when the objects are the same
-
-
-
- Asserts that two ints are not equal. If they are equal
- an is thrown.
-
- The expected object
- The actual object
-
-
-
- Asserts that two longss are not equal. If they are equal
- an is thrown.
-
- The expected object
- The actual object
- The message to be displayed when the two objects are the same object.
- Arguments to be used in formatting the message
-
-
-
- Asserts that two longs are not equal. If they are equal
- an is thrown.
-
- The expected object
- The actual object
- The message to be displayed when the objects are the same
-
-
-
- Asserts that two longs are not equal. If they are equal
- an is thrown.
-
- The expected object
- The actual object
-
-
-
- Asserts that two uints are not equal. If they are equal
- an is thrown.
-
- The expected object
- The actual object
- The message to be displayed when the two objects are the same object.
- Arguments to be used in formatting the message
-
-
-
- Asserts that two uints are not equal. If they are equal
- an is thrown.
-
- The expected object
- The actual object
- The message to be displayed when the objects are the same
-
-
-
- Asserts that two uints are not equal. If they are equal
- an is thrown.
-
- The expected object
- The actual object
-
-
-
- Asserts that two ulongs are not equal. If they are equal
- an is thrown.
-
- The expected object
- The actual object
- The message to be displayed when the two objects are the same object.
- Arguments to be used in formatting the message
-
-
-
- Asserts that two ulongs are not equal. If they are equal
- an is thrown.
-
- The expected object
- The actual object
- The message to be displayed when the objects are the same
-
-
-
- Asserts that two ulong are not equal. If they are equal
- an is thrown.
-
- The expected object
- The actual object
-
-
-
- Asserts that two decimals are not equal. If they are equal
- an is thrown.
-
- The expected object
- The actual object
- The message to be displayed when the two objects are the same object.
- Arguments to be used in formatting the message
-
-
-
- Asserts that two decimals are not equal. If they are equal
- an is thrown.
-
- The expected object
- The actual object
- The message to be displayed when the objects are the same
-
-
-
- Asserts that two decimals are not equal. If they are equal
- an is thrown.
-
- The expected object
- The actual object
-
-
-
- Asserts that two floats are not equal. If they are equal
- an is thrown.
-
- The expected object
- The actual object
- The message to be displayed when the two objects are the same object.
- Arguments to be used in formatting the message
-
-
-
- Asserts that two floats are not equal. If they are equal
- an is thrown.
-
- The expected object
- The actual object
- The message to be displayed when the objects are the same
-
-
-
- Asserts that two floats are not equal. If they are equal
- an is thrown.
-
- The expected object
- The actual object
-
-
-
- Asserts that two doubles are not equal. If they are equal
- an is thrown.
-
- The expected object
- The actual object
- The message to be displayed when the two objects are the same object.
- Arguments to be used in formatting the message
-
-
-
- Asserts that two doubles are not equal. If they are equal
- an is thrown.
-
- The expected object
- The actual object
- The message to be displayed when the objects are the same
-
-
-
- Asserts that two doubles are not equal. If they are equal
- an is thrown.
-
- The expected object
- The actual object
-
-
-
- Asserts that two objects refer to the same object. If they
- are not the same an is thrown.
-
- The expected object
- The actual object
- The message to be displayed when the two objects are not the same object.
- Arguments to be used in formatting the message
-
-
-
- Asserts that two objects refer to the same object. If they
- are not the same an is thrown.
-
- The expected object
- The actual object
- The message to be displayed when the object is null
-
-
-
- Asserts that two objects refer to the same object. If they
- are not the same an is thrown.
-
- The expected object
- The actual object
-
-
-
- Asserts that two objects do not refer to the same object. If they
- are the same an is thrown.
-
- The expected object
- The actual object
- The message to be displayed when the two objects are the same object.
- Arguments to be used in formatting the message
-
-
-
- Asserts that two objects do not refer to the same object. If they
- are the same an is thrown.
-
- The expected object
- The actual object
- The message to be displayed when the objects are the same
-
-
-
- Asserts that two objects do not refer to the same object. If they
- are the same an is thrown.
-
- The expected object
- The actual object
-
-
-
- Verifies that the first value is greater than the second
- value. If they are not, then an
- is thrown.
-
- The first value, expected to be greater
- The second value, expected to be less
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Verifies that the first value is greater than the second
- value. If they are not, then an
- is thrown.
-
- The first value, expected to be greater
- The second value, expected to be less
- The message that will be displayed on failure
-
-
-
- Verifies that the first value is greater than the second
- value. If they are not, then an
- is thrown.
-
- The first value, expected to be greater
- The second value, expected to be less
-
-
-
- Verifies that the first value is greater than the second
- value. If they are not, then an
- is thrown.
-
- The first value, expected to be greater
- The second value, expected to be less
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Verifies that the first value is greater than the second
- value. If they are not, then an
- is thrown.
-
- The first value, expected to be greater
- The second value, expected to be less
- The message that will be displayed on failure
-
-
-
- Verifies that the first value is greater than the second
- value. If they are not, then an
- is thrown.
-
- The first value, expected to be greater
- The second value, expected to be less
-
-
-
- Verifies that the first value is greater than the second
- value. If they are not, then an
- is thrown.
-
- The first value, expected to be greater
- The second value, expected to be less
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Verifies that the first value is greater than the second
- value. If they are not, then an
- is thrown.
-
- The first value, expected to be greater
- The second value, expected to be less
- The message that will be displayed on failure
-
-
-
- Verifies that the first value is greater than the second
- value. If they are not, then an
- is thrown.
-
- The first value, expected to be greater
- The second value, expected to be less
-
-
-
- Verifies that the first value is greater than the second
- value. If they are not, then an
- is thrown.
-
- The first value, expected to be greater
- The second value, expected to be less
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Verifies that the first value is greater than the second
- value. If they are not, then an
- is thrown.
-
- The first value, expected to be greater
- The second value, expected to be less
- The message that will be displayed on failure
-
-
-
- Verifies that the first value is greater than the second
- value. If they are not, then an
- is thrown.
-
- The first value, expected to be greater
- The second value, expected to be less
-
-
-
- Verifies that the first value is greater than the second
- value. If they are not, then an
- is thrown.
-
- The first value, expected to be greater
- The second value, expected to be less
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Verifies that the first value is greater than the second
- value. If they are not, then an
- is thrown.
-
- The first value, expected to be greater
- The second value, expected to be less
- The message that will be displayed on failure
-
-
-
- Verifies that the first value is greater than the second
- value. If they are not, then an
- is thrown.
-
- The first value, expected to be greater
- The second value, expected to be less
-
-
-
- Verifies that the first value is greater than the second
- value. If they are not, then an
- is thrown.
-
- The first value, expected to be greater
- The second value, expected to be less
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Verifies that the first value is greater than the second
- value. If they are not, then an
- is thrown.
-
- The first value, expected to be greater
- The second value, expected to be less
- The message that will be displayed on failure
-
-
-
- Verifies that the first value is greater than the second
- value. If they are not, then an
- is thrown.
-
- The first value, expected to be greater
- The second value, expected to be less
-
-
-
- Verifies that the first value is greater than the second
- value. If they are not, then an
- is thrown.
-
- The first value, expected to be greater
- The second value, expected to be less
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Verifies that the first value is greater than the second
- value. If they are not, then an
- is thrown.
-
- The first value, expected to be greater
- The second value, expected to be less
- The message that will be displayed on failure
-
-
-
- Verifies that the first value is greater than the second
- value. If they are not, then an
- is thrown.
-
- The first value, expected to be greater
- The second value, expected to be less
-
-
-
- Verifies that the first value is greater than the second
- value. If they are not, then an
- is thrown.
-
- The first value, expected to be greater
- The second value, expected to be less
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Verifies that the first value is greater than the second
- value. If they are not, then an
- is thrown.
-
- The first value, expected to be greater
- The second value, expected to be less
- The message that will be displayed on failure
-
-
-
- Verifies that the first value is greater than the second
- value. If they are not, then an
- is thrown.
-
- The first value, expected to be greater
- The second value, expected to be less
-
-
-
- Verifies that the first value is less than the second
- value. If it is not, then an
- is thrown.
-
- The first value, expected to be less
- The second value, expected to be greater
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Verifies that the first value is less than the second
- value. If it is not, then an
- is thrown.
-
- The first value, expected to be less
- The second value, expected to be greater
- The message that will be displayed on failure
-
-
-
- Verifies that the first value is less than the second
- value. If it is not, then an
- is thrown.
-
- The first value, expected to be less
- The second value, expected to be greater
-
-
-
- Verifies that the first value is less than the second
- value. If it is not, then an
- is thrown.
-
- The first value, expected to be less
- The second value, expected to be greater
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Verifies that the first value is less than the second
- value. If it is not, then an
- is thrown.
-
- The first value, expected to be less
- The second value, expected to be greater
- The message that will be displayed on failure
-
-
-
- Verifies that the first value is less than the second
- value. If it is not, then an
- is thrown.
-
- The first value, expected to be less
- The second value, expected to be greater
-
-
-
- Verifies that the first value is less than the second
- value. If it is not, then an
- is thrown.
-
- The first value, expected to be less
- The second value, expected to be greater
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Verifies that the first value is less than the second
- value. If it is not, then an
- is thrown.
-
- The first value, expected to be less
- The second value, expected to be greater
- The message that will be displayed on failure
-
-
-
- Verifies that the first value is less than the second
- value. If it is not, then an
- is thrown.
-
- The first value, expected to be less
- The second value, expected to be greater
-
-
-
- Verifies that the first value is less than the second
- value. If it is not, then an
- is thrown.
-
- The first value, expected to be less
- The second value, expected to be greater
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Verifies that the first value is less than the second
- value. If it is not, then an
- is thrown.
-
- The first value, expected to be less
- The second value, expected to be greater
- The message that will be displayed on failure
-
-
-
- Verifies that the first value is less than the second
- value. If it is not, then an
- is thrown.
-
- The first value, expected to be less
- The second value, expected to be greater
-
-
-
- Verifies that the first value is less than the second
- value. If it is not, then an
- is thrown.
-
- The first value, expected to be less
- The second value, expected to be greater
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Verifies that the first value is less than the second
- value. If it is not, then an
- is thrown.
-
- The first value, expected to be less
- The second value, expected to be greater
- The message that will be displayed on failure
-
-
-
- Verifies that the first value is less than the second
- value. If it is not, then an
- is thrown.
-
- The first value, expected to be less
- The second value, expected to be greater
-
-
-
- Verifies that the first value is less than the second
- value. If it is not, then an
- is thrown.
-
- The first value, expected to be less
- The second value, expected to be greater
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Verifies that the first value is less than the second
- value. If it is not, then an
- is thrown.
-
- The first value, expected to be less
- The second value, expected to be greater
- The message that will be displayed on failure
-
-
-
- Verifies that the first value is less than the second
- value. If it is not, then an
- is thrown.
-
- The first value, expected to be less
- The second value, expected to be greater
-
-
-
- Verifies that the first value is less than the second
- value. If it is not, then an
- is thrown.
-
- The first value, expected to be less
- The second value, expected to be greater
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Verifies that the first value is less than the second
- value. If it is not, then an
- is thrown.
-
- The first value, expected to be less
- The second value, expected to be greater
- The message that will be displayed on failure
-
-
-
- Verifies that the first value is less than the second
- value. If it is not, then an
- is thrown.
-
- The first value, expected to be less
- The second value, expected to be greater
-
-
-
- Verifies that the first value is less than the second
- value. If it is not, then an
- is thrown.
-
- The first value, expected to be less
- The second value, expected to be greater
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Verifies that the first value is less than the second
- value. If it is not, then an
- is thrown.
-
- The first value, expected to be less
- The second value, expected to be greater
- The message that will be displayed on failure
-
-
-
- Verifies that the first value is less than the second
- value. If it is not, then an
- is thrown.
-
- The first value, expected to be less
- The second value, expected to be greater
-
-
-
- Asserts that an object is contained in a list.
-
- The expected object
- The list to be examined
- The message to display in case of failure
- Arguments used in formatting the message
-
-
-
- Asserts that an object is contained in a list.
-
- The expected object
- The list to be examined
- The message to display in case of failure
-
-
-
- Asserts that an object is contained in a list.
-
- The expected object
- The list to be examined
-
-
-
- Throws an with the message and arguments
- that are passed in. This is used by the other Assert functions.
-
- The message to initialize the with.
- Arguments to be used in formatting the message
-
-
-
- Throws an with the message that is
- passed in. This is used by the other Assert functions.
-
- The message to initialize the with.
-
-
-
- Throws an .
- This is used by the other Assert functions.
-
-
-
-
- Throws an with the message and arguments
- that are passed in. This causes the test to be reported as ignored.
-
- The message to initialize the with.
- Arguments to be used in formatting the message
-
-
-
- Throws an with the message that is
- passed in. This causes the test to be reported as ignored.
-
- The message to initialize the with.
-
-
-
- Throws an .
- This causes the test to be reported as ignored.
-
-
-
-
- NOTE: The use of asserters for extending NUnit has
- now been replaced by the use of constraints. This
- method is marked obsolete.
-
- Test the condition asserted by an asserter and throw
- an assertion exception using provided message on failure.
-
- An object that implements IAsserter
-
-
-
- Apply a constraint to an actual value, succeeding if the constraint
- is satisfied and throwing an assertion exception on failure.
-
- A Constraint to be applied
- The actual value to test
-
-
-
- Apply a constraint to an actual value, succeedingt if the constraint
- is satisfied and throwing an assertion exception on failure.
-
- A Constraint to be applied
- The actual value to test
- The message that will be displayed on failure
-
-
-
- Apply a constraint to an actual value, succeedingt if the constraint
- is satisfied and throwing an assertion exception on failure.
-
- A Constraint to be applied
- The actual value to test
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Asserts that a condition is true. If the condition is false the method throws
- an .
-
- The evaluated condition
- The message to display if the condition is false
- Arguments to be used in formatting the message
-
-
-
- Asserts that a condition is true. If the condition is false the method throws
- an .
-
- The evaluated condition
- The message to display if the condition is false
-
-
-
- Asserts that a condition is true. If the condition is false the method throws
- an .
-
- The evaluated condition
-
-
-
- Verifies that the first value is greater than or equal to the second
- value. If they are not, then an
- is thrown.
-
- The first value, expected to be greater
- The second value, expected to be less
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Verifies that the first value is greater than or equal to the second
- value. If they are not, then an
- is thrown.
-
- The first value, expected to be greater
- The second value, expected to be less
- The message that will be displayed on failure
-
-
-
- Verifies that the first value is greater than or equal to the second
- value. If they are not, then an
- is thrown.
-
- The first value, expected to be greater
- The second value, expected to be less
-
-
-
- Verifies that the first value is greater than or equal to the second
- value. If they are not, then an
- is thrown.
-
- The first value, expected to be greater
- The second value, expected to be less
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Verifies that the first value is greater than or equal to the second
- value. If they are not, then an
- is thrown.
-
- The first value, expected to be greater
- The second value, expected to be less
- The message that will be displayed on failure
-
-
-
- Verifies that the first value is greater or equal to than the second
- value. If they are not, then an
- is thrown.
-
- The first value, expected to be greater
- The second value, expected to be less
-
-
-
- Verifies that the first value is greater than or equal to the second
- value. If they are not, then an
- is thrown.
-
- The first value, expected to be greater
- The second value, expected to be less
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Verifies that the first value is greater than or equal to the second
- value. If they are not, then an
- is thrown.
-
- The first value, expected to be greater
- The second value, expected to be less
- The message that will be displayed on failure
-
-
-
- Verifies that the first value is greater or equal to than the second
- value. If they are not, then an
- is thrown.
-
- The first value, expected to be greater
- The second value, expected to be less
-
-
-
- Verifies that the first value is greater than or equal to the second
- value. If they are not, then an
- is thrown.
-
- The first value, expected to be greater
- The second value, expected to be less
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Verifies that the first value is greater than or equal to the second
- value. If they are not, then an
- is thrown.
-
- The first value, expected to be greater
- The second value, expected to be less
- The message that will be displayed on failure
-
-
-
- Verifies that the first value is greater or equal to than the second
- value. If they are not, then an
- is thrown.
-
- The first value, expected to be greater
- The second value, expected to be less
-
-
-
- Verifies that the first value is greater than or equal to the second
- value. If they are not, then an
- is thrown.
-
- The first value, expected to be greater
- The second value, expected to be less
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Verifies that the first value is greater than or equal to the second
- value. If they are not, then an
- is thrown.
-
- The first value, expected to be greater
- The second value, expected to be less
- The message that will be displayed on failure
-
-
-
- Verifies that the first value is greater than or equal to the second
- value. If they are not, then an
- is thrown.
-
- The first value, expected to be greater
- The second value, expected to be less
-
-
-
- Verifies that the first value is greater than or equal to the second
- value. If they are not, then an
- is thrown.
-
- The first value, expected to be greater
- The second value, expected to be less
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Verifies that the first value is greater than or equal to the second
- value. If they are not, then an
- is thrown.
-
- The first value, expected to be greater
- The second value, expected to be less
- The message that will be displayed on failure
-
-
-
- Verifies that the first value is greater than or equal to the second
- value. If they are not, then an
- is thrown.
-
- The first value, expected to be greater
- The second value, expected to be less
-
-
-
- Verifies that the first value is greater than or equal to the second
- value. If they are not, then an
- is thrown.
-
- The first value, expected to be greater
- The second value, expected to be less
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Verifies that the first value is greater than or equal to the second
- value. If they are not, then an
- is thrown.
-
- The first value, expected to be greater
- The second value, expected to be less
- The message that will be displayed on failure
-
-
-
- Verifies that the first value is greater than or equal to the second
- value. If they are not, then an
- is thrown.
-
- The first value, expected to be greater
- The second value, expected to be less
-
-
-
- Verifies that the first value is greater than the second
- value. If they are not, then an
- is thrown.
-
- The first value, expected to be greater
- The second value, expected to be less
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Verifies that the first value is greater than the second
- value. If they are not, then an
- is thrown.
-
- The first value, expected to be greater
- The second value, expected to be less
- The message that will be displayed on failure
-
-
-
- Verifies that the first value is greater than the second
- value. If they are not, then an
- is thrown.
-
- The first value, expected to be greater
- The second value, expected to be less
-
-
-
- Verifies that the first value is less than or equal to the second
- value. If it is not, then an
- is thrown.
-
- The first value, expected to be less
- The second value, expected to be greater
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Verifies that the first value is less than or equal to the second
- value. If it is not, then an
- is thrown.
-
- The first value, expected to be less
- The second value, expected to be greater
- The message that will be displayed on failure
-
-
-
- Verifies that the first value is less than or equal to the second
- value. If it is not, then an
- is thrown.
-
- The first value, expected to be less
- The second value, expected to be greater
-
-
-
- Verifies that the first value is less than or equal to the second
- value. If it is not, then an
- is thrown.
-
- The first value, expected to be less
- The second value, expected to be greater
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Verifies that the first value is less than or equal to the second
- value. If it is not, then an
- is thrown.
-
- The first value, expected to be less
- The second value, expected to be greater
- The message that will be displayed on failure
-
-
-
- Verifies that the first value is less than or equal to the second
- value. If it is not, then an
- is thrown.
-
- The first value, expected to be less
- The second value, expected to be greater
-
-
-
- Verifies that the first value is less than or equal to the second
- value. If it is not, then an
- is thrown.
-
- The first value, expected to be less
- The second value, expected to be greater
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Verifies that the first value is less than or equal to the second
- value. If it is not, then an
- is thrown.
-
- The first value, expected to be less
- The second value, expected to be greater
- The message that will be displayed on failure
-
-
-
- Verifies that the first value is less than or equal to the second
- value. If it is not, then an
- is thrown.
-
- The first value, expected to be less
- The second value, expected to be greater
-
-
-
- Verifies that the first value is less than or equal to the second
- value. If it is not, then an
- is thrown.
-
- The first value, expected to be less
- The second value, expected to be greater
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Verifies that the first value is less than or equal to the second
- value. If it is not, then an
- is thrown.
-
- The first value, expected to be less
- The second value, expected to be greater
- The message that will be displayed on failure
-
-
-
- Verifies that the first value is less than or equal to the second
- value. If it is not, then an
- is thrown.
-
- The first value, expected to be less
- The second value, expected to be greater
-
-
-
- Verifies that the first value is less than or equal to the second
- value. If it is not, then an
- is thrown.
-
- The first value, expected to be less
- The second value, expected to be greater
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Verifies that the first value is less than or equal to the second
- value. If it is not, then an
- is thrown.
-
- The first value, expected to be less
- The second value, expected to be greater
- The message that will be displayed on failure
-
-
-
- Verifies that the first value is less than or equal to the second
- value. If it is not, then an
- is thrown.
-
- The first value, expected to be less
- The second value, expected to be greater
-
-
-
- Verifies that the first value is less than or equal to the second
- value. If it is not, then an
- is thrown.
-
- The first value, expected to be less
- The second value, expected to be greater
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Verifies that the first value is less than or equal to the second
- value. If it is not, then an
- is thrown.
-
- The first value, expected to be less
- The second value, expected to be greater
- The message that will be displayed on failure
-
-
-
- Verifies that the first value is less than or equal to the second
- value. If it is not, then an
- is thrown.
-
- The first value, expected to be less
- The second value, expected to be greater
-
-
-
- Verifies that the first value is less than or equal to the second
- value. If it is not, then an
- is thrown.
-
- The first value, expected to be less
- The second value, expected to be greater
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Verifies that the first value is less than or equal to the second
- value. If it is not, then an
- is thrown.
-
- The first value, expected to be less
- The second value, expected to be greater
- The message that will be displayed on failure
-
-
-
- Verifies that the first value is less than or equal to the second
- value. If it is not, then an
- is thrown.
-
- The first value, expected to be less
- The second value, expected to be greater
-
-
-
- Verifies that the first value is less than or equal to the second
- value. If it is not, then an
- is thrown.
-
- The first value, expected to be less
- The second value, expected to be greater
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Verifies that the first value is less than or equal to the second
- value. If it is not, then an
- is thrown.
-
- The first value, expected to be less
- The second value, expected to be greater
- The message that will be displayed on failure
-
-
-
- Verifies that the first value is less than or equal to the second
- value. If it is not, then an
- is thrown.
-
- The first value, expected to be less
- The second value, expected to be greater
-
-
-
- Gets the number of assertions executed so far and
- resets the counter to zero.
-
-
-
-
- Enumeration indicating how the expected message parameter is to be used
-
-
-
- Expect an exact match
-
-
- Expect a message containing the parameter string
-
-
- Match the regular expression provided as a parameter
-
-
-
- ExpectedExceptionAttribute
-
-
-
-
-
- Constructor for a non-specific exception
-
-
-
-
- Constructor for a given type of exception
-
- The type of the expected exception
-
-
-
- Constructor for a given exception name
-
- The full name of the expected exception
-
-
-
- Constructor for a given type of exception and expected message text
-
- The type of the expected exception
- The expected message text
-
-
-
- Constructor for a given exception name and expected message text
-
- The full name of the expected exception
- The expected messge text
-
-
-
- Gets or sets the expected exception type
-
-
-
-
- Gets or sets the full Type name of the expected exception
-
-
-
-
- Gets or sets the expected message text
-
-
-
-
- Gets or sets the user message displayed in case of failure
-
-
-
-
- Gets or sets the type of match to be performed on the expected message
-
-
-
-
- Gets the name of a method to be used as an exception handler
-
-
-
-
- A set of Assert methods operationg on one or more collections
-
-
-
-
- The Equals method throws an AssertionException. This is done
- to make sure there is no mistake by calling this function.
-
-
-
-
-
-
- override the default ReferenceEquals to throw an AssertionException. This
- implementation makes sure there is no mistake in calling this function
- as part of Assert.
-
-
-
-
-
-
- Asserts that all items contained in collection are of the type specified by expectedType.
-
- IEnumerable containing objects to be considered
- System.Type that all objects in collection must be instances of
-
-
-
- Asserts that all items contained in collection are of the type specified by expectedType.
-
- IEnumerable containing objects to be considered
- System.Type that all objects in collection must be instances of
- The message that will be displayed on failure
-
-
-
- Asserts that all items contained in collection are of the type specified by expectedType.
-
- IEnumerable containing objects to be considered
- System.Type that all objects in collection must be instances of
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Asserts that all items contained in collection are not equal to null.
-
- IEnumerable containing objects to be considered
-
-
-
- Asserts that all items contained in collection are not equal to null.
-
- IEnumerable containing objects to be considered
- The message that will be displayed on failure
-
-
-
- Asserts that all items contained in collection are not equal to null.
-
- IEnumerable of objects to be considered
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Ensures that every object contained in collection exists within the collection
- once and only once.
-
- IEnumerable of objects to be considered
-
-
-
- Ensures that every object contained in collection exists within the collection
- once and only once.
-
- IEnumerable of objects to be considered
- The message that will be displayed on failure
-
-
-
- Ensures that every object contained in collection exists within the collection
- once and only once.
-
- IEnumerable of objects to be considered
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Asserts that expected and actual are exactly equal. The collections must have the same count,
- and contain the exact same objects in the same order.
-
- The first IEnumerable of objects to be considered
- The second IEnumerable of objects to be considered
-
-
-
- Asserts that expected and actual are exactly equal. The collections must have the same count,
- and contain the exact same objects in the same order.
- If comparer is not null then it will be used to compare the objects.
-
- The first IEnumerable of objects to be considered
- The second IEnumerable of objects to be considered
- The IComparer to use in comparing objects from each IEnumerable
-
-
-
- Asserts that expected and actual are exactly equal. The collections must have the same count,
- and contain the exact same objects in the same order.
-
- The first IEnumerable of objects to be considered
- The second IEnumerable of objects to be considered
- The message that will be displayed on failure
-
-
-
- Asserts that expected and actual are exactly equal. The collections must have the same count,
- and contain the exact same objects in the same order.
- If comparer is not null then it will be used to compare the objects.
-
- The first IEnumerable of objects to be considered
- The second IEnumerable of objects to be considered
- The IComparer to use in comparing objects from each IEnumerable
- The message that will be displayed on failure
-
-
-
- Asserts that expected and actual are exactly equal. The collections must have the same count,
- and contain the exact same objects in the same order.
-
- The first IEnumerable of objects to be considered
- The second IEnumerable of objects to be considered
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Asserts that expected and actual are exactly equal. The collections must have the same count,
- and contain the exact same objects in the same order.
- If comparer is not null then it will be used to compare the objects.
-
- The first IEnumerable of objects to be considered
- The second IEnumerable of objects to be considered
- The IComparer to use in comparing objects from each IEnumerable
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Asserts that expected and actual are equivalent, containing the same objects but the match may be in any order.
-
- The first IEnumerable of objects to be considered
- The second IEnumerable of objects to be considered
-
-
-
- Asserts that expected and actual are equivalent, containing the same objects but the match may be in any order.
-
- The first IEnumerable of objects to be considered
- The second IEnumerable of objects to be considered
- The message that will be displayed on failure
-
-
-
- Asserts that expected and actual are equivalent, containing the same objects but the match may be in any order.
-
- The first IEnumerable of objects to be considered
- The second IEnumerable of objects to be considered
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Asserts that expected and actual are not exactly equal.
-
- The first IEnumerable of objects to be considered
- The second IEnumerable of objects to be considered
-
-
-
- Asserts that expected and actual are not exactly equal.
- If comparer is not null then it will be used to compare the objects.
-
- The first IEnumerable of objects to be considered
- The second IEnumerable of objects to be considered
- The IComparer to use in comparing objects from each IEnumerable
-
-
-
- Asserts that expected and actual are not exactly equal.
-
- The first IEnumerable of objects to be considered
- The second IEnumerable of objects to be considered
- The message that will be displayed on failure
-
-
-
- Asserts that expected and actual are not exactly equal.
- If comparer is not null then it will be used to compare the objects.
-
- The first IEnumerable of objects to be considered
- The second IEnumerable of objects to be considered
- The IComparer to use in comparing objects from each IEnumerable
- The message that will be displayed on failure
-
-
-
- Asserts that expected and actual are not exactly equal.
-
- The first IEnumerable of objects to be considered
- The second IEnumerable of objects to be considered
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Asserts that expected and actual are not exactly equal.
- If comparer is not null then it will be used to compare the objects.
-
- The first IEnumerable of objects to be considered
- The second IEnumerable of objects to be considered
- The IComparer to use in comparing objects from each IEnumerable
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Asserts that expected and actual are not equivalent.
-
- The first IEnumerable of objects to be considered
- The second IEnumerable of objects to be considered
-
-
-
- Asserts that expected and actual are not equivalent.
-
- The first IEnumerable of objects to be considered
- The second IEnumerable of objects to be considered
- The message that will be displayed on failure
-
-
-
- Asserts that expected and actual are not equivalent.
-
- The first IEnumerable of objects to be considered
- The second IEnumerable of objects to be considered
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Asserts that collection contains actual as an item.
-
- IEnumerable of objects to be considered
- Object to be found within collection
-
-
-
- Asserts that collection contains actual as an item.
-
- IEnumerable of objects to be considered
- Object to be found within collection
- The message that will be displayed on failure
-
-
-
- Asserts that collection contains actual as an item.
-
- IEnumerable of objects to be considered
- Object to be found within collection
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Asserts that collection does not contain actual as an item.
-
- IEnumerable of objects to be considered
- Object that cannot exist within collection
-
-
-
- Asserts that collection does not contain actual as an item.
-
- IEnumerable of objects to be considered
- Object that cannot exist within collection
- The message that will be displayed on failure
-
-
-
- Asserts that collection does not contain actual as an item.
-
- IEnumerable of objects to be considered
- Object that cannot exist within collection
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Asserts that superset is not a subject of subset.
-
- The IEnumerable superset to be considered
- The IEnumerable subset to be considered
-
-
-
- Asserts that superset is not a subject of subset.
-
- The IEnumerable superset to be considered
- The IEnumerable subset to be considered
- The message that will be displayed on failure
-
-
-
- Asserts that superset is not a subject of subset.
-
- The IEnumerable superset to be considered
- The IEnumerable subset to be considered
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Asserts that superset is a subset of subset.
-
- The IEnumerable superset to be considered
- The IEnumerable subset to be considered
-
-
-
- Asserts that superset is a subset of subset.
-
- The IEnumerable superset to be considered
- The IEnumerable subset to be considered
- The message that will be displayed on failure
-
-
-
- Asserts that superset is a subset of subset.
-
- The IEnumerable superset to be considered
- The IEnumerable subset to be considered
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Assert that an array, list or other collection is empty
-
- An array, list or other collection implementing IEnumerable
- The message to be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Assert that an array, list or other collection is empty
-
- An array, list or other collection implementing IEnumerable
- The message to be displayed on failure
-
-
-
- Assert that an array,list or other collection is empty
-
- An array, list or other collection implementing IEnumerable
-
-
-
- Assert that an array, list or other collection is empty
-
- An array, list or other collection implementing IEnumerable
- The message to be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Assert that an array, list or other collection is empty
-
- An array, list or other collection implementing IEnumerable
- The message to be displayed on failure
-
-
-
- Assert that an array,list or other collection is empty
-
- An array, list or other collection implementing IEnumerable
-
-
-
- NOTE: The use of asserters for extending NUnit has
- now been replaced by the use of constraints. This
- class is marked obsolete.
-
- AbstractAsserter is the base class for all asserters.
- Asserters encapsulate a condition test and generation
- of an AssertionException with a tailored message. They
- are used by the Assert class as helper objects.
-
- User-defined asserters may be passed to the
- Assert.DoAssert method in order to implement
- extended asserts.
-
-
-
-
- NOTE: The use of asserters for extending NUnit has
- now been replaced by the use of constraints. This
- interface is marked obsolete.
-
- The interface implemented by an asserter. Asserters
- encapsulate a condition test and generation of an
- AssertionException with a tailored message. They
- are used by the Assert class as helper objects.
-
- User-defined asserters may be passed to the
- Assert.DoAssert method in order to implement
- extended asserts.
-
-
-
-
- Test the condition for the assertion.
-
- True if the test succeeds
-
-
-
- Return the message giving the failure reason.
- The return value is unspecified if no failure
- has occured.
-
-
-
-
- The user-defined message for this asserter.
-
-
-
-
- Arguments to use in formatting the user-defined message.
-
-
-
-
- Our failure message object, initialized as needed
-
-
-
-
- Constructs an AbstractAsserter
-
- The message issued upon failure
- Arguments to be used in formatting the message
-
-
-
- Test method to be implemented by derived types.
- Default always succeeds.
-
- True if the test succeeds
-
-
-
- AssertionFailureMessage object used internally
-
-
-
-
- Message related to a failure. If no failure has
- occured, the result is unspecified.
-
-
-
-
- The Assertion class is obsolete and has been
- replaced by the Assert class.
-
-
-
-
- Asserts that a condition is true. If it isn't it throws
- an .
-
- The message to display is the condition
- is false
- The evaluated condition
-
-
-
- Asserts that a condition is true. If it isn't it throws
- an .
-
- The evaluated condition
-
-
-
- /// Asserts that two doubles are equal concerning a delta. If the
- expected value is infinity then the delta value is ignored.
-
- The expected value
- The actual value
- The maximum acceptable difference between the
- the expected and the actual
-
-
-
- /// Asserts that two singles are equal concerning a delta. If the
- expected value is infinity then the delta value is ignored.
-
- The expected value
- The actual value
- The maximum acceptable difference between the
- the expected and the actual
-
-
- Asserts that two objects are equal. If they are not
- an is thrown.
-
-
- Asserts that two ints are equal. If they are not
- an is thrown.
-
-
- Asserts that two ints are equal. If they are not
- an is thrown.
-
-
- Asserts that two doubles are equal concerning a delta.
- If the expected value is infinity then the delta value is ignored.
-
-
-
- Asserts that two floats are equal concerning a delta.
- If the expected value is infinity then the delta value is ignored.
-
-
-
-
- Asserts that two objects are equal. Two objects are considered
- equal if both are null, or if both have the same value. Numeric
- types are compared via string comparision on their contents to
- avoid problems comparing values between different types. All
- non-numeric types are compared by using the Equals method.
- If they are not equal an is thrown.
-
-
-
- Asserts that an object isn't null.
-
-
- Asserts that an object isn't null.
-
-
- Asserts that an object is null.
-
-
- Asserts that an object is null.
-
-
- Asserts that two objects refer to the same object. If they
- are not the same an is thrown.
-
-
-
- Asserts that two objects refer to the same object.
- If they are not an is thrown.
-
-
-
- Fails a test with no message.
-
-
- Fails a test with the given message.
-
-
-
- Thrown when an assertion failed.
-
-
-
-
- The error message that explains
- the reason for the exception
-
-
- The error message that explains
- the reason for the exception
- The exception that caused the
- current exception
-
-
-
- Serialization Constructor
-
-
-
-
- AssertionFailureMessage encapsulates a failure message
- issued as a result of an Assert failure.
-
-
-
-
- Number of characters before a highlighted position before
- clipping will occur. Clipped text is replaced with an
- elipsis "..."
-
-
-
-
- Number of characters after a highlighted position before
- clipping will occur. Clipped text is replaced with an
- elipsis "..."
-
-
-
-
- Prefix used to start an expected value line.
- Must be same length as actualPrefix.
-
-
-
-
- Prefix used to start an actual value line.
- Must be same length as expectedPrefix.
-
-
-
-
- Construct an AssertionFailureMessage with a message
- and optional arguments.
-
-
-
-
-
-
- Construct an empty AssertionFailureMessage
-
-
-
-
- Add an expected value line to the message containing
- the text provided as an argument.
-
- Text describing what was expected.
-
-
-
- Add an actual value line to the message containing
- the text provided as an argument.
-
- Text describing the actual value.
-
-
-
- Add an expected value line to the message containing
- a string representation of the object provided.
-
- An object representing the expected value
-
-
-
- Add an expected value line to the message containing a double
- and the tolerance used in making the comparison.
-
- The expected value
- The tolerance specified in the Assert
-
-
-
- Add an actual value line to the message containing
- a string representation of the object provided.
-
- An object representing what was actually found
-
-
-
- Display two lines that communicate the expected value, and the actual value
-
- The expected value
- The actual value found
-
-
-
- Display two lines that communicate the expected value, the actual value and
- the tolerance used in comparing two doubles.
-
- The expected value
- The actual value found
- The tolerance specified in the Assert
-
-
-
- Draws a marker under the expected/actual strings that highlights
- where in the string a mismatch occurred.
-
- The position of the mismatch
-
-
-
- Reports whether the string lengths are the same or different, and
- what the string lengths are.
-
- The expected string
- The actual string value
-
-
-
- Called to create additional message lines when two objects have been
- found to be unequal. If the inputs are strings, a special message is
- rendered that can help track down where the strings are different,
- based on differences in length, or differences in content.
-
- If the inputs are not strings, the ToString method of the objects
- is used to show what is different about them.
-
- The expected value
- The actual value
- True if a case-insensitive comparison is being performed
-
-
-
- Called to create additional message lines when two doubles have been
- found to be unequal, within the specified tolerance.
-
-
-
-
- Constructs a message that can be displayed when the content of two
- strings are different, but the string lengths are the same. The
- message will clip the strings to a reasonable length, centered
- around the first position where they are mismatched, and draw
- a line marking the position of the difference to make comparison
- quicker.
-
- The expected string value
- The actual string value
- True if a case-insensitive comparison is being performed
-
-
-
- Display a standard message showing the differences found between
- two arrays that were expected to be equal.
-
- The expected array value
- The actual array value
- The index at which a difference was found
-
-
-
- Display a standard message showing the differences found between
- two collections that were expected to be equal.
-
- The expected collection value
- The actual collection value
- The index at which a difference was found
-
-
-
- Get an array of indices representing the point in a collection or
- array corresponding to a single int index into the collection.
-
- The collection to which the indices apply
- Index in the collection
- Array of indices
-
-
-
- Displays elements from a list on a line
-
- Text to prefix the line with
- The list of items to display
- The index in the list of the first element to display
- The maximum number of elements to display
-
-
-
- Formats an object for display in a message line
-
- The object to be displayed
-
-
-
-
- Tests two objects to determine if they are strings.
-
-
-
-
-
-
-
- Renders up to M characters before, and up to N characters after
- the specified index position. If leading or trailing text is
- clipped, and elipses "..." is added where the missing text would
- be.
-
- Clips strings to limit previous or post newline characters,
- since these mess up the comparison
-
-
-
-
-
-
-
- Shows the position two strings start to differ. Comparison
- starts at the start index.
-
-
-
-
- -1 if no mismatch found, or the index where mismatch found
-
-
-
- Turns CR, LF, or TAB into visual indicator to preserve visual marker
- position. This is done by replacing the '\r' into '\\' and 'r'
- characters, and the '\n' into '\\' and 'n' characters, and '\t' into
- '\\' and 't' characters.
-
- Thus the single character becomes two characters for display.
-
-
-
-
-
-
- Attribute used to apply a category to a test
-
-
-
-
- The name of the category
-
-
-
-
- Construct attribute for a given category
-
- The name of the category
-
-
-
- Protected constructor uses the Type name as the name
- of the category.
-
-
-
-
- The name of the category
-
-
-
-
- Abstract base for Attributes that are used to include tests
- in the test run based on environmental settings.
-
-
-
-
- Constructor with no included items specified, for use
- with named property syntax.
-
-
-
-
- Constructor taking one or more included items
-
- Comma-delimited list of included items
-
-
-
- Name of the item that is needed in order for
- a test to run. Multiple itemss may be given,
- separated by a comma.
-
-
-
-
- Name of the item to be excluded. Multiple items
- may be given, separated by a comma.
-
-
-
-
- The reason for including or excluding the test
-
-
-
-
- PlatformAttribute is used to mark a test fixture or an
- individual method as applying to a particular platform only.
-
-
-
-
- Constructor with no platforms specified, for use
- with named property syntax.
-
-
-
-
- Constructor taking one or more platforms
-
- Comma-deliminted list of platforms
-
-
-
- CultureAttribute is used to mark a test fixture or an
- individual method as applying to a particular Culture only.
-
-
-
-
- Constructor with no cultures specified, for use
- with named property syntax.
-
-
-
-
- Constructor taking one or more cultures
-
- Comma-deliminted list of cultures
-
-
-
- MessageWriter is the abstract base for classes that write
- constraint descriptions and messages in some form. The
- class has separate methods for writing various components
- of a message, allowing implementations to tailor the
- presentation as needed.
-
-
-
-
- Construct a MessageWriter given a culture
-
-
-
-
- Method to write single line message with optional args, usually
- written to precede the general failure message.
-
- The message to be written
- Any arguments used in formatting the message
-
-
-
- Method to write single line message with optional args, usually
- written to precede the general failure message, at a givel
- indentation level.
-
- The indentation level of the message
- The message to be written
- Any arguments used in formatting the message
-
-
-
- Display Expected and Actual lines for a constraint. This
- is called by MessageWriter's default implementation of
- WriteMessageTo and provides the generic two-line display.
-
- The constraint that failed
-
-
-
- Display Expected and Actual lines for given values. This
- method may be called by constraints that need more control over
- the display of actual and expected values than is provided
- by the default implementation.
-
- The expected value
- The actual value causing the failure
-
-
-
- Display Expected and Actual lines for given values, including
- a tolerance value on the Expected line.
-
- The expected value
- The actual value causing the failure
- The tolerance within which the test was made
-
-
-
- Display the expected and actual string values on separate lines.
- If the mismatch parameter is >=0, an additional line is displayed
- line containing a caret that points to the mismatch point.
-
- The expected string value
- The actual string value
- The point at which the strings don't match or -1
- If true, case is ignored in locating the point where the strings differ
- If true, the strings should be clipped to fit the line
-
-
-
- Writes the text for a connector.
-
- The connector.
-
-
-
- Writes the text for a predicate.
-
- The predicate.
-
-
-
- Writes the text for an expected value.
-
- The expected value.
-
-
-
- Writes the text for a modifier
-
- The modifier.
-
-
-
- Writes the text for an actual value.
-
- The actual value.
-
-
-
- Writes the text for a generalized value.
-
- The value.
-
-
-
- Writes the text for a collection value,
- starting at a particular point, to a max length
-
- The collection containing elements to write.
- The starting point of the elements to write
- The maximum number of elements to write
-
-
-
- Abstract method to get the max line length
-
-
-
-
- Static methods used in creating messages
-
-
-
-
- Static string used when strings are clipped
-
-
-
-
- Returns the representation of a type as used in NUnitLite.
- This is the same as Type.ToString() except for arrays,
- which are displayed with their declared sizes.
-
-
-
-
-
-
- Converts any control characters in a string
- to their escaped representation.
-
- The string to be converted
- The converted string
-
-
-
- Return the a string representation for a set of indices into an array
-
- Array of indices for which a string is needed
-
-
-
- Get an array of indices representing the point in a collection or
- array corresponding to a single int index into the collection.
-
- The collection to which the indices apply
- Index in the collection
- Array of indices
-
-
-
- Clip a string to a given length, starting at a particular offset, returning the clipped
- string with ellipses representing the removed parts
-
- The string to be clipped
- The maximum permitted length of the result string
- The point at which to start clipping
- The clipped string
-
-
-
- Clip the expected and actual strings in a coordinated fashion,
- so that they may be displayed together.
-
-
-
-
-
-
-
-
- Shows the position two strings start to differ. Comparison
- starts at the start index.
-
- The expected string
- The actual string
- The index in the strings at which comparison should start
- Boolean indicating whether case should be ignored
- -1 if no mismatch found, or the index where mismatch found
-
-
-
- Summary description for SetCultureAttribute.
-
-
-
-
- PropertyAttribute is used to attach information to a test as a name/value pair..
-
-
-
-
- The property name
-
-
-
-
- The property value
-
-
-
-
- Construct a PropertyAttribute with a name and value
-
- The name of the property
- The property value
-
-
-
- Constructor for use by inherited classes that use the
- name of the type as the property name.
-
-
-
-
- Gets the property name
-
-
-
-
- Gets the property value
-
-
-
-
- Construct given the name of a culture
-
-
-
-
-
- TextMessageWriter writes constraint descriptions and messages
- in displayable form as a text stream. It tailors the display
- of individual message components to form the standard message
- format of NUnit assertion failure messages.
-
-
-
-
- Prefix used for the expected value line of a message
-
-
-
-
- Prefix used for the actual value line of a message
-
-
-
-
- Length of a message prefix
-
-
-
-
- Construct a TextMessageWriter
-
-
-
-
- Construct a TextMessageWriter, specifying a user message
- and optional formatting arguments.
-
-
-
-
-
-
- Method to write single line message with optional args, usually
- written to precede the general failure message, at a givel
- indentation level.
-
- The indentation level of the message
- The message to be written
- Any arguments used in formatting the message
-
-
-
- Display Expected and Actual lines for a constraint. This
- is called by MessageWriter's default implementation of
- WriteMessageTo and provides the generic two-line display.
-
- The constraint that failed
-
-
-
- Display Expected and Actual lines for given values. This
- method may be called by constraints that need more control over
- the display of actual and expected values than is provided
- by the default implementation.
-
- The expected value
- The actual value causing the failure
-
-
-
- Display Expected and Actual lines for given values, including
- a tolerance value on the expected line.
-
- The expected value
- The actual value causing the failure
- The tolerance within which the test was made
-
-
-
- Display the expected and actual string values on separate lines.
- If the mismatch parameter is >=0, an additional line is displayed
- line containing a caret that points to the mismatch point.
-
- The expected string value
- The actual string value
- The point at which the strings don't match or -1
- If true, case is ignored in string comparisons
- If true, clip the strings to fit the max line length
-
-
-
- Writes the text for a connector.
-
- The connector.
-
-
-
- Writes the text for a predicate.
-
- The predicate.
-
-
-
- Write the text for a modifier.
-
- The modifier.
-
-
-
- Writes the text for an expected value.
-
- The expected value.
-
-
-
- Writes the text for an actual value.
-
- The actual value.
-
-
-
- Writes the text for a generalized value.
-
- The value.
-
-
-
- Writes the text for a collection value,
- starting at a particular point, to a max length
-
- The collection containing elements to write.
- The starting point of the elements to write
- The maximum number of elements to write
-
-
-
- Write the generic 'Expected' line for a constraint
-
- The constraint that failed
-
-
-
- Write the generic 'Expected' line for a given value
-
- The expected value
-
-
-
- Write the generic 'Expected' line for a given value
- and tolerance.
-
- The expected value
- The tolerance within which the test was made
-
-
-
- Write the generic 'Actual' line for a constraint
-
- The constraint for which the actual value is to be written
-
-
-
- Write the generic 'Actual' line for a given value
-
- The actual value causing a failure
-
-
-
- Gets or sets the maximum line length for this writer
-
-
-
-
- Basic Asserts on strings.
-
-
-
-
- The Equals method throws an AssertionException. This is done
- to make sure there is no mistake by calling this function.
-
-
-
-
-
-
- override the default ReferenceEquals to throw an AssertionException. This
- implementation makes sure there is no mistake in calling this function
- as part of Assert.
-
-
-
-
-
-
- Asserts that a string is found within another string.
-
- The expected string
- The string to be examined
- The message to display in case of failure
- Arguments used in formatting the message
-
-
-
- Asserts that a string is found within another string.
-
- The expected string
- The string to be examined
- The message to display in case of failure
-
-
-
- Asserts that a string is found within another string.
-
- The expected string
- The string to be examined
-
-
-
- Asserts that a string starts with another string.
-
- The expected string
- The string to be examined
- The message to display in case of failure
- Arguments used in formatting the message
-
-
-
- Asserts that a string starts with another string.
-
- The expected string
- The string to be examined
- The message to display in case of failure
-
-
-
- Asserts that a string starts with another string.
-
- The expected string
- The string to be examined
-
-
-
- Asserts that a string ends with another string.
-
- The expected string
- The string to be examined
- The message to display in case of failure
- Arguments used in formatting the message
-
-
-
- Asserts that a string ends with another string.
-
- The expected string
- The string to be examined
- The message to display in case of failure
-
-
-
- Asserts that a string ends with another string.
-
- The expected string
- The string to be examined
-
-
-
- Asserts that two strings are equal, without regard to case.
-
- The expected string
- The actual string
- The message to display in case of failure
- Arguments used in formatting the message
-
-
-
- Asserts that two strings are equal, without regard to case.
-
- The expected string
- The actual string
- The message to display in case of failure
-
-
-
- Asserts that two strings are equal, without regard to case.
-
- The expected string
- The actual string
-
-
-
- Asserts that a string matches an expected regular expression pattern.
-
- The expected expression
- The actual string
- The message to display in case of failure
- Arguments used in formatting the message
-
-
-
- Asserts that a string matches an expected regular expression pattern.
-
- The expected expression
- The actual string
- The message to display in case of failure
-
-
-
- Asserts that a string matches an expected regular expression pattern.
-
- The expected expression
- The actual string
-
-
-
- AssertionHelper is an optional base class for user tests,
- allowing the use of shorter names for constraints and
- asserts and avoiding conflict with the definition of
- , from which it inherits much of its
- behavior, in certain mock object frameworks.
-
-
-
-
- Apply a constraint to an actual value, succeeding if the constraint
- is satisfied and throwing an assertion exception on failure. Works
- identically to
-
- A Constraint to be applied
- The actual value to test
-
-
-
- Apply a constraint to an actual value, succeeding if the constraint
- is satisfied and throwing an assertion exception on failure. Works
- identically to
-
- A Constraint to be applied
- The actual value to test
- The message that will be displayed on failure
-
-
-
- Apply a constraint to an actual value, succeeding if the constraint
- is satisfied and throwing an assertion exception on failure. Works
- identically to
-
- A Constraint to be applied
- The actual value to test
- The message that will be displayed on failure
- Arguments to be used in formatting the message
-
-
-
- Asserts that a condition is true. If the condition is false the method throws
- an . Works Identically to
- .
-
- The evaluated condition
- The message to display if the condition is false
- Arguments to be used in formatting the message
-
-
-
- Asserts that a condition is true. If the condition is false the method throws
- an . Works Identically to
- .
-
- The evaluated condition
- The message to display if the condition is false
-
-
-
- Asserts that a condition is true. If the condition is false the method throws
- an . Works Identically to .
-
- The evaluated condition
-
-
-
- Returns a ListMapper based on a collection.
-
- The original collection
-
-
-
-
- Summary description for FileAssert.
-
-
-
-
- The Equals method throws an AssertionException. This is done
- to make sure there is no mistake by calling this function.
-
-
-
-
-
-
- override the default ReferenceEquals to throw an AssertionException. This
- implementation makes sure there is no mistake in calling this function
- as part of Assert.
-
-
-
-
-
-
- We don't actually want any instances of this object, but some people
- like to inherit from it to add other static methods. Hence, the
- protected constructor disallows any instances of this object.
-
-
-
-
- Verifies that two Streams are equal. Two Streams are considered
- equal if both are null, or if both have the same value byte for byte.
- If they are not equal an is thrown.
-
- The expected Stream
- The actual Stream
- The message to display if Streams are not equal
- Arguments to be used in formatting the message
-
-
-
- Verifies that two Streams are equal. Two Streams are considered
- equal if both are null, or if both have the same value byte for byte.
- If they are not equal an is thrown.
-
- The expected Stream
- The actual Stream
- The message to display if objects are not equal
-
-
-
- Verifies that two Streams are equal. Two Streams are considered
- equal if both are null, or if both have the same value byte for byte.
- If they are not equal an is thrown.
-
- The expected Stream
- The actual Stream
-
-
-
- Verifies that two files are equal. Two files are considered
- equal if both are null, or if both have the same value byte for byte.
- If they are not equal an is thrown.
-
- A file containing the value that is expected
- A file containing the actual value
- The message to display if Streams are not equal
- Arguments to be used in formatting the message
-
-
-
- Verifies that two files are equal. Two files are considered
- equal if both are null, or if both have the same value byte for byte.
- If they are not equal an is thrown.
-
- A file containing the value that is expected
- A file containing the actual value
- The message to display if objects are not equal
-
-
-
- Verifies that two files are equal. Two files are considered
- equal if both are null, or if both have the same value byte for byte.
- If they are not equal an is thrown.
-
- A file containing the value that is expected
- A file containing the actual value
-
-
-
- Verifies that two files are equal. Two files are considered
- equal if both are null, or if both have the same value byte for byte.
- If they are not equal an is thrown.
-
- The path to a file containing the value that is expected
- The path to a file containing the actual value
- The message to display if Streams are not equal
- Arguments to be used in formatting the message
-
-
-
- Verifies that two files are equal. Two files are considered
- equal if both are null, or if both have the same value byte for byte.
- If they are not equal an is thrown.
-
- The path to a file containing the value that is expected
- The path to a file containing the actual value
- The message to display if objects are not equal
-
-
-
- Verifies that two files are equal. Two files are considered
- equal if both are null, or if both have the same value byte for byte.
- If they are not equal an is thrown.
-
- The path to a file containing the value that is expected
- The path to a file containing the actual value
-
-
-
- Asserts that two Streams are not equal. If they are equal
- an is thrown.
-
- The expected Stream
- The actual Stream
- The message to be displayed when the two Stream are the same.
- Arguments to be used in formatting the message
-
-
-
- Asserts that two Streams are not equal. If they are equal
- an is thrown.
-
- The expected Stream
- The actual Stream
- The message to be displayed when the Streams are the same.
-
-
-
- Asserts that two Streams are not equal. If they are equal
- an is thrown.
-
- The expected Stream
- The actual Stream
-
-
-
- Asserts that two files are not equal. If they are equal
- an is thrown.
-
- A file containing the value that is expected
- A file containing the actual value
- The message to display if Streams are not equal
- Arguments to be used in formatting the message
-
-
-
- Asserts that two files are not equal. If they are equal
- an is thrown.
-
- A file containing the value that is expected
- A file containing the actual value
- The message to display if objects are not equal
-
-
-
- Asserts that two files are not equal. If they are equal
- an is thrown.
-
- A file containing the value that is expected
- A file containing the actual value
-
-
-
- Asserts that two files are not equal. If they are equal
- an is thrown.
-
- The path to a file containing the value that is expected
- The path to a file containing the actual value
- The message to display if Streams are not equal
- Arguments to be used in formatting the message
-
-
-
- Asserts that two files are not equal. If they are equal
- an is thrown.
-
- The path to a file containing the value that is expected
- The path to a file containing the actual value
- The message to display if objects are not equal
-
-
-
- Asserts that two files are not equal. If they are equal
- an is thrown.
-
- The path to a file containing the value that is expected
- The path to a file containing the actual value
-
-
-
- Thrown when an assertion failed.
-
-
-
-
-
-
- The error message that explains
- the reason for the exception
- The exception that caused the
- current exception
-
-
-
- Serialization Constructor
-
-
-
-
- GlobalSettings is a place for setting default values used
- by the framework in performing asserts.
-
-
-
-
- Default tolerance for floating point equality
-
-
-
-
- Obsolete class, formerly used to identify tests through
- inheritance. Avoid using this class for new tests.
-
-
-
-
- Method called immediately before running the test.
-
-
-
-
- Method Called immediately after running the test. It is
- guaranteed to be called, even if an exception is thrown.
-
-
-
-
- Attribute used to mark a class that contains one-time SetUp
- and/or TearDown methods that apply to all the tests in a
- namespace or an assembly.
-
-
-
-
- SetUpFixtureAttribute is used to identify a SetUpFixture
-
-
-
-
- Attribute used to mark a static (shared in VB) property
- that returns a list of tests.
-
-
-
-
- Attribute used to identify a method that is called
- immediately after each test is run. The method is
- guaranteed to be called, even if an exception is thrown.
-
-
-
-
- Adding this attribute to a method within a
- class makes the method callable from the NUnit test runner. There is a property
- called Description which is optional which you can provide a more detailed test
- description. This class cannot be inherited.
-
-
-
- [TestFixture]
- public class Fixture
- {
- [Test]
- public void MethodToTest()
- {}
-
- [Test(Description = "more detailed description")]
- publc void TestDescriptionMethod()
- {}
- }
-
-
-
-
-
- Descriptive text for this test
-
-
-
-
- [TestFixture]
- public class ExampleClass
- {}
-
-
-
-
- Descriptive text for this fixture
-
-
-
-
- Attribute used to identify a method that is
- called before any tests in a fixture are run.
-
-
-
-
- Attribute used to identify a method that is called after
- all the tests in a fixture have run. The method is
- guaranteed to be called, even if an exception is thrown.
-
-
-
-
- Attribute used to mark a test that is to be ignored.
- Ignored tests result in a warning message when the
- tests are run.
-
-
-
-
- Constructs the attribute without giving a reason
- for ignoring the test.
-
-
-
-
- Constructs the attribute giving a reason for ignoring the test
-
- The reason for ignoring the test
-
-
-
- The reason for ignoring a test
-
-
-
-
- ExplicitAttribute marks a test or test fixture so that it will
- only be run if explicitly executed from the gui or command line
- or if it is included by use of a filter. The test will not be
- run simply because an enclosing suite is run.
-
-
-
-
- Default constructor
-
-
-
-
- Constructor with a reason
-
- The reason test is marked explicit
-
-
-
- The reason test is marked explicit
-
-
-
-
- Attribute used to provide descriptive text about a
- test case or fixture.
-
-
-
-
- Construct the attribute
-
- Text describing the test
-
-
-
- Gets the test description
-
-
-
-
- Interface implemented by a user fixture in order to
- validate any expected exceptions. It is only called
- for test methods marked with the ExpectedException
- attribute.
-
-
-
-
- Method to handle an expected exception
-
- The exception to be handled
-
-
-
diff --git a/src/AllExamples.sln b/src/AllExamples.sln
new file mode 100644
index 00000000..298e29bf
--- /dev/null
+++ b/src/AllExamples.sln
@@ -0,0 +1,460 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 14
+VisualStudioVersion = 14.0.25420.1
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ServiceStack.Northwind", "ServiceStack.Northwind", "{206CDF5A-68B2-431A-B28D-B8F43C0697A6}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ServiceStack.Examples", "ServiceStack.Examples", "{A42B0FAF-687B-4E2A-845B-BF3D2B5FF6BC}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Hosts", "Hosts", "{2218422E-76B4-4128-ACFF-4CE824B0E0CE}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StarterTemplates", "StarterTemplates", "{4721A7AC-65B8-48C0-A7CC-BF4B7A2B9D02}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{73398563-F556-4345-80D3-E121F0AA84D2}"
+ ProjectSection(SolutionItems) = preProject
+ StarterTemplates\README.md = StarterTemplates\README.md
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ServiceStack.Hello", "ServiceStack.Hello", "{5AF13B19-7B73-4C74-BB82-A9640BBB58B4}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ServiceStack.MovieRest", "ServiceStack.MovieRest", "{D217E359-75BD-4875-817A-40A4819C4E83}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "RedisStackOverflow", "RedisStackOverflow", "{68A679AC-8B0D-45A4-8624-68C706089DEE}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "RestFiles", "RestFiles", "{EBC6AB0B-D961-4E31-A2B4-09F74F102B37}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "RestIntro", "RestIntro", "{45340404-FACD-4C79-9703-95966FEA84E3}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Backbone.Todos", "Backbone.Todos", "{79CD1278-66D5-458A-B75D-06EF4CC050A9}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Docs", "Docs", "{ABD851F4-394B-4999-BCD2-12CE41BEFE9D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ServiceStack.Northwind", "ServiceStack.Northwind\ServiceStack.Northwind\ServiceStack.Northwind.csproj", "{3E968D84-7C23-42E9-A443-6355FAA845E2}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ServiceStack.Northwind.ServiceModel", "ServiceStack.Northwind\ServiceStack.Northwind.ServiceModel\ServiceStack.Northwind.ServiceModel.csproj", "{14856482-95D3-4A02-968C-665F3D08F94D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ServiceStack.Northwind.ServiceInterface", "ServiceStack.Northwind\ServiceStack.Northwind.ServiceInterface\ServiceStack.Northwind.ServiceInterface.csproj", "{A724F80D-4341-4ECA-AC43-CF84A3F03779}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ServiceStack.Examples.Host.Web", "ServiceStack.Examples\ServiceStack.Examples.Host.Web\ServiceStack.Examples.Host.Web.csproj", "{3A8D2349-6E97-47A2-AC49-EFE7D89C0344}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ServiceStack.Examples.ServiceInterface", "ServiceStack.Examples\ServiceStack.Examples.ServiceInterface\ServiceStack.Examples.ServiceInterface.csproj", "{519A7B72-D144-436D-AAC3-7BAAEAD3FF52}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ServiceStack.Examples.Host.Console", "ServiceStack.Examples\ServiceStack.Examples.Host.Console\ServiceStack.Examples.Host.Console.csproj", "{77363223-98F2-4724-8044-569C6485B3A9}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ServiceStack.Examples.Clients", "ServiceStack.Examples\ServiceStack.Examples.Clients\ServiceStack.Examples.Clients.csproj", "{53F87D5C-4540-4AFD-BD19-E081FD8E586B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ServiceStack.Examples.ServiceModel", "ServiceStack.Examples\ServiceStack.Examples.ServiceModel\ServiceStack.Examples.ServiceModel.csproj", "{2B840832-3036-47D9-8F9B-560CD5C2BF90}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StarterTemplates.Common", "StarterTemplates\StarterTemplates.Common\StarterTemplates.Common.csproj", "{ACBF3D12-379A-41D7-87DB-C376CFCBD131}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConsoleAppHost", "StarterTemplates\ConsoleAppHost\ConsoleAppHost.csproj", "{79950922-9EFF-44E1-993A-4EA20DEC780A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WinServiceAppHost", "StarterTemplates\WinServiceAppHost\WinServiceAppHost.csproj", "{D49ABE7E-B090-4473-B80B-B2432BBF8CB5}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ServiceStack.Hello", "ServiceStack.Hello\ServiceStack.Hello.csproj", "{A8F9A08B-E704-4C77-939B-B56670A2A98D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RedisStackOverflow.ServiceInterface", "RedisStackOverflow\RedisStackOverflow.ServiceInterface\RedisStackOverflow.ServiceInterface.csproj", "{41C8C157-B2A4-4DDE-B153-233E46109F39}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RedisStackOverflow", "RedisStackOverflow\RedisStackOverflow\RedisStackOverflow.csproj", "{CCAC74EA-08EE-41A8-BF01-8F1B7D207144}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RestFiles", "RestFiles\RestFiles\RestFiles.csproj", "{70B9EEDE-BC2A-42EB-933D-A94D7D4275CB}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RestFiles.ServiceInterface", "RestFiles\RestFiles.ServiceInterface\RestFiles.ServiceInterface.csproj", "{5B91935A-7ED6-4496-871B-6AD25BC3F097}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RestFiles.ServiceModel", "RestFiles\RestFiles.ServiceModel\RestFiles.ServiceModel.csproj", "{6BBEDCA5-1183-49EE-AE80-0269DEB2EDEF}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RestIntro", "RestIntro\RestIntro\RestIntro.csproj", "{2E71EB42-595D-4181-A27B-BD85DCA739D1}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RestIntro.ServiceModel", "RestIntro\RestIntro.ServiceModel\RestIntro.ServiceModel.csproj", "{8ED227D1-0C83-4A1D-91D0-1B9DFCD8E114}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RestIntro.ServiceInterface", "RestIntro\RestIntro.ServiceInterface\RestIntro.ServiceInterface.csproj", "{CBC26F2A-3B89-4DA4-A5A0-7C05A48EAF10}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Backbone.Todos", "Backbone.Todos\Backbone.Todos.csproj", "{BDE04BD3-40A0-4B8E-A0B9-7729FFB7D1C2}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Docs", "Docs\Docs.csproj", "{19ADDEEC-EAF9-4B42-8EEC-86CD389D834F}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Docs.Logic", "Docs\Docs.Logic\Docs.Logic.csproj", "{2A606EB5-47BD-47B1-97EB-8C208DF63ABF}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RedisStackOverflow.ServiceModel", "RedisStackOverflow\RedisStackOverflow.ServiceModel\RedisStackOverflow.ServiceModel.csproj", "{BFAB0E32-43F3-4A0E-9409-FC57FCF4BF14}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ServiceStack.MovieRest", "ServiceStack.MovieRest\Web\ServiceStack.MovieRest.csproj", "{EE3EB8BB-A24E-4F71-8277-1C6DAE652E2C}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{1DE83058-60D9-4637-90EF-C3E46EAA9ACC}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ServiceStack.Examples.Tests", "..\tests\ServiceStack.Examples.Tests\ServiceStack.Examples.Tests.csproj", "{969644BC-B209-4458-8DC1-041D7A9ADD3B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ServiceStack.Examples.Tests.Integration", "..\tests\ServiceStack.Examples.Tests.Integration\ServiceStack.Examples.Tests.Integration.csproj", "{21777EAF-74FD-4D0B-947A-C602D8D3EBBA}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RestFiles.Tests", "RestFiles\RestFiles.Tests\RestFiles.Tests.csproj", "{DAE4FFC2-B446-4020-8578-19B816FAA40A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RootPath45", "StarterTemplates\RootPath45\RootPath45.csproj", "{91D8B4E8-1973-40C6-AF44-DBFEEAAF0C7F}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{19FF9025-F307-4507-9CCB-5D08D7D975E1}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CustomPath45", "StarterTemplates\CustomPath45\CustomPath45.csproj", "{E256695F-8607-4A79-ABA5-6FED3A400C71}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Debug|Mixed Platforms = Debug|Mixed Platforms
+ Debug|x86 = Debug|x86
+ Release|Any CPU = Release|Any CPU
+ Release|Mixed Platforms = Release|Mixed Platforms
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {3E968D84-7C23-42E9-A443-6355FAA845E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3E968D84-7C23-42E9-A443-6355FAA845E2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3E968D84-7C23-42E9-A443-6355FAA845E2}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {3E968D84-7C23-42E9-A443-6355FAA845E2}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {3E968D84-7C23-42E9-A443-6355FAA845E2}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {3E968D84-7C23-42E9-A443-6355FAA845E2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3E968D84-7C23-42E9-A443-6355FAA845E2}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3E968D84-7C23-42E9-A443-6355FAA845E2}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {3E968D84-7C23-42E9-A443-6355FAA845E2}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {3E968D84-7C23-42E9-A443-6355FAA845E2}.Release|x86.ActiveCfg = Release|Any CPU
+ {14856482-95D3-4A02-968C-665F3D08F94D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {14856482-95D3-4A02-968C-665F3D08F94D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {14856482-95D3-4A02-968C-665F3D08F94D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {14856482-95D3-4A02-968C-665F3D08F94D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {14856482-95D3-4A02-968C-665F3D08F94D}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {14856482-95D3-4A02-968C-665F3D08F94D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {14856482-95D3-4A02-968C-665F3D08F94D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {14856482-95D3-4A02-968C-665F3D08F94D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {14856482-95D3-4A02-968C-665F3D08F94D}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {14856482-95D3-4A02-968C-665F3D08F94D}.Release|x86.ActiveCfg = Release|Any CPU
+ {A724F80D-4341-4ECA-AC43-CF84A3F03779}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A724F80D-4341-4ECA-AC43-CF84A3F03779}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A724F80D-4341-4ECA-AC43-CF84A3F03779}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {A724F80D-4341-4ECA-AC43-CF84A3F03779}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {A724F80D-4341-4ECA-AC43-CF84A3F03779}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {A724F80D-4341-4ECA-AC43-CF84A3F03779}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A724F80D-4341-4ECA-AC43-CF84A3F03779}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A724F80D-4341-4ECA-AC43-CF84A3F03779}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {A724F80D-4341-4ECA-AC43-CF84A3F03779}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {A724F80D-4341-4ECA-AC43-CF84A3F03779}.Release|x86.ActiveCfg = Release|Any CPU
+ {3A8D2349-6E97-47A2-AC49-EFE7D89C0344}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3A8D2349-6E97-47A2-AC49-EFE7D89C0344}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3A8D2349-6E97-47A2-AC49-EFE7D89C0344}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {3A8D2349-6E97-47A2-AC49-EFE7D89C0344}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {3A8D2349-6E97-47A2-AC49-EFE7D89C0344}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {3A8D2349-6E97-47A2-AC49-EFE7D89C0344}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3A8D2349-6E97-47A2-AC49-EFE7D89C0344}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3A8D2349-6E97-47A2-AC49-EFE7D89C0344}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {3A8D2349-6E97-47A2-AC49-EFE7D89C0344}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {3A8D2349-6E97-47A2-AC49-EFE7D89C0344}.Release|x86.ActiveCfg = Release|Any CPU
+ {519A7B72-D144-436D-AAC3-7BAAEAD3FF52}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {519A7B72-D144-436D-AAC3-7BAAEAD3FF52}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {519A7B72-D144-436D-AAC3-7BAAEAD3FF52}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {519A7B72-D144-436D-AAC3-7BAAEAD3FF52}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {519A7B72-D144-436D-AAC3-7BAAEAD3FF52}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {519A7B72-D144-436D-AAC3-7BAAEAD3FF52}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {519A7B72-D144-436D-AAC3-7BAAEAD3FF52}.Release|Any CPU.Build.0 = Release|Any CPU
+ {519A7B72-D144-436D-AAC3-7BAAEAD3FF52}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {519A7B72-D144-436D-AAC3-7BAAEAD3FF52}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {519A7B72-D144-436D-AAC3-7BAAEAD3FF52}.Release|x86.ActiveCfg = Release|Any CPU
+ {77363223-98F2-4724-8044-569C6485B3A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {77363223-98F2-4724-8044-569C6485B3A9}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {77363223-98F2-4724-8044-569C6485B3A9}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {77363223-98F2-4724-8044-569C6485B3A9}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {77363223-98F2-4724-8044-569C6485B3A9}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {77363223-98F2-4724-8044-569C6485B3A9}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {77363223-98F2-4724-8044-569C6485B3A9}.Release|Any CPU.Build.0 = Release|Any CPU
+ {77363223-98F2-4724-8044-569C6485B3A9}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {77363223-98F2-4724-8044-569C6485B3A9}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {77363223-98F2-4724-8044-569C6485B3A9}.Release|x86.ActiveCfg = Release|Any CPU
+ {53F87D5C-4540-4AFD-BD19-E081FD8E586B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {53F87D5C-4540-4AFD-BD19-E081FD8E586B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {53F87D5C-4540-4AFD-BD19-E081FD8E586B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {53F87D5C-4540-4AFD-BD19-E081FD8E586B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {53F87D5C-4540-4AFD-BD19-E081FD8E586B}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {53F87D5C-4540-4AFD-BD19-E081FD8E586B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {53F87D5C-4540-4AFD-BD19-E081FD8E586B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {53F87D5C-4540-4AFD-BD19-E081FD8E586B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {53F87D5C-4540-4AFD-BD19-E081FD8E586B}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {53F87D5C-4540-4AFD-BD19-E081FD8E586B}.Release|x86.ActiveCfg = Release|Any CPU
+ {2B840832-3036-47D9-8F9B-560CD5C2BF90}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2B840832-3036-47D9-8F9B-560CD5C2BF90}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2B840832-3036-47D9-8F9B-560CD5C2BF90}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {2B840832-3036-47D9-8F9B-560CD5C2BF90}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {2B840832-3036-47D9-8F9B-560CD5C2BF90}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {2B840832-3036-47D9-8F9B-560CD5C2BF90}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2B840832-3036-47D9-8F9B-560CD5C2BF90}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2B840832-3036-47D9-8F9B-560CD5C2BF90}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {2B840832-3036-47D9-8F9B-560CD5C2BF90}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {2B840832-3036-47D9-8F9B-560CD5C2BF90}.Release|x86.ActiveCfg = Release|Any CPU
+ {ACBF3D12-379A-41D7-87DB-C376CFCBD131}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {ACBF3D12-379A-41D7-87DB-C376CFCBD131}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {ACBF3D12-379A-41D7-87DB-C376CFCBD131}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {ACBF3D12-379A-41D7-87DB-C376CFCBD131}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {ACBF3D12-379A-41D7-87DB-C376CFCBD131}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {ACBF3D12-379A-41D7-87DB-C376CFCBD131}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {ACBF3D12-379A-41D7-87DB-C376CFCBD131}.Release|Any CPU.Build.0 = Release|Any CPU
+ {ACBF3D12-379A-41D7-87DB-C376CFCBD131}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {ACBF3D12-379A-41D7-87DB-C376CFCBD131}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {ACBF3D12-379A-41D7-87DB-C376CFCBD131}.Release|x86.ActiveCfg = Release|Any CPU
+ {79950922-9EFF-44E1-993A-4EA20DEC780A}.Debug|Any CPU.ActiveCfg = Debug|x86
+ {79950922-9EFF-44E1-993A-4EA20DEC780A}.Debug|Any CPU.Build.0 = Debug|x86
+ {79950922-9EFF-44E1-993A-4EA20DEC780A}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
+ {79950922-9EFF-44E1-993A-4EA20DEC780A}.Debug|Mixed Platforms.Build.0 = Debug|x86
+ {79950922-9EFF-44E1-993A-4EA20DEC780A}.Debug|x86.ActiveCfg = Debug|x86
+ {79950922-9EFF-44E1-993A-4EA20DEC780A}.Debug|x86.Build.0 = Debug|x86
+ {79950922-9EFF-44E1-993A-4EA20DEC780A}.Release|Any CPU.ActiveCfg = Release|x86
+ {79950922-9EFF-44E1-993A-4EA20DEC780A}.Release|Any CPU.Build.0 = Release|x86
+ {79950922-9EFF-44E1-993A-4EA20DEC780A}.Release|Mixed Platforms.ActiveCfg = Release|x86
+ {79950922-9EFF-44E1-993A-4EA20DEC780A}.Release|Mixed Platforms.Build.0 = Release|x86
+ {79950922-9EFF-44E1-993A-4EA20DEC780A}.Release|x86.ActiveCfg = Release|x86
+ {79950922-9EFF-44E1-993A-4EA20DEC780A}.Release|x86.Build.0 = Release|x86
+ {D49ABE7E-B090-4473-B80B-B2432BBF8CB5}.Debug|Any CPU.ActiveCfg = Debug|x86
+ {D49ABE7E-B090-4473-B80B-B2432BBF8CB5}.Debug|Any CPU.Build.0 = Debug|x86
+ {D49ABE7E-B090-4473-B80B-B2432BBF8CB5}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
+ {D49ABE7E-B090-4473-B80B-B2432BBF8CB5}.Debug|Mixed Platforms.Build.0 = Debug|x86
+ {D49ABE7E-B090-4473-B80B-B2432BBF8CB5}.Debug|x86.ActiveCfg = Debug|x86
+ {D49ABE7E-B090-4473-B80B-B2432BBF8CB5}.Debug|x86.Build.0 = Debug|x86
+ {D49ABE7E-B090-4473-B80B-B2432BBF8CB5}.Release|Any CPU.ActiveCfg = Release|x86
+ {D49ABE7E-B090-4473-B80B-B2432BBF8CB5}.Release|Any CPU.Build.0 = Release|x86
+ {D49ABE7E-B090-4473-B80B-B2432BBF8CB5}.Release|Mixed Platforms.ActiveCfg = Release|x86
+ {D49ABE7E-B090-4473-B80B-B2432BBF8CB5}.Release|Mixed Platforms.Build.0 = Release|x86
+ {D49ABE7E-B090-4473-B80B-B2432BBF8CB5}.Release|x86.ActiveCfg = Release|x86
+ {D49ABE7E-B090-4473-B80B-B2432BBF8CB5}.Release|x86.Build.0 = Release|x86
+ {A8F9A08B-E704-4C77-939B-B56670A2A98D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A8F9A08B-E704-4C77-939B-B56670A2A98D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A8F9A08B-E704-4C77-939B-B56670A2A98D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {A8F9A08B-E704-4C77-939B-B56670A2A98D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {A8F9A08B-E704-4C77-939B-B56670A2A98D}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {A8F9A08B-E704-4C77-939B-B56670A2A98D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A8F9A08B-E704-4C77-939B-B56670A2A98D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A8F9A08B-E704-4C77-939B-B56670A2A98D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {A8F9A08B-E704-4C77-939B-B56670A2A98D}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {A8F9A08B-E704-4C77-939B-B56670A2A98D}.Release|x86.ActiveCfg = Release|Any CPU
+ {41C8C157-B2A4-4DDE-B153-233E46109F39}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {41C8C157-B2A4-4DDE-B153-233E46109F39}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {41C8C157-B2A4-4DDE-B153-233E46109F39}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {41C8C157-B2A4-4DDE-B153-233E46109F39}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {41C8C157-B2A4-4DDE-B153-233E46109F39}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {41C8C157-B2A4-4DDE-B153-233E46109F39}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {41C8C157-B2A4-4DDE-B153-233E46109F39}.Release|Any CPU.Build.0 = Release|Any CPU
+ {41C8C157-B2A4-4DDE-B153-233E46109F39}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {41C8C157-B2A4-4DDE-B153-233E46109F39}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {41C8C157-B2A4-4DDE-B153-233E46109F39}.Release|x86.ActiveCfg = Release|Any CPU
+ {CCAC74EA-08EE-41A8-BF01-8F1B7D207144}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {CCAC74EA-08EE-41A8-BF01-8F1B7D207144}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {CCAC74EA-08EE-41A8-BF01-8F1B7D207144}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {CCAC74EA-08EE-41A8-BF01-8F1B7D207144}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {CCAC74EA-08EE-41A8-BF01-8F1B7D207144}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {CCAC74EA-08EE-41A8-BF01-8F1B7D207144}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {CCAC74EA-08EE-41A8-BF01-8F1B7D207144}.Release|Any CPU.Build.0 = Release|Any CPU
+ {CCAC74EA-08EE-41A8-BF01-8F1B7D207144}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {CCAC74EA-08EE-41A8-BF01-8F1B7D207144}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {CCAC74EA-08EE-41A8-BF01-8F1B7D207144}.Release|x86.ActiveCfg = Release|Any CPU
+ {70B9EEDE-BC2A-42EB-933D-A94D7D4275CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {70B9EEDE-BC2A-42EB-933D-A94D7D4275CB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {70B9EEDE-BC2A-42EB-933D-A94D7D4275CB}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {70B9EEDE-BC2A-42EB-933D-A94D7D4275CB}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {70B9EEDE-BC2A-42EB-933D-A94D7D4275CB}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {70B9EEDE-BC2A-42EB-933D-A94D7D4275CB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {70B9EEDE-BC2A-42EB-933D-A94D7D4275CB}.Release|Any CPU.Build.0 = Release|Any CPU
+ {70B9EEDE-BC2A-42EB-933D-A94D7D4275CB}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {70B9EEDE-BC2A-42EB-933D-A94D7D4275CB}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {70B9EEDE-BC2A-42EB-933D-A94D7D4275CB}.Release|x86.ActiveCfg = Release|Any CPU
+ {5B91935A-7ED6-4496-871B-6AD25BC3F097}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {5B91935A-7ED6-4496-871B-6AD25BC3F097}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {5B91935A-7ED6-4496-871B-6AD25BC3F097}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {5B91935A-7ED6-4496-871B-6AD25BC3F097}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {5B91935A-7ED6-4496-871B-6AD25BC3F097}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {5B91935A-7ED6-4496-871B-6AD25BC3F097}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {5B91935A-7ED6-4496-871B-6AD25BC3F097}.Release|Any CPU.Build.0 = Release|Any CPU
+ {5B91935A-7ED6-4496-871B-6AD25BC3F097}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {5B91935A-7ED6-4496-871B-6AD25BC3F097}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {5B91935A-7ED6-4496-871B-6AD25BC3F097}.Release|x86.ActiveCfg = Release|Any CPU
+ {6BBEDCA5-1183-49EE-AE80-0269DEB2EDEF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6BBEDCA5-1183-49EE-AE80-0269DEB2EDEF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6BBEDCA5-1183-49EE-AE80-0269DEB2EDEF}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {6BBEDCA5-1183-49EE-AE80-0269DEB2EDEF}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {6BBEDCA5-1183-49EE-AE80-0269DEB2EDEF}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {6BBEDCA5-1183-49EE-AE80-0269DEB2EDEF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {6BBEDCA5-1183-49EE-AE80-0269DEB2EDEF}.Release|Any CPU.Build.0 = Release|Any CPU
+ {6BBEDCA5-1183-49EE-AE80-0269DEB2EDEF}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {6BBEDCA5-1183-49EE-AE80-0269DEB2EDEF}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {6BBEDCA5-1183-49EE-AE80-0269DEB2EDEF}.Release|x86.ActiveCfg = Release|Any CPU
+ {2E71EB42-595D-4181-A27B-BD85DCA739D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2E71EB42-595D-4181-A27B-BD85DCA739D1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2E71EB42-595D-4181-A27B-BD85DCA739D1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {2E71EB42-595D-4181-A27B-BD85DCA739D1}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {2E71EB42-595D-4181-A27B-BD85DCA739D1}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {2E71EB42-595D-4181-A27B-BD85DCA739D1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2E71EB42-595D-4181-A27B-BD85DCA739D1}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2E71EB42-595D-4181-A27B-BD85DCA739D1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {2E71EB42-595D-4181-A27B-BD85DCA739D1}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {2E71EB42-595D-4181-A27B-BD85DCA739D1}.Release|x86.ActiveCfg = Release|Any CPU
+ {8ED227D1-0C83-4A1D-91D0-1B9DFCD8E114}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {8ED227D1-0C83-4A1D-91D0-1B9DFCD8E114}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {8ED227D1-0C83-4A1D-91D0-1B9DFCD8E114}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {8ED227D1-0C83-4A1D-91D0-1B9DFCD8E114}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {8ED227D1-0C83-4A1D-91D0-1B9DFCD8E114}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {8ED227D1-0C83-4A1D-91D0-1B9DFCD8E114}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {8ED227D1-0C83-4A1D-91D0-1B9DFCD8E114}.Release|Any CPU.Build.0 = Release|Any CPU
+ {8ED227D1-0C83-4A1D-91D0-1B9DFCD8E114}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {8ED227D1-0C83-4A1D-91D0-1B9DFCD8E114}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {8ED227D1-0C83-4A1D-91D0-1B9DFCD8E114}.Release|x86.ActiveCfg = Release|Any CPU
+ {CBC26F2A-3B89-4DA4-A5A0-7C05A48EAF10}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {CBC26F2A-3B89-4DA4-A5A0-7C05A48EAF10}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {CBC26F2A-3B89-4DA4-A5A0-7C05A48EAF10}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {CBC26F2A-3B89-4DA4-A5A0-7C05A48EAF10}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {CBC26F2A-3B89-4DA4-A5A0-7C05A48EAF10}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {CBC26F2A-3B89-4DA4-A5A0-7C05A48EAF10}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {CBC26F2A-3B89-4DA4-A5A0-7C05A48EAF10}.Release|Any CPU.Build.0 = Release|Any CPU
+ {CBC26F2A-3B89-4DA4-A5A0-7C05A48EAF10}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {CBC26F2A-3B89-4DA4-A5A0-7C05A48EAF10}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {CBC26F2A-3B89-4DA4-A5A0-7C05A48EAF10}.Release|x86.ActiveCfg = Release|Any CPU
+ {BDE04BD3-40A0-4B8E-A0B9-7729FFB7D1C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {BDE04BD3-40A0-4B8E-A0B9-7729FFB7D1C2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {BDE04BD3-40A0-4B8E-A0B9-7729FFB7D1C2}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {BDE04BD3-40A0-4B8E-A0B9-7729FFB7D1C2}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {BDE04BD3-40A0-4B8E-A0B9-7729FFB7D1C2}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {BDE04BD3-40A0-4B8E-A0B9-7729FFB7D1C2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {BDE04BD3-40A0-4B8E-A0B9-7729FFB7D1C2}.Release|Any CPU.Build.0 = Release|Any CPU
+ {BDE04BD3-40A0-4B8E-A0B9-7729FFB7D1C2}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {BDE04BD3-40A0-4B8E-A0B9-7729FFB7D1C2}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {BDE04BD3-40A0-4B8E-A0B9-7729FFB7D1C2}.Release|x86.ActiveCfg = Release|Any CPU
+ {19ADDEEC-EAF9-4B42-8EEC-86CD389D834F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {19ADDEEC-EAF9-4B42-8EEC-86CD389D834F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {19ADDEEC-EAF9-4B42-8EEC-86CD389D834F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {19ADDEEC-EAF9-4B42-8EEC-86CD389D834F}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {19ADDEEC-EAF9-4B42-8EEC-86CD389D834F}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {19ADDEEC-EAF9-4B42-8EEC-86CD389D834F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {19ADDEEC-EAF9-4B42-8EEC-86CD389D834F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {19ADDEEC-EAF9-4B42-8EEC-86CD389D834F}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {19ADDEEC-EAF9-4B42-8EEC-86CD389D834F}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {19ADDEEC-EAF9-4B42-8EEC-86CD389D834F}.Release|x86.ActiveCfg = Release|Any CPU
+ {2A606EB5-47BD-47B1-97EB-8C208DF63ABF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2A606EB5-47BD-47B1-97EB-8C208DF63ABF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2A606EB5-47BD-47B1-97EB-8C208DF63ABF}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {2A606EB5-47BD-47B1-97EB-8C208DF63ABF}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {2A606EB5-47BD-47B1-97EB-8C208DF63ABF}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {2A606EB5-47BD-47B1-97EB-8C208DF63ABF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2A606EB5-47BD-47B1-97EB-8C208DF63ABF}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2A606EB5-47BD-47B1-97EB-8C208DF63ABF}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {2A606EB5-47BD-47B1-97EB-8C208DF63ABF}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {2A606EB5-47BD-47B1-97EB-8C208DF63ABF}.Release|x86.ActiveCfg = Release|Any CPU
+ {BFAB0E32-43F3-4A0E-9409-FC57FCF4BF14}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {BFAB0E32-43F3-4A0E-9409-FC57FCF4BF14}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {BFAB0E32-43F3-4A0E-9409-FC57FCF4BF14}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {BFAB0E32-43F3-4A0E-9409-FC57FCF4BF14}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {BFAB0E32-43F3-4A0E-9409-FC57FCF4BF14}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {BFAB0E32-43F3-4A0E-9409-FC57FCF4BF14}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {BFAB0E32-43F3-4A0E-9409-FC57FCF4BF14}.Release|Any CPU.Build.0 = Release|Any CPU
+ {BFAB0E32-43F3-4A0E-9409-FC57FCF4BF14}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {BFAB0E32-43F3-4A0E-9409-FC57FCF4BF14}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {BFAB0E32-43F3-4A0E-9409-FC57FCF4BF14}.Release|x86.ActiveCfg = Release|Any CPU
+ {EE3EB8BB-A24E-4F71-8277-1C6DAE652E2C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {EE3EB8BB-A24E-4F71-8277-1C6DAE652E2C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {EE3EB8BB-A24E-4F71-8277-1C6DAE652E2C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {EE3EB8BB-A24E-4F71-8277-1C6DAE652E2C}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {EE3EB8BB-A24E-4F71-8277-1C6DAE652E2C}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {EE3EB8BB-A24E-4F71-8277-1C6DAE652E2C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {EE3EB8BB-A24E-4F71-8277-1C6DAE652E2C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {EE3EB8BB-A24E-4F71-8277-1C6DAE652E2C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {EE3EB8BB-A24E-4F71-8277-1C6DAE652E2C}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {EE3EB8BB-A24E-4F71-8277-1C6DAE652E2C}.Release|x86.ActiveCfg = Release|Any CPU
+ {969644BC-B209-4458-8DC1-041D7A9ADD3B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {969644BC-B209-4458-8DC1-041D7A9ADD3B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {969644BC-B209-4458-8DC1-041D7A9ADD3B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {969644BC-B209-4458-8DC1-041D7A9ADD3B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {969644BC-B209-4458-8DC1-041D7A9ADD3B}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {969644BC-B209-4458-8DC1-041D7A9ADD3B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {969644BC-B209-4458-8DC1-041D7A9ADD3B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {969644BC-B209-4458-8DC1-041D7A9ADD3B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {969644BC-B209-4458-8DC1-041D7A9ADD3B}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {969644BC-B209-4458-8DC1-041D7A9ADD3B}.Release|x86.ActiveCfg = Release|Any CPU
+ {21777EAF-74FD-4D0B-947A-C602D8D3EBBA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {21777EAF-74FD-4D0B-947A-C602D8D3EBBA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {21777EAF-74FD-4D0B-947A-C602D8D3EBBA}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {21777EAF-74FD-4D0B-947A-C602D8D3EBBA}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {21777EAF-74FD-4D0B-947A-C602D8D3EBBA}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {21777EAF-74FD-4D0B-947A-C602D8D3EBBA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {21777EAF-74FD-4D0B-947A-C602D8D3EBBA}.Release|Any CPU.Build.0 = Release|Any CPU
+ {21777EAF-74FD-4D0B-947A-C602D8D3EBBA}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {21777EAF-74FD-4D0B-947A-C602D8D3EBBA}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {21777EAF-74FD-4D0B-947A-C602D8D3EBBA}.Release|x86.ActiveCfg = Release|Any CPU
+ {DAE4FFC2-B446-4020-8578-19B816FAA40A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {DAE4FFC2-B446-4020-8578-19B816FAA40A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {DAE4FFC2-B446-4020-8578-19B816FAA40A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {DAE4FFC2-B446-4020-8578-19B816FAA40A}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {DAE4FFC2-B446-4020-8578-19B816FAA40A}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {DAE4FFC2-B446-4020-8578-19B816FAA40A}.Debug|x86.Build.0 = Debug|Any CPU
+ {DAE4FFC2-B446-4020-8578-19B816FAA40A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {DAE4FFC2-B446-4020-8578-19B816FAA40A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {DAE4FFC2-B446-4020-8578-19B816FAA40A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {DAE4FFC2-B446-4020-8578-19B816FAA40A}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {DAE4FFC2-B446-4020-8578-19B816FAA40A}.Release|x86.ActiveCfg = Release|Any CPU
+ {DAE4FFC2-B446-4020-8578-19B816FAA40A}.Release|x86.Build.0 = Release|Any CPU
+ {91D8B4E8-1973-40C6-AF44-DBFEEAAF0C7F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {91D8B4E8-1973-40C6-AF44-DBFEEAAF0C7F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {91D8B4E8-1973-40C6-AF44-DBFEEAAF0C7F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {91D8B4E8-1973-40C6-AF44-DBFEEAAF0C7F}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {91D8B4E8-1973-40C6-AF44-DBFEEAAF0C7F}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {91D8B4E8-1973-40C6-AF44-DBFEEAAF0C7F}.Debug|x86.Build.0 = Debug|Any CPU
+ {91D8B4E8-1973-40C6-AF44-DBFEEAAF0C7F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {91D8B4E8-1973-40C6-AF44-DBFEEAAF0C7F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {91D8B4E8-1973-40C6-AF44-DBFEEAAF0C7F}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {91D8B4E8-1973-40C6-AF44-DBFEEAAF0C7F}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {91D8B4E8-1973-40C6-AF44-DBFEEAAF0C7F}.Release|x86.ActiveCfg = Release|Any CPU
+ {91D8B4E8-1973-40C6-AF44-DBFEEAAF0C7F}.Release|x86.Build.0 = Release|Any CPU
+ {E256695F-8607-4A79-ABA5-6FED3A400C71}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E256695F-8607-4A79-ABA5-6FED3A400C71}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E256695F-8607-4A79-ABA5-6FED3A400C71}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {E256695F-8607-4A79-ABA5-6FED3A400C71}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {E256695F-8607-4A79-ABA5-6FED3A400C71}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {E256695F-8607-4A79-ABA5-6FED3A400C71}.Debug|x86.Build.0 = Debug|Any CPU
+ {E256695F-8607-4A79-ABA5-6FED3A400C71}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E256695F-8607-4A79-ABA5-6FED3A400C71}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E256695F-8607-4A79-ABA5-6FED3A400C71}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {E256695F-8607-4A79-ABA5-6FED3A400C71}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {E256695F-8607-4A79-ABA5-6FED3A400C71}.Release|x86.ActiveCfg = Release|Any CPU
+ {E256695F-8607-4A79-ABA5-6FED3A400C71}.Release|x86.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(NestedProjects) = preSolution
+ {2218422E-76B4-4128-ACFF-4CE824B0E0CE} = {A42B0FAF-687B-4E2A-845B-BF3D2B5FF6BC}
+ {73398563-F556-4345-80D3-E121F0AA84D2} = {4721A7AC-65B8-48C0-A7CC-BF4B7A2B9D02}
+ {3E968D84-7C23-42E9-A443-6355FAA845E2} = {206CDF5A-68B2-431A-B28D-B8F43C0697A6}
+ {14856482-95D3-4A02-968C-665F3D08F94D} = {206CDF5A-68B2-431A-B28D-B8F43C0697A6}
+ {A724F80D-4341-4ECA-AC43-CF84A3F03779} = {206CDF5A-68B2-431A-B28D-B8F43C0697A6}
+ {3A8D2349-6E97-47A2-AC49-EFE7D89C0344} = {2218422E-76B4-4128-ACFF-4CE824B0E0CE}
+ {519A7B72-D144-436D-AAC3-7BAAEAD3FF52} = {A42B0FAF-687B-4E2A-845B-BF3D2B5FF6BC}
+ {77363223-98F2-4724-8044-569C6485B3A9} = {2218422E-76B4-4128-ACFF-4CE824B0E0CE}
+ {53F87D5C-4540-4AFD-BD19-E081FD8E586B} = {2218422E-76B4-4128-ACFF-4CE824B0E0CE}
+ {2B840832-3036-47D9-8F9B-560CD5C2BF90} = {A42B0FAF-687B-4E2A-845B-BF3D2B5FF6BC}
+ {ACBF3D12-379A-41D7-87DB-C376CFCBD131} = {4721A7AC-65B8-48C0-A7CC-BF4B7A2B9D02}
+ {79950922-9EFF-44E1-993A-4EA20DEC780A} = {4721A7AC-65B8-48C0-A7CC-BF4B7A2B9D02}
+ {D49ABE7E-B090-4473-B80B-B2432BBF8CB5} = {4721A7AC-65B8-48C0-A7CC-BF4B7A2B9D02}
+ {A8F9A08B-E704-4C77-939B-B56670A2A98D} = {5AF13B19-7B73-4C74-BB82-A9640BBB58B4}
+ {41C8C157-B2A4-4DDE-B153-233E46109F39} = {68A679AC-8B0D-45A4-8624-68C706089DEE}
+ {CCAC74EA-08EE-41A8-BF01-8F1B7D207144} = {68A679AC-8B0D-45A4-8624-68C706089DEE}
+ {70B9EEDE-BC2A-42EB-933D-A94D7D4275CB} = {EBC6AB0B-D961-4E31-A2B4-09F74F102B37}
+ {5B91935A-7ED6-4496-871B-6AD25BC3F097} = {EBC6AB0B-D961-4E31-A2B4-09F74F102B37}
+ {6BBEDCA5-1183-49EE-AE80-0269DEB2EDEF} = {EBC6AB0B-D961-4E31-A2B4-09F74F102B37}
+ {2E71EB42-595D-4181-A27B-BD85DCA739D1} = {45340404-FACD-4C79-9703-95966FEA84E3}
+ {8ED227D1-0C83-4A1D-91D0-1B9DFCD8E114} = {45340404-FACD-4C79-9703-95966FEA84E3}
+ {CBC26F2A-3B89-4DA4-A5A0-7C05A48EAF10} = {45340404-FACD-4C79-9703-95966FEA84E3}
+ {BDE04BD3-40A0-4B8E-A0B9-7729FFB7D1C2} = {79CD1278-66D5-458A-B75D-06EF4CC050A9}
+ {19ADDEEC-EAF9-4B42-8EEC-86CD389D834F} = {ABD851F4-394B-4999-BCD2-12CE41BEFE9D}
+ {2A606EB5-47BD-47B1-97EB-8C208DF63ABF} = {ABD851F4-394B-4999-BCD2-12CE41BEFE9D}
+ {BFAB0E32-43F3-4A0E-9409-FC57FCF4BF14} = {68A679AC-8B0D-45A4-8624-68C706089DEE}
+ {EE3EB8BB-A24E-4F71-8277-1C6DAE652E2C} = {D217E359-75BD-4875-817A-40A4819C4E83}
+ {1DE83058-60D9-4637-90EF-C3E46EAA9ACC} = {A42B0FAF-687B-4E2A-845B-BF3D2B5FF6BC}
+ {969644BC-B209-4458-8DC1-041D7A9ADD3B} = {1DE83058-60D9-4637-90EF-C3E46EAA9ACC}
+ {21777EAF-74FD-4D0B-947A-C602D8D3EBBA} = {1DE83058-60D9-4637-90EF-C3E46EAA9ACC}
+ {DAE4FFC2-B446-4020-8578-19B816FAA40A} = {19FF9025-F307-4507-9CCB-5D08D7D975E1}
+ {91D8B4E8-1973-40C6-AF44-DBFEEAAF0C7F} = {4721A7AC-65B8-48C0-A7CC-BF4B7A2B9D02}
+ {19FF9025-F307-4507-9CCB-5D08D7D975E1} = {EBC6AB0B-D961-4E31-A2B4-09F74F102B37}
+ {E256695F-8607-4A79-ABA5-6FED3A400C71} = {4721A7AC-65B8-48C0-A7CC-BF4B7A2B9D02}
+ EndGlobalSection
+ GlobalSection(MonoDevelopProperties) = preSolution
+ StartupItem = ..\Client\RemoteInfoClient\RemoteInfoClient.csproj
+ EndGlobalSection
+EndGlobal
diff --git a/src/AllExamples.sln.DotSettings b/src/AllExamples.sln.DotSettings
new file mode 100644
index 00000000..11f2c267
--- /dev/null
+++ b/src/AllExamples.sln.DotSettings
@@ -0,0 +1,3 @@
+
+ <data><IncludeFilters /><ExcludeFilters /></data>
+ <data />
\ No newline at end of file
diff --git a/src/Backbone.Todos/Backbone.Todos.csproj b/src/Backbone.Todos/Backbone.Todos.csproj
index e82b9ae5..066a9f92 100644
--- a/src/Backbone.Todos/Backbone.Todos.csproj
+++ b/src/Backbone.Todos/Backbone.Todos.csproj
@@ -1,5 +1,6 @@

+ DebugAnyCPU
@@ -12,7 +13,19 @@
PropertiesBackbone.TodosBackbone.Todos
- v3.5
+ v4.5
+ true
+
+
+
+
+ 4.0
+
+
+
+
+
+ true
@@ -22,6 +35,7 @@
DEBUG;TRACEprompt4
+ falsepdbonly
@@ -30,39 +44,46 @@
TRACEprompt4
+ false
-
- False
- ..\..\lib\ServiceStack.dll
+
+ ..\packages\ServiceStack.4.5.0\lib\net45\ServiceStack.dll
+ True
-
- False
- ..\..\lib\ServiceStack.Common.dll
+
+ ..\packages\ServiceStack.Client.4.5.0\lib\net45\ServiceStack.Client.dll
+ True
-
- False
- ..\..\lib\ServiceStack.Interfaces.dll
+
+ ..\packages\ServiceStack.Common.4.5.0\lib\net45\ServiceStack.Common.dll
+ True
-
- False
- ..\..\lib\ServiceStack.Redis.dll
+
+ ..\packages\ServiceStack.Interfaces.4.5.0\lib\portable-wp80+sl5+net45+win8+wpa81+monotouch+monoandroid+xamarin.ios10\ServiceStack.Interfaces.dll
+ True
-
- False
- ..\..\lib\ServiceStack.ServiceInterface.dll
+
+ ..\packages\ServiceStack.Redis.4.5.0\lib\net45\ServiceStack.Redis.dll
+ True
-
- ..\..\lib\ServiceStack.Text.dll
+
+ ..\packages\ServiceStack.Text.4.5.0\lib\net45\ServiceStack.Text.dll
+ True
-
+
+
+
+
+
+
-
+
@@ -80,11 +101,11 @@
-
-
-
-
-
+
+
+
+
+
@@ -93,9 +114,16 @@
-
+
+
+
+
+ 10.0
+ $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
+
-
+
+
@@ -104,7 +132,7 @@
True11809/
- http://localhost/Backbone.Todos
+ http://localhost:11809/FalseFalse
@@ -113,6 +141,11 @@
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Backbone.Todos/default.htm b/src/Backbone.Todos/default.htm
index 2113a076..a08250b3 100644
--- a/src/Backbone.Todos/default.htm
+++ b/src/Backbone.Todos/default.htm
@@ -1,68 +1,60 @@
-
-
+
Backbone Demo: Todos
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
+ ServiceStack docs is a collection of all documentation found in the README.md and wiki pages that are in amongst all of ServiceStack's GitHub Open Source projects.
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Docs/examples/servicestack-examples.md b/src/Docs/examples/servicestack-examples.md
new file mode 100644
index 00000000..403f8aa6
--- /dev/null
+++ b/src/Docs/examples/servicestack-examples.md
@@ -0,0 +1,46 @@
+[Join the new google group](http://groups.google.com/group/servicestack) or
+follow [@demisbellot](http://twitter.com/demisbellot) and [@ServiceStack](http://twitter.com/servicestack)
+for twitter updates.
+
+#Example Projects built with [ServiceStack](~/framework/overview), [C# RedisClient](~/redis-client/redis-client), [OrmLite](~/ormlite/ormlite-overview), etc
+
+## Live Demo
+
+A live demo and tutorials are available at the following locations:
+
+### [Backbone.js TODO app with REST and Redis backend](http://mono.servicestack.net/Backbone.Todos/)
+[](http://mono.servicestack.net/Backbone.Todos/)
+
+### [Creating a Hello World Web service from scratch](http://mono.servicestack.net/ServiceStack.Hello/)
+[](http://mono.servicestack.net/ServiceStack.Hello/)
+
+### [GitHub-like browser to manage remote filesystem over REST](http://mono.servicestack.net/RestFiles/)
+[](http://mono.servicestack.net/RestFiles/)
+
+### [Creating a StackOverflow-like app in Redis](http://mono.servicestack.net/RedisStackOverflow/)
+[](http://mono.servicestack.net/RedisStackOverflow/)
+
+### [Complete REST Web service example](http://mono.servicestack.net/ServiceStack.MovieRest/)
+[](http://mono.servicestack.net/ServiceStack.MovieRest/)
+
+### [Calling Web Services with Ajax](http://mono.servicestack.net/ServiceStack.Examples.Clients/)
+[](http://mono.servicestack.net/ServiceStack.Examples.Clients/)
+
+### Other examples
+* [Calling Web Services with Mono Touch](http://www.servicestack.net/monotouch/remote-info/)
+* [Calling Web Services using Silverlight](http://mono.servicestack.net/ServiceStack.Examples.Clients/Silverlight.htm)
+* [Calling SOAP 1.1 Web Service Examples](http://mono.servicestack.net/ServiceStack.Examples.Clients/Soap11.aspx)
+* [Calling SOAP 1.2 Web Service Examples](http://mono.servicestack.net/ServiceStack.Examples.Clients/Soap12.aspx)
+
+_All live examples hosted on CentOS/Nginx/FastCGI/Mono_
+
+# Download
+
+You can find the latest releases for download at:
+
+* [ServiceStack.Examples/downloads](https://github.com/ServiceStack/ServiceStack.Examples/downloads)
+
+
+### Troubleshooting
+
+- Since the example project uses 32bit Sqlite.dll, on a 64bit machine you must set IIS to run 32bit apps (in the App Domain config)
\ No newline at end of file
diff --git a/src/Docs/favicon.ico b/src/Docs/favicon.ico
new file mode 100644
index 00000000..af0117ed
Binary files /dev/null and b/src/Docs/favicon.ico differ
diff --git a/src/Docs/framework/accessing-ihttprequest.md b/src/Docs/framework/accessing-ihttprequest.md
new file mode 100644
index 00000000..c216c4dc
--- /dev/null
+++ b/src/Docs/framework/accessing-ihttprequest.md
@@ -0,0 +1,69 @@
+# Access the HTTP Request in Web Services
+
+By default ServiceStack provides a clean, dependency-free IService to implement your Web Services logic in. The philosophy behind this approach is that the less dependencies you have on your environment and its request context, the more testable and re-usable your services become.
+
+### Advantages for living without it
+If you don't need to access the HTTP Request context there is nothing stopping you from having your same IService implementation processing requests from a message queue which we've done for internal projects (which incidentally is the motivation behind the **asynconeway** endpoint, to signal requests that are safe for deferred execution).
+
+## Injecting the IRequestContext into your Service
+Although working in a clean-room can be ideal ideal from re-usability and testability point of view, you stand the chance of missing out a lot of the features present in HTTP. So not wanting to limit your web services usefulness, this feature of accessing the RequestContext has been present in ServiceStack from early on however because it hasn't been well documented its not very well-known (An issue this wiki page hopes to correct :)
+
+Just like using built-in Funq IOC container, the way to tell ServiceStack to inject the request context is by implementing the [IRequiresRequestContext](https://github.com/ServiceStack/ServiceStack.Interfaces/blob/master/src/ServiceStack.ServiceHost/IRequiresRequestContext.cs) interface which will get the [IRequestContext](https://github.com/ServiceStack/ServiceStack.Interfaces/blob/master/src/ServiceStack.ServiceHost/IRequestContext.cs) inject before each request.
+
+ public interface IRequestContext : IDisposable
+ {
+ T Get() where T : class;
+
+ string IpAddress { get; }
+
+ IDictionary Cookies { get; }
+
+ EndpointAttributes EndpointAttributes { get; }
+
+ IRequestAttributes RequestAttributes { get; }
+
+ string MimeType { get; }
+
+ string CompressionType { get; }
+
+ string AbsoluteUri { get; }
+
+ IFile[] Files { get; }
+ }
+
+
+This will allow your services to inspect any Cookies or download any Files that were sent with the request.
+Note: to set Response Cookies or Headers, return the [HttpResult](https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack.Common/Web/HttpResult.cs) object.
+
+## Accessing the IHttpRequest and IHttpResponse using filters
+A recent addition to ServiceStack is the ability to register custom Request and Response filters. These should be registered in your AppHost.Configure() onload script:
+
+* The Request Filters are applied before the service gets called and accepts:
+_([IHttpRequest](https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack.ServiceHost/IHttpRequest.cs), [IHttpResponse](https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack.ServiceHost/IHttpResponse.cs), RequestDto)_ e.g:
+
+ //Add a request filter to check if the user has a session initialized
+ this.RequestFilters.Add((httpReq, httpReq, requestDto) =>
+ {
+ var sessionId = httpReq.GetCookieValue("user-session");
+ if (sessionId == null)
+ {
+ httpReq.ReturnAuthRequired();
+ }
+ });
+
+
+* The Response Filters are applied after your service is called and accepts:
+_([IHttpRequest](https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack.ServiceHost/IHttpRequest.cs), [IHttpResponse](https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack.ServiceHost/IHttpResponse.cs), ResponseDto)_ e.g:
+
+ //Add a response filter to add a 'Content-Disposition' header so browsers treat it as a native .csv file
+ this.ResponseFilters.Add((req, res, dto) =>
+ {
+ if (req.ResponseContentType == ContentType.Csv)
+ {
+ res.AddHeader(HttpHeaders.ContentDisposition,
+ string.Format("attachment;filename={0}.csv", req.OperationName));
+ }
+ });
+
+
+[ keys);
+
+ //Retrieves the specified item from the cache.
+ T Get(string key);
+
+ //Increments the value of the specified key by the given amount.
+ //The operation is atomic and happens on the server.
+ //A non existent value at key starts at 0
+ long Increment(string key, uint amount);
+
+ //Increments the value of the specified key by the given amount.
+ //The operation is atomic and happens on the server.
+ //A non existent value at key starts at 0
+ long Decrement(string key, uint amount);
+
+ //Adds a new item into the cache at the specified cache key only if the cache is empty.
+ bool Add(string key, T value);
+
+ //Sets an item into the cache at the cache key specified regardless if it already exists or not.
+ bool Set(string key, T value);
+
+
+ //Replaces the item at the cachekey specified only if an items exists at the location already.
+ bool Replace(string key, T value);
+
+ bool Add(string key, T value, DateTime expiresAt);
+ bool Set(string key, T value, DateTime expiresAt);
+ bool Replace(string key, T value, DateTime expiresAt);
+
+ bool Add(string key, T value, TimeSpan expiresIn);
+ bool Set(string key, T value, TimeSpan expiresIn);
+ bool Replace(string key, T value, TimeSpan expiresIn);
+
+
+ //Invalidates all data on the cache.
+ void FlushAll();
+
+ //Retrieves multiple items from the cache.
+ //The default value of T is set for all keys that do not exist.
+ IDictionary GetAll(IEnumerable keys);
+
+
+ //Sets multiple items to the cache.
+ void SetAll(IDictionary values);
+ }
+
+
+[
+ {
+ if (req.ResponseContentType == ContentType.Csv)
+ {
+ res.AddHeader(HttpHeaders.ContentDisposition,
+ string.Format("attachment;filename={0}.csv", req.OperationName));
+ }
+ });
+
+
+Note: **ServiceStack already does this for you** though it still serves a good example to show how you can plug-in your own custom format. If you wish, you can remove all custom formats with (inside AppHost.Configure()):
+ this.ContentTypeFilters.ClearCustomFilters();
+
+The ability to automatically to register another format and provide immediate value and added functionality to all your existing web services (without any code-changes or configuration) we believe is a testament to ServiceStack's clean design of using strongly-typed 'message-based' DTOs to let you develop clean, testable and re-usable web services. No code-gen or marshalling is required to bind to an abstract method signature, every request and calling convention maps naturally to your web services DTOs.
+
+
+## Usage
+The CSV format is effectively a first-class supported format so everything should work as expected, including being registered as an available format on ServiceStack's metadata index page:
+
+* [/servicestack/metadata](http://www.servicestack.net/ServiceStack.MovieRest/servicestack/metadata)
+
+And being able to preview the output of a service:
+
+* [/servicestack/csv/metadata?op=Movie](http://www.servicestack.net/ServiceStack.MovieRest/servicestack/csv/metadata?op=Movie)
+
+By default they are automatically available using ServiceStack's standard calling conventions, e.g:
+
+* [/csv/syncreply/Movies](http://www.servicestack.net/ServiceStack.MovieRest/csv/syncreply/Movies)
+
+### REST Usage
+CSV also works just as you would expect with user-defined RESTful urls, i.e. you can append ?format=csv to specify the format in the url e.g:
+
+* [/movies?format=csv](http://www.servicestack.net/ServiceStack.MovieRest/movies?format=csv)
+
+This is how the above web service output looks when opened up in [google docs](https://spreadsheets.google.com/pub?key=0AjnFdBrbn8_fdDBwX0Rha04wSTNWZDZlQXctcmp2bVE&hl=en_GB&output=html)
+
+
+Alternative in following with the HTTP specification you can also specify content-type `"text/csv"` in the *Accept* header of your HttpClient, e.g:
+
+ var httpReq = (HttpWebRequest)WebRequest.Create("http://mono.servicestack.net/ServiceStack.MovieRest/movies");
+ httpReq.Accept = "text/csv";
+ var csv = new StreamReader(httpReq.GetResponse().GetResponseStream()).ReadToEnd();
+
+
+## Limitations
+As most readers familiar with the CSV format will know there are some inherent limitations with CSV-format namely it is a flat-structured tabular data format that really only supports serialization of a single result set.
+This limitation remains, although as the choice of what to serialize is based on the following conventions:
+
+* If you only return one result in your DTO it will serialize that.
+* If you return multiple results it will pick the first IEnumerable<> property or if it doesn't exist picks the first property.
+* Non-enumerable results are treated like a single row.
+
+Basically if you only return 1 result it should work as expected otherwise it will chose the best candidate based on the rules above.
+
+The second major limitation is that it doesn't yet include a CSV deserializer (currently on the TODO list), so while you can view the results in CSV format you can't post data to your web service in CSV and have it automatically deserialize for you. You can however still upload a CSV file and parse it manually yourself.
+
+#Features
+Unlike most CSV serializers that can only serialize rows of primitive values, the CsvSeriliaizer uses the [JSV Format](~/text-serializers/jsv-format) under the hood so even [complex types](https://spreadsheets.google.com/pub?key=0AjnFdBrbn8_fdG83eWdGM1lnVW9PMlplcmVDYWtXeVE&hl=en_GB&output=html) will be serialized in fields in a easy to read format - no matter how deep its hierarchy.
+
+
+Feel free to discuss or find more about any of these features at the [Service Stack Google Group](https://groups.google.com/forum/#!forum/servicestack)
+
+[{jsondto}
+
+Because of the browser behavior of the script tag, you can embed any markup or javascript unescaped.
+Unless it has none or a 'javascript' type attribute, the browser doesn't execute it letting you to access the contents with:
+
+ document.getElementById('dto').innerHTML
+
+From there, javascript invoked just before the closing body tag (i.e. the fastest time to run DOM-altering javascript) which takes the data,
+builds up a html string and injects the generated markup in the contents of the page.
+
+After the report is rendered, and because JavaScript can :) UX-friendly behaviors are applied to the document allowing the user to sort the table data on each column as well as providing an easy way to take a copy of the JSON data source.
+
+For what it does, the JavaScript is very terse considering no JavaScript framework was used. In most cases the JSON payload is a lot larger than the entire JavaScript used to render the report :)
+
+### Advantages of a strong-typed, code-first web service framework
+
+Although hard to believe, most of the above web service examples were developed before ServiceStack's CSV and HTML format existed.
+No code-changes were required in order to take advantage of the new formats, they were automatically available after replacing the ServiceStack.dlls with the latest version (v1.81+)
+
+Being able to generically provide new features like this shows the advantage of ServiceStack's strong-typed, code-first approach to developing web services that lets you focus on your app-specific logic as you only need to return C#/.NET objects or throw C#/.NET exceptions which gets automatically handled, and hosted on a number of different endpoints in a variety of different formats.
+
+Out of the box REST, RPC and SOAP endpoints types are automatically provided, in JSON, XML, CSV, JSV and now the new HTML report format above.
+
+Follow [@demisbellot](http://twitter.com/demisbellot) and [@ServiceStack](http://twitter.com/ServiceStack) for twitter updates
+
+
+
+[("/todos")
+ .Add("/todos/{Id}");
+ }
+ }
+
+
+ //REST Resource DTO
+ public class Todo
+ {
+ public long Id { get; set; }
+ public string Content { get; set; }
+ public int Order { get; set; }
+ public bool Done { get; set; }
+ }
+
+ //Todo REST Service implementation
+ public class TodoService : RestServiceBase
+ {
+ public TodoRepository Repository { get; set; } //Injected by IOC
+
+ public override object OnGet(Todo request)
+ {
+ if (request.Id != default(long))
+ return Repository.GetById(request.Id);
+
+ return Repository.GetAll();
+ }
+
+ //Called for both new and updated TODOs
+ public override object OnPost(Todo todo)
+ {
+ return Repository.Store(todo);
+ }
+
+ public override object OnDelete(Todo request)
+ {
+ Repository.DeleteById(request.Id);
+ return null;
+ }
+ }
+
+
+### Calling the above TODO REST service from any C#/.NET Client
+ //no code-gen required, can re-use above DTO's
+
+ var restClient = new JsonServiceClient("http://localhost/Backbone.Todo");
+ var all = restClient.Get>("/todos"); // Count = 0
+
+ var todo = restClient.Post("/todos", new Todo { Content = "New TODO", Order = 1 }); //todo.Id = 1
+ all = restClient.Get>("/todos"); // Count = 1
+
+ todo.Content = "Updated TODO";
+ todo = restClient.Post("/todos", todo); // todo.Content = Updated TODO
+
+ restClient.Delete("/todos/" + todo.Id);
+ all = restClient.Get>("/todos"); // Count = 0
+
+
+### Calling the TODO REST service from jQuery
+
+ $.getJSON("http://localhost/Backbone.Todo/todos", function(todos) {
+ alert(todos.length == 1);
+ });
+
+
+That's all the application code required to create a simple REST web service.
+
+##Live Demo of Backbone TODO app (running on Linux/MONO):
+
+**[http://www.servicestack.net/Backbone.Todos/](http://www.servicestack.net/Backbone.Todos/)**
+
+Preview links using just the above code sample with (live demo running on Linux):
+
+ServiceStack's strong-typed nature allows it to infer a greater intelligence of your web services and is able to provide a
+host of functionality for free, out of the box without any configuration required:
+
+ * Host on different formats and endpoints: [XML](http://www.servicestack.net/Backbone.Todos/todos?format=xml),
+ [JSON](http://www.servicestack.net/Backbone.Todos/todos?format=json), [JSV](http://www.servicestack.net/Backbone.Todos/todos?format=jsv),
+ [CSV](http://www.servicestack.net/Backbone.Todos/todos?format=csv)
+
+ * [A HTML5 Report format to view your web services data in a human-friendly view](http://www.servicestack.net/Backbone.Todos/todos?format=html)
+
+ * [An auto generated api metadata page, with links to your web service XSD's and WSDL's](http://www.servicestack.net/Backbone.Todos/metadata)
+
+
+
+Download
+========
+
+To start developing web services with Service Stack we recommend starting with the ServiceStack.Examples project (includes ServiceStack.dlls):
+
+ * **[ServiceStack.Examples/downloads/](https://github.com/ServiceStack/ServiceStack.Examples/downloads)**
+
+If you already have ServiceStack and just want to download the latest release binaries get them at:
+
+ * **[ServiceStack/downloads/](https://github.com/ServiceStack/ServiceStack/downloads)**
+
+Alternatively if you want keep up with the latest version you can always use the power of Git :)
+
+ git clone git://github.com/ServiceStack/ServiceStack.git
+
+[Release notes for major releases](~/framework/release-notes)
+
+## Getting Started
+Online tutorials that walks you through developing and calling web services is available here:
+
+ * **[Read the documentation on the ServiceStack Wiki](~/framework/home)**
+ * [Creating a Hello World Web service](http://www.servicestack.net/ServiceStack.Hello/)
+ * [Calling Web Services from MonoTouch](http://www.servicestack.net/monotouch/remote-info/)
+
+
+# Features of a modern web services framework
+
+ Developed in the modern age, Service Stack provides an alternate, cleaner POCO-driven way of creating web services, featuring:
+
+### A DRY, strongly-typed 'pure model' REST Web Services Framework
+Unlike other web services frameworks ServiceStack let's you develop web services using strongly-typed models and DTO's.
+This lets ServiceStack and other tools to have a greater intelligence about your services allowing:
+
+- [Multiple serialization formats (JSON, XML, JSV and SOAP with extensible plugin model for more)](http://mono.servicestack.net/ServiceStack.Hello/servicestack/metadata)
+- [A single re-usable C# Generic Client (In JSON, JSV, XML and SOAP flavors) that can talk to all your services.](https://github.com/ServiceStack/ServiceStack.Extras/blob/master/doc/UsageExamples/UsingServiceClients.cs)
+- [Re-use your Web Service DTOs (i.e. no code-gen) on your client applications so you're never out-of-sync](https://github.com/ServiceStack/ServiceStack.Extras/blob/master/doc/UsageExamples/UsingServiceClients.cs)
+- [Automatic serialization of Exceptions in your DTOs ResponseStatus](https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack.ServiceInterface/ServiceBase.cs#L154)
+- [The possibility of a base class for all your services to put high-level application logic (i.e security, logging, etc)](https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack.ServiceInterface/ServiceBase.cs#L24)
+- [Highly testable, your in-memory unit tests for your service can also be used as integration tests](https://github.com/ServiceStack/ServiceStack/blob/master/tests/ServiceStack.WebHost.IntegrationTests/Tests/WebServicesTests.cs)
+- [Built-in rolling web service error logging (if Redis is Configured in your AppHost)](https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack.ServiceInterface/ServiceBase.cs#L122)
+- [Rich REST and HTML support on all web services with x-www-form-urlencoded & multipart/form-data (i.e. FORM posts and file uploads)](http://mono.servicestack.net/ServiceStack.Hello/)
+
+## Define web services following Martin Fowlers Data Transfer Object Pattern:
+
+Service Stack was heavily influenced by [**Martin Fowlers Data Transfer Object Pattern**](http://martinfowler.com/eaaCatalog/dataTransferObject.html):
+
+>When you're working with a remote interface, such as Remote Facade (388), each call to it is expensive.
+>As a result you need to reduce the number of calls, and that means that you need to transfer more data
+>with each call. One way to do this is to use lots of parameters.
+>However, this is often awkward to program - indeed, it's often impossible with languages such as Java
+>that return only a single value.
+>
+>The solution is to create a Data Transfer Object that can hold all the data for the call. It needs to be serializable to go across the connection.
+>Usually an assembler is used on the server side to transfer data between the DTO and any domain objects.
+
+The Request and Response DTO's used to define web services in ServiceStack are standard `DataContract` POCO's while the implementation just needs to inherit from a testable and dependency-free `IService`. As a bonus for keeping your DTO's in a separate dependency-free .dll, you're able to re-use them in your C#/.NET clients providing a strongly-typed API without any code-gen what-so-ever. Also your DTO's *define everything* Service Stack does not pollute your web services with any additional custom artifacts or markup.
+
+Service Stack re-uses the custom artifacts above and with zero-config and without imposing any extra burden on the developer adds discover-ability and provides hosting of your web service on a number of different physical end-points which as of today includes: XML (+REST), JSON (+REST), JSV (+REST) and SOAP 1.1 / SOAP 1.2.
+
+### WCF the anti-DTO Web Services Framework
+Unfortunately this best-practices convention is effectively discouraged by Microsoft's WCF SOAP Web Services framework as they encourage you to develop API-specific RPC method calls by mandating the use method signatures to define your web services API. This results in less re-usable, more client-specific APIs that encourages more remote method calls.
+
+Unhappy with this perceived anit-pattern in WCF, ServiceStack was born providing a Web Service framework that embraces best-practices for calling remote services, using config-free, convention-based DTO's.
+
+
+### Full support for unit and integration tests
+Your application logic should not be tied to a third party vendor's web service host platform.
+In Service Stack they're not, your web service implementations are host and end-point ignorant, dependency-free and can be unit-tested independently of ASP.NET, Service Stack or its IOC.
+
+Without any code changes unit tests written can be re-used and run as integration tests simply by switching the IServiceClient used to point to a configured end-point host.
+
+### Built-in Funq IOC container
+Configured to auto-wire all of your web services with your registered dependencies.
+[Funq](http://funq.codeplex.com) was chosen for it's [high-performance](http://www.codeproject.com/Articles/43296/Introduction-to-Munq-IOC-Container-for-ASP-NET.aspx), low footprint and intuitive full-featured minimalistic API.
+
+### Encourages development of message-style, re-usable and batch-full web services
+Entire POCO types are used to define the request and response DTO's to promote the creation well-defined coarse-grained web services. Message-based interfaces are best-practices when dealing with out-of-process calls as they are can batch more work using less network calls and are ultimately more re-usable as the same operation can be called using different calling semantics. This is in stark contrast to WCF's Operation or Service contracts which encourage RPC-style, application-specific web services by using method signatures to define each operation.
+
+As it stands in general-purpose computing today, there is nothing more expensive you can do than a remote network call. Although easier for the newbie developer, by using _methods_ to define web service operations, WCF is promoting bad-practices by encouraging them to design and treat web-service calls like normal function calls even though they are millions of times slower. Especially at the app-server tier, nothing hurts performance and scalability of your client and server than multiple dependent and synchronous web service calls.
+
+Batch-full, message-based web services are ideally suited in development of SOA services as they result in fewer, richer and more re-usable web services that need to be maintained. RPC-style services normally manifest themselves from a *client perspective* that is the result of the requirements of a single applications data access scenario. Single applications come and go over time while your data and services are poised to hang around for the longer term. Ideally you want to think about the definition of your web service from a *services and data perspective* and how you can expose your data so it is more re-usable by a number of your clients.
+
+### Cross Platform Web Services Framework
+With Mono on Linux now reaching full-maturity, Service Stack runs on .NET or Linux with Mono and can either be hosted inside an ASP.NET Web Application, Windows service or Console application running in or independently of a Web Server.
+
+### Low Coupling for maximum accessibility and testability
+No coupling between the transport's endpoint and your web service's payload. You can re-use your existing strongly-typed web service DTO's with any .NET client using the available Soap, Xml and Json Service Clients - giving you a strongly-typed API while at the same time avoiding the need for any generated code.
+
+ * The most popular web service endpoints are configured by default. With no extra effort, each new web service created is immediately available and [discoverable](http://www.servicestack.net/ServiceStack.Examples.Host.Web/ServiceStack/Metadata) on the following end points:
+ * [XML (+REST)](http://www.servicestack.net/ServiceStack.Examples.Host.Web/ServiceStack/Xml/Metadata?op=GetFactorial)
+ * [JSON (+REST)](http://www.servicestack.net/ServiceStack.Examples.Host.Web/ServiceStack/Json/Metadata?op=GetFactorial)
+ * [JSV (+REST)](http://www.servicestack.net/ServiceStack.Examples.Host.Web/ServiceStack/Jsv/Metadata?op=GetFactorial)
+ * [SOAP 1.1](http://www.servicestack.net/ServiceStack.Hello/servicestack/soap11)
+ * [SOAP 1.2](http://www.servicestack.net/ServiceStack.Hello/servicestack/soap12)
+ * View the [Service Stack endpoints page](~/framework/history-of-webservices) for our recommendations on which endpoint to use and when.
+
+# High Performance Sub Projects
+Also included in ServiceStack are libraries that are useful in the development of high performance web services:
+
+ * [ServiceStack.Text](~/text-serializers/json-csv-jsv-serializers) - The home of ServiceStack's JSON and JSV text serializers, the fastest text serializers for .NET
+ * [JsonSerializer](http://www.servicestack.net/mythz_blog/?p=344) - The fastest JSON Serializer for .NET. Over 3 times faster than other .NET JSON serialisers.
+ * [TypeSerializer](~/text-serializers/json-csv-jsv-serializers) - The JSV-format, a fast, compact text serializer that is very resilient to schema changes and is:
+ * 3.5x quicker and 2.6x smaller than the .NET XML DataContractSerializer and
+ * 5.3x quicker and 1.3x smaller than the .NET JSON DataContractSerializer - _[view the detailed benchmarks](http://www.servicestack.net/benchmarks/NorthwindDatabaseRowsSerialization.1000000-times.2010-02-06.html)_
+
+ * [ServiceStack.Redis](~/redis-client/redis-client) - An API complete C# [Redis](http://code.google.com/p/redis/) client with native support for persisting C# POCO objects.
+ * You can download the latest [RedisWindowsDownload Windows build for the Redis Server here].
+ * [Redis Admin UI](http://www.servicestack.net/mythz_blog/?p=381) - An Ajax GUI admin tool to help visualize your Redis data.
+
+ * [OrmLite](~/ormlite/ormlite-overview) - A convention-based, configuration free lightweight ORM that uses attributes from DataAnnotations to infer the table schema. Currently supports both Sqlite and SqlServer.
+
+ * [Caching](~/framework/caching-options) - A common interface for caching with providers for:
+ * Memcached
+ * In Memory Cache
+ * Redis
+
+
+## Find out More
+ * Twitter: to get updates of ServiceStack, follow [@demisbellot](http://twitter.com/demisbellot) or [@ServiceStack](http://twitter.com/ServiceStack) on twitter.
+ * Email any questions to _demis.bellot@gmail.com_
+
+## Future Roadmap
+Service Stack is under continuous improvement and is always adding features that are useful for high-performance, scalable and resilient web service scenarios. This is the current road map but is open to change.
+If you have suggestions for new features or want to prioritize the existing ones below: [http://code.google.com/p/servicestack/issues/entry you can leave feedback here].
+
+ * Add an opt-in durable Message Queue service processing of [AsyncOneWay] requests (with In Memory, Redis and RabbitMQ implementations)
+ * Enable [ProtoBuf.NET](http://code.google.com/p/protobuf-net/), TypeSerializer and CSV (for tabular datasets) web service endpoints
+ * Integrate the Spark View Engine and enable a HTML endpoint so web services can also return a HTML human-friendly view
+ * New REST web service endpoint developed in the 'Spirit of REST' with partitioning of GET / POST / PUT / DELETE requests and utilizing 'Accept mimetype' HTTP request header to determine the resulting content type.
+ * Code generated proxy classes for Objective-C, Java Script / Action Script (and Java or C++ if there's enough interest) clients.
+ * Develop a completely managed HTTP Web Service Host (at the moment looking at building on top of [Kayak HTTP](http://kayakhttp.com))
+ * Add support for 'Web Sockets' protocol
+
+## Similar open source projects
+Similar Open source .NET projects for developing or accessing web services include:
+
+ * Open Rasta - RESTful web service framework:
+ * [http://trac.caffeine-it.com/openrasta](http://trac.caffeine-it.com/openrasta)
+
+ * Rest Sharp - an open source REST client for .NET
+ * [http://restsharp.org](http://restsharp.org)
+
+
+## Troubleshooting
+
+For IIS 6.0-only web servers (i.e. without IIS 7 and compatibility-mode) IIS and ASP.NET requires mapping an extension in order to embed ServiceStack. You can use a default handled ASP.NET extension like *.ashx e.g.
+
+
+
+Which will change your urls will now look like:
+
+ http://localhost/servicestack.ashx/xml/syncreply/Hello?Name=World
+
+
+
+***
+
+Runs on both Mono and .NET 3.5. _(Live preview hosted on Mono / CentOS)_
+
diff --git a/src/Docs/framework/release-notes.md b/src/Docs/framework/release-notes.md
new file mode 100644
index 00000000..d6e52517
--- /dev/null
+++ b/src/Docs/framework/release-notes.md
@@ -0,0 +1,617 @@
+#ServiceStack 3.09 Release Notes
+
+## Latest version of Dapper built-in
+
+Now in ServiceStack is StackOverflow's own [benchmark leading](http://www.servicestack.net/benchmarks/) Micro ORM **[Dapper](http://code.google.com/p/dapper-dot-net/)**.
+This means a fresh NuGet install of ServiceStack now includes the 2 fastest Micro ORMS for .NET! :)
+
+OrmLite and Dapper are very similar in design in that they're simply useful extension methods on ADO.NET's `System.Data.*` interfaces, the difference being Dapper has extension methods of `IDbConnection` whilst OrmLite methods hangs off the lower `IDbCommand`. And because they both make use of 'clean POCOs' - they can be used interchangeably together on the same DB connection. This also allows them to both make use of `OrmLiteConnectionFactory` to configure connection manager over your DB ConnectionString.
+
+## Mvc Mini Profiler now baked in
+
+We've made ServiceStack's [HTML5 JSON Report Format](https://github.com/ServiceStack/ServiceStack/wiki/HTML5ReportFormat) even better by now including the excellent [Mvc Mini Profiler](http://code.google.com/p/mvc-mini-profiler/) - by [@jarrod_dixon](https://twitter.com/jarrod_dixon) and [@samsaffron](https://twitter.com/samsaffron).
+It's the same profiler used to profile and help speed up sites like [Stack Overflow](http://www.stackoverflow.com) and more recently the much faster [NuGet v2.0](http://nuget.org) website.
+
+As the MVC Mini Profiler is optimized for a .NET 4.0 MVC app, we've made some changes in order to integrate it into ServiceStack:
+
+ - Make it work in .NET 3.0 by backporting .NET 4.0 classes into **ServiceStack.Net30** namespace (Special thanks to OSS! :)
+ - Using Mono's **ConcurrentDictionary** classes
+ - Using [Lokad.com's Tuples](http://code.google.com/p/lokad-shared-libraries/source/browse/Source/Lokad.Shared/Tuples/Tuple.cs)
+ - Switched to using ServiceStack's much faster [Json Serializer](http://www.servicestack.net/docs/text-serializers/json-serializer)
+ - Reduced the overall footprint by replacing the use of jQuery and jQuery.tmpl with a much smaller [jquip (jQuery-in-parts)](https://github.com/mythz/jquip) dependency.
+ - Moved to the **ServiceStack.MiniProfiler** namespace and renamed to **Profiler** to avoid clashing with another Mvc Mini Profiler in the same project
+
+As a side-effect of integrating the Mvc Mini Profiler all ServiceStack .NET 3.0 projects can make use of .NET 4.0's ConcurrentDictionary and Tuple support, hassle free!
+
+### Using the MVC Mini Profiler
+
+Just like the [Normal Mvc Mini Profiler](http://code.google.com/p/mvc-mini-profiler/) you can enable it by starting it in your Global.asax, here's how to enable it for local requests:
+
+ protected void Application_BeginRequest(object src, EventArgs e)
+ {
+ if (Request.IsLocal)
+ Profiler.Start();
+ }
+
+ protected void Application_EndRequest(object src, EventArgs e)
+ {
+ Profiler.Stop();
+ }
+
+That's it! Now every time you view a web service in your browser (locally) you'll see a profiler view of your service broken down in different stages:
+
+
+
+By default you get to see how long it took ServiceStack to de-serialize your request, run any Request / Response Filters and more importantly how long it took to **Execute** your service.
+
+The profiler includes special support for SQL Profiling that can easily be enabled for OrmLite and Dapper by getting it to use a Profiled Connection using a ConnectionFilter:
+
+ this.Container.Register(c =>
+ new OrmLiteConnectionFactory(
+ "~/App_Data/db.sqlite".MapHostAbsolutePath(),
+ SqliteOrmLiteDialectProvider.Instance) {
+ ConnectionFilter = x => new ProfiledDbConnection(x, Profiler.Current)
+ });
+
+Refer to the [Main MVC MiniProfiler home page](http://code.google.com/p/mvc-mini-profiler/) for instructions on how to configure profiling for Linq2Sql and EntityFramework.
+
+It's also trivial to add custom steps enabling even finer-grained profiling for your services.
+Here's a [simple web service DB example](https://github.com/ServiceStack/ServiceStack/blob/master/tests/ServiceStack.WebHost.IntegrationTests/Services/ProfilerService.cs)
+returning a list of Movies using both a simple DB query and a dreaded N+1 query.
+
+ public class MiniProfiler
+ {
+ public string Type { get; set; }
+ }
+
+ public class MiniProfilerService : ServiceBase
+ {
+ public IDbConnectionFactory DbFactory { get; set; }
+
+ protected override object Run(MiniProfiler request)
+ {
+ var profiler = Profiler.Current;
+
+ using (var dbConn = DbFactory.OpenDbConnection())
+ using (var dbCmd = dbConn.CreateCommand())
+ using (profiler.Step("MiniProfiler Service"))
+ {
+ if (request.Type == "n1")
+ {
+ using (profiler.Step("N + 1 query"))
+ {
+ var results = new List();
+ foreach (var movie in dbCmd.Select())
+ {
+ results.Add(dbCmd.QueryById(movie.Id));
+ }
+ return results;
+ }
+ }
+
+ using (profiler.Step("Simple Select all"))
+ {
+ return dbCmd.Select();
+ }
+ }
+ }
+ }
+
+Calling the above service normally provides the following Profiler output:
+
+
+
+Whilst calling the service with the **n1** param yields the following warning:
+
+
+
+In both cases you see the actual SQL statements performed by clicking the **SQL** link. The N+1 query provides shows the following:
+
+
+
+Notice the special attention the MVC MiniProfiler team put into identifying **Duplicate** queries - Thanks Guys!
+
+
+## Download v3.09
+
+ * **[Using Nuget to add ServiceStack to an existing ASP.NET or MVC application](http://nuget.org/packages/ServiceStack)**
+ * [Download ServiceStack.Examples projects and Starter Templates](https://github.com/ServiceStack/ServiceStack.Examples/downloads)
+ * [Download just the ServiceStack.dlls binaries](https://github.com/ServiceStack/ServiceStack/downloads)
+ * [Other ServiceStack projects available on NuGet](http://www.servicestack.net/docs/framework/nuget)
+
+.
+
+Follow [@demisbellot](http://twitter.com/demisbellot) and [@ServiceStack](http://twitter.com/ServiceStack) for twitter updates
+
+*****
+
+##ServiceStack 2.28 Release Notes
+
+This release includes a few enhancements and catches up on all the pull requests and most of the issues that were submitted
+since the last release.
+
+## ServiceStack is now using Trello.com for features/issue tracking
+ServiceStack now hosts and tracks its new issues and feature requests on a
+[live public Trello dash board](https://trello.com/board/servicestack-features-bugs/4e9fbbc91065f8e9c805641c) where anyone
+is welcome to add to, or simply check the progress of their features/issues in the work queue.
+
+## Special Thanks to Contributors
+We now have a special [contributor page](https://github.com/ServiceStack/ServiceStack/blob/master/CONTRIBUTORS.md)
+and section on the [main project page](https://github.com/ServiceStack/ServiceStack) showing the many contributors to ServiceStack's
+projects over the years. We hope we haven't missed anyone out - please send us a pull request if you would like to be added.
+
+The major features in this release include:
+
+## Redis MQ Client/Server
+A redis-based message queue client/server that can be hosted in any .NET or ASP.NET application. The **RedisMqHost** lives in the
+[ServiceStack.Redis](https://github.com/ServiceStack/ServiceStack.Redis) project and brings the many benefits of using a Message Queue.
+The current unoptimized version uses only a single background thread although initial benchmarks shows it can
+send/receive a promising **4.6k messages /sec** when accessing a local redis instance (on my dev workstation).
+
+Major kudos goes to [Redis](http://redis.io) which thanks to its versatility, has Pub/Sub and Lists primitives that makes implementing a Queue trivial.
+
+The first version already sports the major features you've come to expect from a MQ:
+
+ - Each service maintains its own Standard and Priority MQ's
+ - Automatic Retries on messages generating errors with Failed messages sent to a DLQ (Dead Letter Queue) when its Retry threshold is reached.
+ - Each message can have a ReplyTo pointing to any Queue, alternatively you can even provide a ServiceStack endpoint URL which will
+ send the response to a Web Service instead. If the web service is not available it falls back into publishing it in the default
+ Response Queue so you never lose a message!
+ - MQ/Web Services that don't return any output have their Request DTOs sent to a rolling **Out** queue which can be monitored
+ by external services (i.e. the publisher/caller) to determine when the request has been processed.
+
+Although you can host **RedisMqHost** in any ASP.NET web app, the benefit of hosting inside ServiceStack is that your
+**web services are already capable** of processing Redis MQ messages **without any changes required** since they're already effectively
+designed to work like a Message service to begin with, i.e. **C# POCO-in -> C# POCO-out**.
+
+This is another example of ServiceStack's prescribed DTO-first architecture continues to pay dividends since each web service is a DI clean-room
+allowing your **C# logic to be kept pure** as it only has to deal with untainted POCO DTOs, allowing your same web service to be re-used in:
+SOAP, REST (JSON,XML,JSV,CSV,HTML) web services, view models for dynamic HTML pages and now as a MQ service!
+
+Eventually (based on feedback) there will be posts/documentation/examples forthcoming covering how to use it, in the meantime
+you can [Check out the Messaging API](https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack.Interfaces/Messaging/IMessageService.cs)
+to see how simple it is to use. To see some some working code showing some of the capabilities listed above,
+[view the tests](https://github.com/ServiceStack/ServiceStack.Redis/blob/master/tests/ServiceStack.Redis.Tests/RedisMqHostTests.cs).
+
+Hooking up a basic send/reply example is as easy as:
+
+ //DTO messages:
+ public class Hello { public string Name { get; set; } }
+ public class HelloResponse { public string Result { get; set; } }
+
+ var redisFactory = new PooledRedisClientManager("localhost:6379");
+ var mqHost = new RedisMqHost(redisFactory, noOfRetries:2, null);
+
+ //Server - MQ Service Impl:
+ mqHost.RegisterHandler(m =>
+ new HelloResponse { Result = "Hello, " + m.GetBody().Name });
+ mqHost.Start();
+
+ ...
+
+ //Client - Process Response:
+ mqHost.RegisterHandler(m => {
+ Consle.Log("Received: " + m.GetBody().Result);
+ });
+ mqHost.Start();
+
+ ...
+
+ //Producer - Start publishing messages:
+ var mqClient = mqHost.CreateMessageQueueClient();
+ mqClient.Publish(new Hello { Name = "ServiceStack" });
+
+
+## JSON/JSV Serializers now supports Abstract/Interface and object types
+We're happy to report the most requested feature for ServiceStack's JSON/JSV serializers is now available at:
+[ServiceStack.Text v2.28](https://github.com/ServiceStack/ServiceStack.Text/downloads).
+
+The JSON and JSV Text serializers now support serializing and deserializing DTOs with **Interface / Abstract or object types**.
+Amongst other things, this allows you to have an IInterface property which when serialized will include its concrete type information in a
+**__type** property field (similar to other JSON serializers) which when serialized populates an instance of that
+concrete type (provided it exists).
+
+Likewise you can also have polymorphic lists e.g. of a base **Animal** type and be populated with a **Cats** and **Dogs** which should now deserialize correctly.
+
+As always performance was a primary objective when adding this feature, and as a result we should have a well performing implementation of it.
+
+Note: This feature is **automatically** added to all **Abstract/Interface/Object** types, i.e. you **don't** need to include any
+`[KnownType]` attributes to take advantage of it.
+
+## Other features/fixes:
+
+ - Added JSON/JSV custom serialization behavior injection of BCL value types in e.g: [JsConfig](https://github.com/ServiceStack/ServiceStack.Text/blob/master/src/ServiceStack.Text/JsConfig.cs#L16)
+ - Serialization errors now return 400 status code
+ - Add option to propagate errors instead of being sent in the response [Tymek Majewski](https://github.com/letssellsomebananas)
+ - Added UserAgent to IHttpRequest type
+ - Add useful overloads to HttpResult class
+ - SetPermantentCookie/SetSessionCookie/SetCookie
+ - LastModified
+ - Fix compression bug in `RequestContext.ToOptimizedResult()`
+ - byte[] responses are written directly to the response stream with the ContentType: application/octet-stream
+
+*****
+
+##ServiceStack 2.20 Release Notes
+
+### New Markdown Razor View Engine
+The biggest feature in this release is the new Markdown support built-into ServiceStack and more
+specifically its **Markdown Razor View Engine**. Markdown Razor is an MVC Razor-inspired templating
+engine that allows you to generate dynamic Markdown and HTML using plain Markdown and Razor Sytnax.
+
+View the new [Markdown Razor Introduction](http://www.servicestack.net/docs/markdown/markdown-razor)
+for more information.
+
+### ServiceStack.Docs Website Released
+The first website to take advantage of the new Markdown templating support in ServiceStack is
+**[http://www.servicestack.net/docs](http://www.servicestack.net/docs)** which is effectively built entirely
+using ServiceStack's GitHub project Markdown wiki and README.md pages. To render the entire website
+the transformed Markdown content is merged with a static **default.shtml** website template.
+
+A nice feature of a Markdown-enabled website is that since the Content is decoupled from the website
+template we are easily able to enhance the site using Ajax to load partial content page loads. This
+provides a faster browsing experience since the entire webpage doesn't have to be reloaded.
+
+See the [About ServiceStack Docs Website](http://www.servicestack.net/docs/markdown/about) for more
+information.
+
+### MonoTouch support in ServiceStack C# Clients
+Support was added to the Generic JSON and JSV ServiceStack C# Clients to work around MonoTouch's
+No-JIT Restrictions. Unfortunately to do this we've had to create a new MonoTouch Build
+configuration which doesn't use any C# Expressions or Reflection.Emit. So you need to download the
+MonoTouch ServiceStack builds for running in MonoTouch.
+**[Download MonoTouch-v2.20.zip](https://github.com/ServiceStack/ServiceStack/tree/master/release/latest/MonoTouch)**
+
+An example MonoTouch project that uses these Sync and Async C# ServiceClients to talk to the
+[RestFiles](www.servicestack.net/RestFiles/) web services is in the
+[RestFilesClient Example project](https://github.com/ServiceStack/ServiceStack.Examples/tree/master/src/MonoTouch/RestFilesClient).
+
+## Other Features
+
+ - Added support for [IContainerAdapter](https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack.Interfaces/Configuration/IContainerAdapter.cs) to let you [plug-in and use different IOC Containers](https://groups.google.com/d/topic/servicestack/A-W9scHaEBA/discussion)
+ - Allow alternate strategies [for resolving Service Types](https://groups.google.com/d/topic/servicestack/Sb7Rcnhte-E/discussion)
+ - If your IService implements IDisposable, it will be disposed straight after it's been executed.
+
+
+#ServiceStack 2.09 Release Notes
+
+## ServiceStack is now on NuGet!
+
+As we have received a number of requests to provide NuGet packages for ServiceStack and its components, we're now happy to say we're now NuGet compliant! Where a configured and working ServiceStack web framework is just 1 NuGet command away :)
+
+[](~/framework/nuget)
+
+This will add the ServiceStack dlls to your standard VS.NET ASP.NET Web Application, Register ServiceStack handler in your Web.Config, configure your AppHost and create both a **[Hello](http://mono.servicestack.net/ServiceStack.Hello/)** and a fully-operational **[TODO REST service](http://mono.servicestack.net/Backbone.Todos/)**.
+
+Together with just 2 static content files ([default.htm](https://github.com/ServiceStack/ServiceStack/blob/master/NuGet/ServiceStack/content/default.htm) and [jqunback-1.51.js](https://github.com/AjaxStack/AjaxStack)) you get a fully configured and working RESTful application (*which as an aside benefit we hope encourages .NET developers into the [beautiful world of Backbone.js](http://documentcloud.github.com/backbone/) and Single Page Ajax Applications*).
+
+The NuGet package of ServiceStack is essentially the **RootPath** Starter Template. The other starting templates, e.g. Windows Service, Console Hosts, hosting ServiceStack at custom /api paths are still available in the [ServiceStack.Examples downloads](https://github.com/ServiceStack/ServiceStack.Examples/downloads).
+
+Check **[ServiceStack's NuGet page](~/framework/nuget)** for the full description of the available ServiceStack packages on NuGet.org
+
+## ServiceStack Overview and Create REST services slides released!
+
+Although this normally shouldn't warrant a release line item, for the technology focused - it's actually hard work :)
+We believe the overview slides provide the best starting point for new developers looking to find out the benefits of ServiceStack and how they can easily develop REST services with it. Today, we're releasing the following 2 slides:
+
+### [ServiceStack Overview and Features](https://docs.google.com/present/view?id=dg3mcfb_208gv3kcnd8)
+[](https://docs.google.com/present/view?id=dg3mcfb_208gv3kcnd8)
+
+### [Creating REST Web Services](https://docs.google.com/present/view?id=dg3mcfb_213gsvvmmfk)
+[](https://docs.google.com/present/view?id=dg3mcfb_213gsvvmmfk)
+
+## Better configuration
+
+### ASP.NET MVC-like Route API to define user-defined REST paths
+
+In your AppHost Configure() script you can register paths against your Request DTOs with the **Routes** property like so:
+
+ Routes
+ .Add("/hello")
+ .Add("/hello/{Name*}")
+ .Add("/todos")
+ .Add("/todos/{Id}");
+
+This is an alternative to the `[Route("/hello")]` attribute which was previously required on your Request DTOs.
+They should work as expected, where any match will route that request to the designated service. All variables enclosed with `{Id}` will be populated on the selected Request DTO with that value of the path component.
+
+`Routes.Add("/hello/{Name*}")` is a special case that matches every path beginning with **/hello/** where the **Hello** Request DTOs **Name** property is populated with the contents of the remaining url path. E.g. /hello/**any/path/here** will be populated in Hello.`{Name}` property.
+
+### Disable ServiceStack-wide features
+
+Sometimes the ServiceStack default of having all endpoints and formats all wired up correctly without any configuration is actually not preferred (we know, enterprises right? :), so in this release we've made it easy to turn on and off system-wide features using simple enum flags. To simplify configuration we also added some useful Enum extensions (Has,Is,Add,Remove) to make it easier to signal your intent with Enums.
+
+E.g. this is how you would disable 'JSV' and 'SOAP 1.1 & 1.2' endpoints:
+
+ var disableFeatures = Feature.Jsv | Feature.Soap;
+ SetConfig(new EndpointHostConfig
+ {
+ EnableFeatures = Feature.All.Remove(disableFeatures),
+ });
+
+
+*****
+
+##ServiceStack 2.08 - ServiceStack meets Backbone.js
+
+Unlike in previous releases, the ServiceStack framework itself has largely remained unchanged. This update is focused towards including [Backbone.js](http://documentcloud.github.com/backbone/) into ServiceStack.Examples project.
+
+[Backbone.js](http://documentcloud.github.com/backbone/) is a beautifully-designed and elegant light-weight JavaScript framework that allows you to build you're Ajax applications separated into **Views** and **Models** connected via key-value data-binding and declarative custom event handling. Of special interest to us is its ability to supply a url and have it **automatically connect your Models** with your **Backend REST services**, which we're happy to report works well with ServiceStack's JSON services.
+
+From the [author](http://twitter.com/jashkenas) of the popular and game-changing libraries [CoffeeScript](http://jashkenas.github.com/coffee-script/) and [Underscore.js](http://documentcloud.github.com/underscore/) - Backbone.js differentiates itself from other javascript frameworks in that it promotes a clean separation of concerns and a modular application design, which is hard to achieve with other frameworks that couple themselves too tightly with the DOM.
+
+## Backbone's TODO
+
+Our first action was porting Backbone's example TODO app and replace its HTML5 localStorage backend with a ServiceStack REST + Redis one. This was quite easy to do and we were happy that [resulting C# server code for the REST backend](https://github.com/ServiceStack/ServiceStack.Examples/blob/master/src/Backbone.Todos/Global.asax.cs) ended up weighing in at less than the size of VS.NET's default Web.config file :)
+
+Like the rest of our examples a **[live demo is available](http://mono.servicestack.net/Backbone.Todos/)**.
+
+### TODO app now in all Starter templates
+
+As the Backbone TODO app represented a small, but working REST client and server we decided to make it the default app in **all** of ServiceStack's Starter Templates.
+
+That's right, your Starting template for your **Enterprise Windows Service now comes with a useful TODO app out-of-the-box!** We rightfully believe this makes it the coolest app provided in any starting project template :)
+
+## ServiceStack was built to serve Ajax applications
+
+At this point it's a good time to re-iterate that ServiceStack was designed from the start to be a first-class Ajax server that provides best support for HTML5 Ajax/SPA apps, purely because we believe it to be the future application delivery platform that provides the broadest reach and best user experience possible. We've made special efforts to provide the [fastest JSON web services possible for .NET](http://www.servicestack.net/mythz_blog/?p=344), with a [first-class redis client](~/redis-client/redis-client) and a [strong caching story](~/framework/caching-options) important in developing high-performance web services and a responsive end user experience.
+
+*****
+
+## ServiceStack 2.07 - Q/A Release - Finding Web.Config Nirvana :)
+
+This release was focused on finding the perfect Web.Config that best allows ServiceStack to work consistently everywhere across all ASP.NET and HttpListener hosts on both .NET and MONO platforms.
+A primary goal of ServiceStack is to be able to build web services once and use the same binaries and App .config files to run everywhere in every ASP.NET or HttpListener host on Windows with .NET or on OSX/Linux with MONO.
+
+Since your services are POCO message-based and only need to be implement an `IService` interface your services effectively operate in a *clean-room* [DDD Service](http://en.wikipedia.org/wiki/Domain-driven_design), and have a potential for re-use in a variety of other hosts, i.e. Message Queues, Windows services, Windows applications, etc.
+
+### Running cross-platform
+Although the promise of the .NET architecture allows for pure C# applications to run on every .NET platform, the ASP.NET hosts don't always share the same compatibility levels as there are subtle differences in implementation and behaviour amongst the various ASP.NET hosts.
+
+The only real way of ensuring ServiceStack runs well in each environment is to actually setup an environment on each host with each configuration we want to support. Unfortunately this time-consuming process is a necessary one in order to limit any new regressions from being introduced as a result of added features.
+
+## New ServiceStack Starter Templates projects released
+So with that in mind, included in this release is the 'StartTemplates' solution providing the same Hello World Web service hosted in every supported mode and configurations.
+There are now 2 supported modes in which to run ServiceStack:
+
+##### a) Do not require an existing Web Framework - Host from the root path: `/`
+##### b) Use ServiceStack with an existing Web Framework - Host web services at a user-defined: `/custompath`
+
+### Starter Template projects
+
+The new StarterTemplates in the [ServiceStack.Examples GitHub project](https://github.com/ServiceStack/ServiceStack.Examples/) provide a good starting template for each supported configuration below:
+
+ * [.NET 3.5](https://github.com/ServiceStack/ServiceStack.Examples/tree/master/src/StarterTemplates/ApiPath35) and [.NET 4.0](https://github.com/ServiceStack/ServiceStack.Examples/tree/master/src/StarterTemplates/CustomPath40) - ASP.NET Custom Path: **/api**
+ * [.NET 3.5](https://github.com/ServiceStack/ServiceStack.Examples/tree/master/src/StarterTemplates/RootPath35) and [.NET 4.0](https://github.com/ServiceStack/ServiceStack.Examples/tree/master/src/StarterTemplates/RootPath40) - ASP.NET Root Path: **/**
+ * [Windows Service w/ HttpListener](https://github.com/ServiceStack/ServiceStack.Examples/tree/master/src/StarterTemplates/WinServiceAppHost)
+ * [Stand alone Console App Host w/ HttpListener](https://github.com/ServiceStack/ServiceStack.Examples/tree/master/src/StarterTemplates/ConsoleAppHost)
+
+We're happy to report the above configurations are well supported on Windows with .NET visible by the **[Latest Windows Integration Test Reports](http://www.servicestack.net/testreports/2011-03-09_RunReports-Windows.htm)** showing ServiceStack running correctly on IIS 3.5,4.0/WebDev Server 2.0,4.0/Windows Service/Console Application hosts.
+
+To deploy on MONO you can just XCOPY/SFTP the files across as-is (i.e. as compiled with VS.NET) to your Linux or OSX server. In most of the scenarios it works as-is however the integration tests have uncovered a couple of known issues visible in the **[Latest Linux Integration Test Reports](http://www.servicestack.net/testreports/2011-03-15_RunReports-Linux.htm)**.
+
+### Known issues on MONO:
+
+ * Depending on your setup a url with a trailing path '/' will cause Nginx/FastCGI or Apache/mod_mono to request a /default.aspx which if it doesn't exist will return a 404
+ * If you want to use a custom path i.e. **/api** your ASP.NET virtual path also needs to start with your httpHandler path. Which is why an ASP.NET application hosted on **/ApiPath35/api** works as expected whilst one at **/CustomPath35/api** does not.
+
+
+## Eating our own dog food
+### ServiceStack.NET now running example projects on both Nginx/FastCGI and Apache/mod_mono on the same server
+
+With a few Linux admin tweaks to add and assign a new virtual network interface with a new IP Address, we're easily able to run both Nginx/FastCGI and Apache/mod_mono HTTP servers on the same server, both configured to point to ServiceStack ASP.NET GitHub Example Projects.
+
+[[http://www.servicestack.net]] is running Nginx/FastCGI configuration while the sub domain [[http://api.servicestack.net]] is running Apache/mod_mono (the recommended MONO ASP.NET configuration).
+
+Here are links to ServiceStack.Example projects on both Nginx and Apache:
+
+ * [Nginx](http://www.servicestack.net/ServiceStack.Hello/) - [Apache](http://api.servicestack.net/ServiceStack.Hello/) /ServiceStack.Hello
+ * [Nginx](http://www.servicestack.net/RestFiles/) - [Apache](http://api.servicestack.net/RestFiles/) /RestFiles/
+ * [Nginx](http://www.servicestack.net/RedisStackOverflow/) - [Apache](http://api.servicestack.net/RedisStackOverflow/) /RedisStackOverflow/
+ * [Nginx](http://www.servicestack.net/RedisStackOverflow/) - [Apache](http://api.servicestack.net/RedisStackOverflow/) /RedisStackOverflow/
+ * [Nginx](http://www.servicestack.net/ServiceStack.MovieRest/) - [Apache](http://api.servicestack.net/ServiceStack.MovieRest/) /ServiceStack.MovieRest/
+ * [Nginx](http://www.servicestack.net/ServiceStack./) - [Apache](http://api.servicestack.net/ServiceStack.Northwind/) /ServiceStack.Northwind/
+
+We plan to create more wiki pages walking through how to setup your own ASP.NET web applications on Linux with MONO.
+
+If you have a preference on what hosting environment you would like to see ServiceStack running in (e.g. AppHarbor, Moncai, Amazon, Azure, SuseStudio, etc), we'd love to hear from you, please post your preference to [ServiceStack's Google Group](http://groups.google.com/group/servicestack)
+
+*****
+
+## ServiceStack v2.0
+
+The ServiceStack code-base has gone under a re-structure to better support user contributions, testing, fine-grained deployments allowing hosting of ServiceStack in 32 and 64 bit servers, in medium or full trust hosting environments.
+
+The changes from a high-level are:
+
+ * No more ILMERGE.exe dlls, all ServiceStack .dlls now map 1:1 with a project of the same name
+ * As a result all .pdb's for all assemblies are now included in each release to help debugging (this was lost using ILMERGE)
+ * When not using OrmLite/Sqlite, ServiceStack is a full .NET managed assembly with no P/Invokes that can run in 32/64 bit hosts
+ * All projects upgraded to VS.NET 2010 (min baseline is still .NET 3.5)
+ * Non-core, high-level functionality has been moved into a new [ServiceStack.Contrib](~/contrib/servicestack-contrib)
+
+## Breaking Changes
+A lot of effort was made to ensure that clients would not be affected i.e. no code-changes should be required.
+
+As a result of the change to the deployment dlls where previously ServiceStack.dll was an ILMERGED combination of every implementation dll in ServiceStack. You will now need to explicitly reference each dll that you need.
+
+To help visualize the dependencies between the various components, here is a tree showing which dependencies each project has:
+
+ * [ServiceStack.Text.dll](~/text-serializers/json-csv-jsv-serializers)
+ * [ServiceStack.Interfaces.dll](https://github.com/ServiceStack/ServiceStack/tree/master/src/ServiceStack.Interfaces)
+
+ * [ServiceStack.Common.dll](https://github.com/ServiceStack/ServiceStack/tree/master/src/ServiceStack.Common)
+
+ * [ServiceStack.dll](https://github.com/ServiceStack/ServiceStack/tree/master/src/ServiceStack)
+ * [ServiceStack.ServiceInterface.dll](https://github.com/ServiceStack/ServiceStack.Contrib/tree/master/src/ServiceStack.ServiceInterface)
+
+ * [ServiceStack.Redis.dll](~/redis-client/redis-client)
+ * [ServiceStack.OrmLite.dll](~/ormlite/ormlite-overview)
+
+
+### Non-core Framework features extracted into new ServiceStack.Contrib project
+
+In the interest of promoting contributions and modifications from the community, the non-core projects of ServiceStack has been extracted into a new user contributed **ServiceStack.Contrib** project site at:
+
+**[[https://github.com/ServiceStack/ServiceStack.Contrib]]**
+
+I invite all ServiceStack users who want to share their generic high-level functionality and useful app-specific classes under this project where the rest of the community can benefit from.
+
+*****
+
+## Service Stack 1.82 Release Notes
+
+### [New HTML5 Report Format Added](~/framework/json-report-format)
+
+The biggest feature added in this release is likely the new HTML5 report format that generates a human-readable HTML view of your web services response when viewing it in a web browser.
+Good news is, like the [[ServiceStack-CSV-Format]] it works with your existing web services as-is, with no configuration or code-changes required.
+
+[](~/framework/json-report-format)
+
+Here are some results of web services created before the newer HTML5 and CSV formats existed:
+
+ * **RedisStackOverflow** [Latest Questions](http://mono.servicestack.net/RedisStackOverflow/questions)
+ * **RestMovies** [All Movie listings](http://mono.servicestack.net/ServiceStack.MovieRest/movies)
+ * **RestFiles** [Root Directory](http://mono.servicestack.net/RestFiles/files)
+
+Use the **?format=[json|xml|html|csv|jsv]** to toggle and view the same web service in different formats.
+
+### New ServiceStack.Northwind Example project added
+
+In order to be able to better demonstrate features with a 'real-world' DataSet, a new ServiceStack.Northwind project has been added which inspects the Northwind dataset from an SQLite database.
+A live demo is hosted at [[http://mono.servicestack.net/ServiceStack.Northwind/]]. Here are some links below to better demonstrate the new HTML format with a real-world dataset:
+
+#### Northwind Database REST web services
+ * [All Customers](http://mono.servicestack.net/ServiceStack.Northwind/customers)
+ * [Customer Detail](http://mono.servicestack.net/ServiceStack.Northwind/customers/ALFKI)
+ * [Customer Orders](http://mono.servicestack.net/ServiceStack.Northwind/customers/ALFKI/orders)
+
+
+### Improved Caching
+
+ServiceStack has always had its own (i.e. ASP.NET implementation-free) [good support for caching](~/framework/caching-options), though like most un-documented features it is rarely used. The caching has been improved in this version to now support caching of user-defined formats as well. Here is example usage from the new Northwind project:
+
+ public class CachedCustomersService : RestServiceBase
+ {
+ public ICacheClient CacheClient { get; set; }
+
+ public override object OnGet(CachedCustomers request)
+ {
+ return base.RequestContext.ToOptimizedResultUsingCache(
+ this.CacheClient, "urn:customers", () => {
+ var service = base.ResolveService();
+ return (CustomersResponse) service.Get(new Customers());
+ });
+ }
+ }
+
+The above code caches the most optimal output based on browser capabilities, i.e. if your browser supports deflate compression (as most do), a deflated, serialized output is cached and written directly on the response stream for subsequent calls. Only if no cache exists will the web service implementation (e.g lambda) be executed, which populates the cache before returning the response.
+
+To see the difference caching provides, here are cached equivalents of the above REST web service calls:
+
+#### Northwind Database **Cached** REST web services
+ * [All Customers](http://mono.servicestack.net/ServiceStack.Northwind/cached/customers)
+ * [Customer Detail](http://mono.servicestack.net/ServiceStack.Northwind/cached/customers/ALFKI)
+ * [Customer Orders](http://mono.servicestack.net/ServiceStack.Northwind/cached/customers/ALFKI/orders)
+
+
+### API Changes
+
+The underlying IHttpRequest (an adapter interface over ASP.NET/HttpListener HTTP Requests) can now be retrieved within your web service to be able to query the different HTTP Request properties:
+
+ var httpReq = base.RequestContext.Get();
+
+Also added is the ability to resolve existing web services (already auto-wired by the IOC) so you can re-use existing web service logic. Here is an example of usage from the Northwind [CustomerDetailsService.cs](https://github.com/ServiceStack/ServiceStack.Examples/blob/master/src/ServiceStack.Northwind/ServiceStack.Northwind.ServiceInterface/CustomerDetailsService.cs).
+
+ var ordersService = base.ResolveService();
+ var ordersResponse = (OrdersResponse)ordersService.Get(new Orders { CustomerId = customer.Id });
+
+
+## Service Stack 1.79 Release Notes
+
+### The C#/.NET Sync and Async Service Clients were improved to include:
+ * Enhanced REST functionality and access, now more succinct than ever
+ * Uploading of files to ServiceStack web services using **HTTP POST** *multipart/form-data*
+ * More robust error handling support handling C# exceptions over REST services
+ * For examples of on how to use the C# REST client API check out the tests in the new REST Files project:
+ * [Sync C# client examples](https://github.com/ServiceStack/ServiceStack.Examples/blob/master/src/RestFiles/RestFiles.Tests/SyncRestClientTests.cs)
+ * [Async C# client examples](https://github.com/ServiceStack/ServiceStack.Examples/blob/master/src/RestFiles/RestFiles.Tests/AsyncRestClientTests.cs)
+
+## New RestFiles project added to [ServiceStack.Examples](https://github.com/ServiceStack/ServiceStack.Examples/) GitHub project:
+#### Live demo available at: [servicestack.net/RestFiles/](http://mono.servicestack.net/RestFiles/)
+
+ * Provides a complete remote file system management over a [RESTful api](http://mono.servicestack.net/RestFiles/servicestack/metadata)
+ * The complete RESTful /files web service implementation is only [**1 C# page class**](https://github.com/ServiceStack/ServiceStack.Examples/blob/master/src/RestFiles/RestFiles.ServiceInterface/FilesService.cs)
+ * Includes a pure Ajax client to provide a **GitHub-like** file browsing experience, written in only [**1 static HTML page, using only jQuery**](https://github.com/ServiceStack/ServiceStack.Examples/blob/master/src/RestFiles/RestFiles/default.htm)
+ * [C# integration test examples](https://github.com/ServiceStack/ServiceStack.Examples/blob/master/src/RestFiles/RestFiles.Tests/) are also included showing how to access this RESTful api over sync and async C# clients
+
+Read the rest of the [Rest Files README.md](https://github.com/ServiceStack/ServiceStack.Examples/tree/master/src/RestFiles/RestFiles) for a more detailed overview about the project.
+
+
+## Service Stack 1.78 Release Notes
+
+ * Added more tests and fixed bugs in ServiceStack's new CSV format and Request/Response filters
+ * Added new information on the generated web service index, individual web service page now include:
+ * REST paths (if any are defined) thanks to [@jakescott](http://twitter.com/jakescott)
+ * Included directions to consumers on how to override the HTTP **Accept** header and specify the **format**
+ * Now including any System.CompontentModel.**Description** meta information attributed on your Request DTO
+ * Preview the new documentation pages on ServiceStack [**Hello**](http://www.servicestack.net/ServiceStack.Hello/servicestack/json/metadata?op=Hello) and [**Movies**](http://www.servicestack.net/ServiceStack.MovieRest/servicestack/xml/metadata?op=Movie) example web service pages.
+ * Added [tests to show how to implement Basic Authentication](https://github.com/ServiceStack/ServiceStack/blob/master/tests/ServiceStack.WebHost.Endpoints.Tests/RequestFiltersTests.cs) using the new RequestFilters
+ * Changed the httpHandler paths in the Example projects and [created a new Config class](https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack.WebHost.Endpoints/SupportedHandlerMappings.cs) to store which supported mappings go with which web servers + middleware.
+ * Provide a way to register new urls for different ServiceStack handler mappings used, e.g. to register IIS 6.0 urls:
+
+ SetConfig(new EndpointConfig { ServiceEndpointsMetadataConfig = ServiceEndpointsMetadataConfig.GetForIis6ServiceStackAshx() });
+
+
+## Service Stack 1.77 Release Notes
+
+This release was focused to opening up ServiceStack to better support adding more hooks and extension points where new formats can be added. The CSV format was also added to test these new extension APIs.
+
+## Main features added in this release:
+
+* Added support for the [CSV format](~/framework/csv-format)
+* Enhanced the IContentTypeFilter API to add support for different serialization formats
+* Added Request and Response filters so custom code can inspect and modify the incoming [IHttpRequest](https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack.ServiceHost/IHttpRequest.cs) or [IHttpResponse](https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack.ServiceHost/IHttpResponse.cs).
+* Added `Request.Items` so you can share arbitrary data between your filters and web services.
+* Added `Request.Cookies` for reading cookies (to avoid retrieving it from HttpRuntime.Current)
+* Removed the preceding UTF8 BOM character to ServiceStack's JSON and JSV Serializers.
+* All features above are available on both ASP.NET and HttpListener hosts
+
+### [CSV Format](~/framework/csv-format)
+
+Using the same tech that makes [ServiceStack's JSV and JSON serializers so fast](http://www.servicestack.net/benchmarks/NorthwindDatabaseRowsSerialization.100000-times.2010-08-17.html) (i.e. no run-time reflection, static delegate caching, etc), should make it the fastest POCO CSV Serializer available for .NET.
+
+The 'CSV' format is the first format added using the new extensions API, which only took the following lines of code:
+
+ //Register the 'text/csv' content-type and serializers (format is inferred from the last part of the content-type)
+ this.ContentTypeFilters.Register(ContentType.Csv,
+ CsvSerializer.SerializeToStream, CsvSerializer.DeserializeFromStream);
+
+ //Add a response filter to add a 'Content-Disposition' header so browsers treat it as a native .csv file
+ this.ResponseFilters.Add((req, res, dto) =>
+ {
+ if (req.ResponseContentType == ContentType.Csv)
+ {
+ res.AddHeader(HttpHeaders.ContentDisposition,
+ string.Format("attachment;filename={0}.csv", req.OperationName));
+ }
+ });
+
+With only the code above, the 'CSV' format is now a first-class supported format which means all your existing web services can take advantage of the new format without any config or code changes. Just drop the latest ServiceStack.dlls (v1.77+) and you're good to go!
+
+Note: there are some limitations on the CSV format and implementation which you can read about on the [ServiceStack CSV Format page](~/framework/csv-format).
+
+### Request and Response Filters:
+
+The Request filter takes a IHttpRequest, IHttpResponse and the **Request DTO**:
+ List> RequestFilters { get; }
+
+The Response filter takes a IHttpRequest, IHttpResponse and the **Response DTO**:
+ List> ResponseFilters{ get; }
+
+Note: both sets of filters are called before there any output is written to the response stream so you can happily use the filters to authorize and redirect the request. Calling `IHttpResponse.Close()` will close the response stream and stop any further processing of this request.
+
+Feel free to discuss or find more about any of these features at the [Service Stack Google Group](https://groups.google.com/forum/#!forum/servicestack)
+
+
+[a:contains("' + title + '")')[0];
+ if (el) el.parentNode.className = 'active';
+}
\ No newline at end of file
diff --git a/src/Docs/logging/logging-overview.md b/src/Docs/logging/logging-overview.md
new file mode 100644
index 00000000..af464b87
--- /dev/null
+++ b/src/Docs/logging/logging-overview.md
@@ -0,0 +1,45 @@
+## ServiceStack.Logging an implementation-free logging interface for your app logic to bind to
+For twitter updates follow @demisbellot or @ServiceStack
+
+Even in the spirit of **Bind to interfaces, not implementations**, many .NET projects still have
+a hard dependency to [log4net](http://logging.apache.org/log4net/index.html).
+
+Although log4net is the standard for logging in .NET, potential problems can arise from your libraries having a hard dependency on it:
+
+* Your library needs to be shipped with a third-party dependency
+* Potential conflicts can occur when different libraries have dependency on different versions of log4net (e.g. the 1.2.9 / 1.2.10 dependency problem).
+* You may want to use a different logging provider (i.e. network distributed logging)
+* You want your logging for Unit and Integration tests to redirect to the Console or Debug logger without any configuration.
+
+ServiceStack.Logging solves these problems by providing an implementation-free ILog interface that your application logic can bind to
+where your Application Host project can bind to the concrete logging implementation at deploy or runtime.
+
+ServiceStack.Logging also includes adapters for the following logging providers:
+
+* Log4Net 1.2.10+
+* Log4Net 1.2.9
+* EventLog
+* Console Log
+* Debug Log
+* Null / Empty Log
+
+# Usage Examples
+
+Once on your App Startup, either In your AppHost.cs or Global.asax file inject the concrete logging implementation that your app should use, e.g.
+
+## Log4Net
+ LogManager.LogFactory = new Log4NetFactory(true); //Also runs log4net.Config.XmlConfigurator.Configure()
+
+## Event Log
+ LogManager.LogFactory = new EventLogFactory("ServiceStack.Logging.Tests", "Application");
+
+Then your application logic can bind to and use a lightweight implementation-free ILog which at runtime will be an instance of the concrete implementation configured in your host:
+
+ ILog log = LogManager.GetLogger(GetType());
+
+ log.Debug("Debug Event Log Entry.");
+ log.Warn("Warning Event Log Entry.");
+
+
+
+
diff --git a/src/Docs/markdown/about.md b/src/Docs/markdown/about.md
new file mode 100644
index 00000000..23cec54f
--- /dev/null
+++ b/src/Docs/markdown/about.md
@@ -0,0 +1,45 @@
+
+**ServiceStack Docs** is a collection of all documentation scattered amongst all of ServiceStack's Open source
+projects hosted together in a single website. It's also the first website to showcase ServiceStack's
+new support of the Markdown format where the website's content is composed entirely of static Markdown
+pages collected from the project's README.md and wiki Markdown pages spread in GitHub.
+
+# ServiceStack Docs Features
+
+### Static Templates
+All content pages simply consist of a static Markdown page merged together with a static
+**default.shtml** page where its variable place holders are replaced with evaluated Markdown content.
+
+### Partial Content
+On the header of each content page there are links to view the raw [HTML content only](?format=html.bare)
+or [Markdown only](?format=text.bare) of the current page outside of the website template.
+
+### Non-invasive Ajax-enhanced web experience
+To show how to take advantage of the partial-content support in ServiceStack, browsers
+that support the **history.pushState** API have enhanced behavior applied to them where
+links to other parts of the website are done via non-obtrusive partial page loads.
+
+This improves browsing experience performance since the browser only has to load the content html
+and not the entire web page. By not reloading the page we are able to control the pages transitions
+where in our case we sprinkle a little jQuery to apply a simple slide and fade effect between pages.
+
+### Dynamic content with Markdown Razor
+Although most of this website is static it contains a couple of dynamic pages that makes use of the new
+Markdown Razor View engine template in ServiceStack. The [Search](~/search/Redis)
+and [Category](~/category/Redis%20Client) web services both have
+view templates which when defined take over the **html format** for that REST service. Unlike other
+web frameworks these dynamic pages are **first-class web services** where you can optionally use
+REST clients to consume these services in JSON, XML, ... formats e.g. here are the above pages in JSON:
+
+ - [/search/Redis?format=json](~/search/Redis?format=json)
+ - [/category/Redis Client?format=json](~/category/Redis%20Client?format=json)
+
+### Extensible output
+Each markdown page is configured to inherit from the **CustomMarkdownPage.cs** base class which is used to
+generate the **dynamic sidebar** based on the context of the currently viewed page. Other metadata like
+the **Title**, **Category** and document **Date** are also added and displayed in the static website template.
+
+### Find out more about Markdown support
+
+ - [Markdown Features](markdown-features) - Benefits and Markdown features in ServiceStack
+ - [Markdown Razor](markdown-razor) - Introduction to the new Markdown View Engine and its Razor syntax in ServiceStack
\ No newline at end of file
diff --git a/src/Docs/markdown/markdown-features.md b/src/Docs/markdown/markdown-features.md
new file mode 100644
index 00000000..91973ca2
--- /dev/null
+++ b/src/Docs/markdown/markdown-features.md
@@ -0,0 +1,78 @@
+# Benefits of Markdown
+
+Benefits of Markdown includes that it focuses exclusively on **marking up structured content** that as a
+result is not tied to its containing website. This makes it easy to re-use and host Markdown content in
+multiple outputs (i.e. alt websites, emails, pdfs, etc). It's also very easy to read and write and thus
+we believe it is the premier document format where most content should be stored in.
+
+#First class support of Markdown in ServiceStack v2.10
+Because of its many inherent benefits, ServiceStack now includes first-class support for the Markdown
+format. Which now features:
+
+### Static website templating
+Static Markdown pages can be fused together with a static **default.shtml** page to create websites
+based solely on static Markdown and html pages (as done in this site).
+
+### Performance
+On startup, all Markdown pages (.md) are parsed and converted to html and pre-cached in memory for
+fast response times. Although pages are cached, modified pages are detected and re-evaluated and
+**Last-Modified** Cache HTTP Headers are returned to be able to avoid unnecessary page loads.
+
+### Clean Urls
+You can omit the extension (.md) to the Markdown urls to request a specific page.
+Allowing a clean url structure using just directory and file names.
+
+### Partial Content
+The raw HTML and Markdown text of each page (without the website template) is available by appending
+the following to the query string:
+
+ - [?format=html.bare](?format=html.bare) - View content only in html
+ - [?format=text.bare](?format=text.bare) - View content only in Markdown
+
+Apart from making your content more accessible and re-usable it also allows you to provide partial content
+updates which is a popular technique amongst high performance websites.
+
+# Markdown View templating engine
+We love Markdown so much we've added a templating view engine so you can dynamically generate Markdown
+and HTML content with a view engine inspired by ASP.NET's Razor syntax and features.
+
+The Mardown Razor template engine works much like ASP.NET MVC's Razor although instead of Controllers,
+the templates make use of the model (aka DTOs) returned from your web services.
+This allows you to non-invasively provide customized HTML representations for your existing
+web services by simply adding a razor page anywhere in the **/Views** directory.
+
+This is a key feature in ServiceStack's implementation where apart from being easily able to generate
+a dynamic HTML page, you can, **without any effort** also access the XML, JSON, JSV and CSV formats of that service.
+
+The resolution order ServiceStack's uses to resolve the appropriate Markdown template to use for rendering HTML output is:
+
+ 1. If the Web Service specifies a template (via a customized IHttpResult.**TemplateName** response) - then a View with that name.
+ 2. A view with the same name as the Response DTO, looking first in **/Views** then in **/Views/Shared**
+ 3. A view with the same name as the Request DTO, looking first in **/Views** then in **/Views/Shared**
+
+Markdown Razor templates are simply normal plain-text Markdown pages that support dynamic behavior by
+using the familiar syntax of MVC's Razor i.e. all statements prefixed with the familiar @ symbol.
+
+#### Static website template
+Once the appropriate view is executed it's output is stored in the **'Body'** variable and is merged with its
+static website template. The rules for finding the appropriate master website template is simple:
+It's the first **default.shtml** page it can find, looking first in its current working directory then
+recursively up the directory hierarchy until it finds one.
+
+The view is merged with the static website template by replacing all **<--@VarName-->** with variables
+generated by the page (i.e. in ScopeArgs). i.e. the executed output of the View is stored in the **Body**
+variable and is embedded in the static website template by replacing all **<--@Body-->** found.
+
+### Same old Raxor Syntax and features
+We've made a considerable effort in trying to keep syntax parity with MVC's Razor that we've even pulled
+across MVC's HtmlHelper (and its connected classes) so that the **HtmlHelper** extension methods can be
+easily ported across. This is what enables MVC to access strong-typed features like:
+
+**@Html.TextBoxFor(m => m.FirstName)**
+
+Which renders the same output as it does in MVC Razor (since we're using their code to do this :)
+
+Out of the box we've pulled across the extension methods for Html.**Display**XXX, Html.**Input**XXX,
+Html.**Label**XXX and Html.**TextArea**XXX although you can bring and use your own extensions in your pages.
+
+For more information on the features and syntax supported checkout **[Introduction to Markdown Razor](markdown-razor)**
diff --git a/src/Docs/markdown/markdown-razor.md b/src/Docs/markdown/markdown-razor.md
new file mode 100644
index 00000000..4f7b8dc9
--- /dev/null
+++ b/src/Docs/markdown/markdown-razor.md
@@ -0,0 +1,416 @@
+See other [Markdown Features](markdown-features) in ServiceStack and how this website
+makes use of them in [About Docs](about).
+
+# Introducing the new Markdown Razor View Engine!!
+
+Markdown Razor is the first HTML and Text (i.e. Markdown) view engine built into ServiceStack.
+The pages are simply plain-text Markdown surrounded by MVC Razor-like syntax to provide
+its enhanced dynamic functionality.
+
+## Extensible with custom base classes and Helpers
+Markdown Razor is extensible in much the same way as MVC Razor is with the ability to define and
+use your own **custom base class**, **Helpers** and **HtmlHelper** extension methods.
+This allows you to call util methods on your base class or helpers directly from your templates.
+
+You can define a base class for all your markdown pages by implementing **MarkdownViewBase** and
+register it in your AppHost with:
+
+ SetConfig(new EndpointHostConfig {
+ WebHostUrl = "http://mono.servicestack.net/docs", //Replace prefix with the Url supplied
+ MarkdownBaseType = typeof(CustomMarkdownPage), //Set base class for all Markdown pages
+ MarkdownGlobalHelpers = new Dictionary {
+ {"Ext", typeof(CustomStaticHelpers)} //Define global Helpers e.g. at Ext.
+ }
+ });
+
+If a **WebHostUrl** is specified, it replaces all **~/** in all static website and Markdown
+pages with it. The **MarkdownGlobalHelpers** allow you to define global helper methods
+available to all your pages. This has the same effect of declaring it in your base class e.g:
+
+ public class CustomMarkdownPage : MarkdownViewBase {
+ public CustomStaticHelpers Ext = new CustomStaticHelpers();
+ }
+
+Which you can access in your pages via **@Ext.MyHelper(Model)**. Declaring instance methods on
+your custom base class allows you to access them without any prefix.
+
+## MarkdownViewBase base class
+By default the **MarkdownViewBase** class provides the following properties and hooks:
+
+ public class MarkdownViewBase {
+
+ public IAppHost AppHost; //Access Config, resolve dependencies, etc.
+ public MarkdownPage MarkdownPage; //This precompiled Markdown page with Metadata
+ public HtmlHelper Html; //ASP.NET MVC's HtmlHelper
+ public bool RenderHtml; //Flag to on whether you should you generate HTML or Markdown
+
+ /*
+ All variables passed to and created by your page.
+ The Response DTO is stored and accessible via the 'Model' variable.
+
+ All variables and outputs created are stored in ScopeArgs which is what's available
+ to your website template. The Generated page is stored in the 'Body' variable.
+ */
+ public Dictionary ScopeArgs;
+
+ //Called before page is executed
+ public virtual void InitHelpers(){}
+
+ //Called after page is executed before it's merged with the website template if any
+ public virtual void OnLoad(){}
+ }
+
+See this websites
+**[CustomMarkdownPage.cs](https://github.com/ServiceStack/ServiceStack.Examples/blob/master/src/Docs/Docs.Logic/CustomMarkdownPage.cs)**
+base class for an example on how to effectively use the base class to Resolve dependencies,
+inspect generated variables, generate **PagesMenu** and other dynamic variables for output
+in the static website template.
+
+# Compared with ASP.NET MVC Razor Syntax
+
+For the best way to illustrate the similarities with ASP.NET MVC Razor syntax I will show examples
+of the Razor examples in [@ScottGu's](http://twitter.com/scottgu) introductory
+[Introducing "Razor" - a new view engine for ASP.NET](http://weblogs.asp.net/scottgu/archive/2010/07/02/introducing-razor.aspx)
+
+Note: more context and the output for each snippet and example displayed is contained in the
+[Introductory Example](https://github.com/ServiceStack/ServiceStack/blob/master/tests/ServiceStack.ServiceHost.Tests/Formats/IntroductionExampleTests.cs)
+and
+[Introductory Layout](https://github.com/ServiceStack/ServiceStack/blob/master/tests/ServiceStack.ServiceHost.Tests/Formats/IntroductionLayoutTests.cs)
+Unit tests. For reference most features of Mardown Razor view engine are captured in the
+[Core Template Unit Tests](https://github.com/ServiceStack/ServiceStack/blob/master/tests/ServiceStack.ServiceHost.Tests/Formats/TemplateTests.cs)
+
+### Hello World Sample with Razor
+
+
+The following basic page:
+
+
+
+
+Can be generated in MVC Razor with:
+
+
+
+
+And Markdown Razor with:
+
+ # Razor Example
+
+ ### Hello @@name, the year is @@DateTime.Now.Year
+
+ Checkout [this product](/Product/Details/@@productId)
+
+### Loops and Nested HTML Sample
+
+The simple loop example:
+
+
+
+
+With MVC Razor:
+
+
+
+
+With Markdown Razor:
+
+ @@foreach (var p in products) {
+ - @@p.Name: (@@p.Price)
+ }
+
+### Parens-Free
+At this point I think it would be a good to introduce some niceties in Markdown Razor of its own.
+Borrowing a page out of [@BrendanEich](http://twitter.com/BrendanEich) proposal for
+[CoffeeScript's](http://jashkenas.github.com/coffee-script/) inspired
+[Parens free syntax](http://brendaneich.com/2010/11/paren-free/) for JS.Next - you can simply
+remove the parens from all block statements e.g:
+
+ @@foreach var p in products {
+ - @@p.Name: (@@p.Price)
+ }
+
+Produces the same output, and to go one step further you can remove the redundant **var** as well :)
+
+ @@foreach p in products {
+ - @@p.Name: (@@p.Price)
+ }
+
+Which makes the Markdown Razor's version a bit more wrist-friendly then its MVCs cousin :)
+
+### If-Blocks and Multi-line Statements
+
+#### If statements in MVC Razor:
+
+
+#### If statements in Markdown Razor:
+
+ @@if (products.Count == 0) {
+ Sorry - no products in this category
+ } else {
+ We have products for you!
+ }
+
+#### Multi-line and Multi-token statements
+
+
+Markdown Razor doesn't support multi-line or multi-token statements, instead you are directed to
+take advantage for variable syntax declarations, e.g:
+
+#### Markdown replacement for Multi-line Statements
+
+ @@var number = 1
+ @@var message = ""Number is "" + number
+
+ Your Message: @@message
+
+
+### Integrating Content and Code
+
+Does it break with email addresses and other usages of @ in HTML?
+
+#### With MVC Razor
+
+
+#### With Markdown Razor
+
+ Send mail to scottgu@microsoft.com telling him the time: @@DateTime.Now.
+
+Both View engines generate the expected output, e.g:
+
+
+
+
+### Identifying Nested Content
+
+#### With MVC Razor
+
+
+#### With Markdown Razor
+
+ @@if (DateTime.Now.Year == 2011) {
+ If the year is 2011 then print this
+ multi-line text block and
+ the date: @@DateTime.Now
+ }
+
+Markdown Razor doesn't need to do anything special with text blocks since all it does is look
+for the ending brace '}'. This means if you want to output a brace literal '{' then you have to
+double escape it with '{{' or '}}'.
+
+### HTML Encoding
+Markdown Razor follows MVC Markdown behavior where by default content emitted using a @@ block
+is automatically HTML encoded to better protect against XSS attack scenarios.
+
+If you want to avoid HTML Encoding you have the same options as MVC Razor where you can wrap your
+result in **@@Html.Raw(htmlString)** or if you're using an Extension method simply return a
+**MvcHtmlString** instead of a normal string.
+
+Markdown also lets you mix and match HTML in your markdown although any markdown between the tags
+does not get converted to HTML. To tell Markdown Razor to evaluate the contents inside html
+**<tag>...</tag>**'s need to prefixed with `^`, e.g.
+(taken from the [/Views/Search.md](https://raw.github.com/ServiceStack/ServiceStack.Examples/master/src/Docs/Views/Search.md) page):
+
+ ^
+
+If we didn't prefix `^` we would see `### @@page.Category ...` repeating.
+
+# Layout/MasterPage Scenarios - The Basics
+
+Markdown Razor actually deviates a bit from MVC Razor's handling of master layout pages and
+website templates (we believe for the better :).
+
+### Simple Layout Example
+
+#### MVC Razor's example of a simple website template
+
+
+Rather then using a magic method like `@@RenderBody()` we treat the output Body of View as just
+another variable storing the output a in a variable called **'Body'**. This way we use the
+same mechanism to embed the body like any other variable i.e. following the place holder convention
+of **<--@@VarName-->** so to embed the View page output in the above master template you
+would do:
+
+
+
+
+ Simple Site
+
+
+
+
+
+
+
+
+By default we use convention to select the appropriate website template for the selected view
+where it uses the nearest **default.shtml** static template it finds, looking first in the
+current directory than up parent directories.
+
+Your View page names must be unique but can live anywhere in your **/View** directory so you are
+free to structure your website templates and view pages accordingly. If for whatever reason you
+need more granularity in selecting website templates than we provide similar options to MVC for
+selecting a custom template:
+
+#### Select Custom Template with MVC Razor
+
+
+#### With Markdown Razor
+
+ @@Layout ~/websiteTemplate
+
+ # About this Site
+
+ This is some content that will make up the ""about""
+ page of our web-site. We'll use this in conjunction
+ with a layout template. The content you are seeing here
+ comes from ^^^websiteTemplate.
+
+ And obviously I can have code in here too. Here is the
+ current date/year: @@DateTime.Now.Year
+
+Note: In addition to **@@Layout** we also support the more appropriate alias of **@@template**.
+
+## Layout/MasterPage Scenarios - Adding Section Overrides
+
+MVC Razor allows you to define **sections** in your view pages which you can embed in your
+Master Template:
+
+#### With MVC Razor:
+
+
+And you use in your website template like so:
+
+
+#### With Markdown Razor:
+Markdown Razor supports the same **@@section** construct but allows you to embed it in your template
+via the standard variable substitution convention, e.g:
+
+ @@Layout ~/websiteTemplate
+
+ # About this Site
+
+ This is some content that will make up the ""about""
+ page of our web-site. We'll use this in conjunction
+ with a layout template. The content you are seeing here
+ comes from ^^^websiteTemplate.
+
+ And obviously I can have code in here too. Here is the
+ current date/year: @@DateTime.Now.Year
+
+ @@section Menu {
+ - About Item 1
+ - About Item 2
+ }
+
+ @@section Footer {
+ This is my custom footer for Home
+ }
+
+And these sections and body can be used in the website template like:
+
+
+
+
+ Simple Site
+
+
+
+
+
+
+
+
+
+
+## Encapsulation and Re-Use with HTML Helpers
+
+In order to encapsulate and better be able to re-use HTML Helper utils MVC Razor includes a few
+different ways to componentized and re-use code with HTMLHelper extension methods and declarative helpers.
+
+### Code Based HTML Helpers
+
+#### HtmlHelper extension methods with MVC Razor:
+
+
+Since we've ported MVC's HtmlHelper and its **Label**, **TextBox** extensions we can do something
+similar although to make this work we need to inherit from the **MarkdownViewBase<TModel>**
+generic base class so we know what Model to provide the strong-typed extensions for. You can do this
+using the **@@model** directive specifying the full type name:
+
+ @@model ServiceStack.ServiceHost.Tests.Formats.Product
+
+
+Whilst we ported most of MVC HtmlHelper extension methods as-is, we did rip out all the validation
+logic which appeared to be unnecessarily complex and too coupled with MVC's code-base.
+
+Note: Just as it is in MVC the **@@model** directive is a shorthand (which Markdown Razor also supports) for:
+
+**@@inherits Namespace.BaseType<Namespace.ModelType>**
+
+Whilst we don't support MVC Razors quasi C# quasi-html approach of defining declarative helpers,
+we do allow you to on a per instance basis (or globally) import helpers in custom Fields using the
+**@@helper** syntax:
+
+ @@helper Prod: MyHelpers.ExternalProductHelper
+
+ ();
+ this.Addresses = new Dictionary();
+ }
+
+ [AutoIncrement] // Creates Auto primary key
+ public int Id { get; set; }
+
+ public string FirstName { get; set; }
+ public string LastName { get; set; }
+
+ [Index(Unique = true)] // Creates Unique Index
+ public string Email { get; set; }
+
+ public Dictionary PhoneNumbers { get; private set; } //Blobbed
+ public Dictionary Addresses { get; private set; } //Blobbed
+ public DateTime CreatedAt { get; set; }
+ }
+
+ public class Order {
+
+ [AutoIncrement]
+ public int Id { get; set; }
+
+ [References(typeof(Customer))] //Creates Foreign Key
+ public int CustomerId { get; set; }
+
+ [References(typeof(Employee))] //Creates Foreign Key
+ public int EmployeeId { get; set; }
+
+ public Address ShippingAddress { get; set; } //Blobbed (no Address table)
+
+ public DateTime? OrderDate { get; set; }
+ public DateTime? RequiredDate { get; set; }
+ public DateTime? ShippedDate { get; set; }
+ public int? ShipVia { get; set; }
+ public decimal Freight { get; set; }
+ public decimal Total { get; set; }
+ }
+
+ public class OrderDetail {
+
+ [AutoIncrement]
+ public int Id { get; set; }
+
+ [References(typeof(Order))] //Creates Foreign Key
+ public int OrderId { get; set; }
+
+ public int ProductId { get; set; }
+ public decimal UnitPrice { get; set; }
+ public short Quantity { get; set; }
+ public decimal Discount { get; set; }
+ }
+
+ public class Employee {
+ public int Id { get; set; }
+ public string Name { get; set; }
+ }
+
+ public class Product {
+ public int Id { get; set; }
+ public string Name { get; set; }
+ public decimal UnitPrice { get; set; }
+ }
+
+ //Setup SQL Server Connection Factory
+ var dbFactory = new OrmLiteConnectionFactory(
+ @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\App_Data\Database1.mdf;Integrated Security=True;User Instance=True",
+ SqlServerOrmLiteDialectProvider.Instance);
+
+ //Use in-memory Sqlite DB instead
+ //var dbFactory = new OrmLiteConnectionFactory(
+ // ":memory:", false, SqliteOrmLiteDialectProvider.Instance);
+
+ //Non-intrusive: All extension methods hang off System.Data.* interfaces
+ IDbConnection dbConn = dbFactory.OpenDbConnection();
+ IDbCommand dbCmd = dbConn.CreateCommand();
+
+ //Re-Create all table schemas:
+ dbCmd.DropTable();
+ dbCmd.DropTable();
+ dbCmd.DropTable();
+ dbCmd.DropTable();
+ dbCmd.DropTable();
+
+ dbCmd.CreateTable();
+ dbCmd.CreateTable();
+ dbCmd.CreateTable();
+ dbCmd.CreateTable();
+ dbCmd.CreateTable();
+
+ dbCmd.Insert(new Employee { Id = 1, Name = "Employee 1" });
+ dbCmd.Insert(new Employee { Id = 2, Name = "Employee 2" });
+ var product1 = new Product { Id = 1, Name = "Product 1", UnitPrice = 10 };
+ var product2 = new Product { Id = 2, Name = "Product 2", UnitPrice = 20 };
+ dbCmd.Save(product1, product2);
+
+ var customer = new Customer
+ {
+ FirstName = "Orm",
+ LastName = "Lite",
+ Email = "ormlite@servicestack.net",
+ PhoneNumbers =
+ {
+ { PhoneType.Home, "555-1234" },
+ { PhoneType.Work, "1-800-1234" },
+ { PhoneType.Mobile, "818-123-4567" },
+ },
+ Addresses =
+ {
+ { AddressType.Work, new Address { Line1 = "1 Street", Country = "US", State = "NY", City = "New York", ZipCode = "10101" } },
+ },
+ CreatedAt = DateTime.UtcNow,
+ };
+ dbCmd.Insert(customer);
+
+ var customerId = dbCmd.GetLastInsertId(); //Get Auto Inserted Id
+ customer = dbCmd.QuerySingle(new { customer.Email }); //Query
+ Assert.That(customer.Id, Is.EqualTo(customerId));
+
+ //Direct access to System.Data.Transactions:
+ using (var trans = dbCmd.BeginTransaction(IsolationLevel.ReadCommitted))
+ {
+ var order = new Order
+ {
+ CustomerId = customer.Id,
+ EmployeeId = 1,
+ OrderDate = DateTime.UtcNow,
+ Freight = 10.50m,
+ ShippingAddress = new Address { Line1 = "3 Street", Country = "US", State = "NY", City = "New York", ZipCode = "12121" },
+ };
+ dbCmd.Save(order); //Inserts 1st time
+
+ order.Id = (int)dbCmd.GetLastInsertId(); //Get Auto Inserted Id
+
+ var orderDetails = new[] {
+ new OrderDetail
+ {
+ OrderId = order.Id,
+ ProductId = product1.Id,
+ Quantity = 2,
+ UnitPrice = product1.UnitPrice,
+ },
+ new OrderDetail
+ {
+ OrderId = order.Id,
+ ProductId = product2.Id,
+ Quantity = 2,
+ UnitPrice = product2.UnitPrice,
+ Discount = .15m,
+ }
+ };
+
+ dbCmd.Insert(orderDetails);
+
+ order.Total = orderDetails.Sum(x => x.UnitPrice * x.Quantity * x.Discount) + order.Freight;
+
+ dbCmd.Save(order); //Updates 2nd Time
+
+ trans.Commit();
+ }
+
+Running this against a SQL Server database will yield the results below:
+
+[](http://www.servicestack.net/files/ormlite-example.png)
+
+Notice the POCO types are stored in the [very fast](http://www.servicestack.net/mythz_blog/?p=176)
+and [Versatile](http://www.servicestack.net/mythz_blog/?p=314)
+[JSV Format](https://github.com/ServiceStack/ServiceStack.Text/wiki/JSV-Format) which although hard to do -
+is actually more compact, human and parser-friendly than JSON :)
+
+# API Overview
+
+The API is minimal, providing basic shortcuts for the primitive SQL statements:
+
+[](http://www.servicestack.net/files/ormlite-api.png)
+
+Nearly all extension methods hang off the implementation agnostic `IDbCommand`.
+
+`CreateTable` and `DropTable` create and drop tables based on a classes type definition (only public properties used).
+
+For a one-time use of a connection, you can query straight of the `IDbFactory` with:
+
+ var customers = DbFactory.Run(dbCmd => dbCmd.Where(new { Age = 30 }));
+
+The **Select** methods allow you to construct Sql using C# `string.Format()` syntax.
+If you're SQL doesn't start with a **SELECT** statement, it is assumed a WHERE clause is being provided, e.g:
+
+ var tracks = dbCmd.Select