diff --git a/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.Manual/App.config b/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.Manual/App.config
index 019932d0..fb911446 100644
--- a/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.Manual/App.config
+++ b/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.Manual/App.config
@@ -1,4 +1,4 @@
-
+
@@ -9,21 +9,17 @@
-
+
-
+
-
+
-
+
-
+
-
\ No newline at end of file
+
diff --git a/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.Manual/BookShop.AcceptanceTests.Manual.csproj b/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.Manual/BookShop.AcceptanceTests.Manual.csproj
index 0f494c36..fbb94df3 100644
--- a/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.Manual/BookShop.AcceptanceTests.Manual.csproj
+++ b/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.Manual/BookShop.AcceptanceTests.Manual.csproj
@@ -1,5 +1,5 @@
-
+
Debug
AnyCPU
@@ -10,8 +10,28 @@
Properties
BookShop.AcceptanceTests.Manual
BookShop.AcceptanceTests.Manual
- v3.5
+ v4.0
512
+
+
+ 3.5
+
+ publish\
+ true
+ Disk
+ false
+ Foreground
+ 7
+ Days
+ false
+ false
+ true
+ 0
+ 1.0.0.%2a
+ false
+ false
+ true
+
true
@@ -21,6 +41,7 @@
DEBUG;TRACE
prompt
4
+ AllRules.ruleset
pdbonly
@@ -29,6 +50,7 @@
TRACE
prompt
4
+ AllRules.ruleset
@@ -94,6 +116,23 @@
ManualStepForm.cs
+
+
+ False
+ .NET Framework 3.5 SP1 Client Profile
+ false
+
+
+ False
+ .NET Framework 3.5 SP1
+ true
+
+
+ False
+ Windows Installer 3.1
+ true
+
+
-
+
-
+
-
+
-
+
-
\ No newline at end of file
+
diff --git a/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.MvcIntegration/BookShop.AcceptanceTests.MvcIntegration.csproj b/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.MvcIntegration/BookShop.AcceptanceTests.MvcIntegration.csproj
index 226bd279..7aabe534 100644
--- a/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.MvcIntegration/BookShop.AcceptanceTests.MvcIntegration.csproj
+++ b/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.MvcIntegration/BookShop.AcceptanceTests.MvcIntegration.csproj
@@ -1,5 +1,5 @@
-
+
Debug
AnyCPU
@@ -10,8 +10,28 @@
Properties
BookShop.AcceptanceTests.MvcIntegration
BookShop.AcceptanceTests.MvcIntegration
- v3.5
+ v4.0
512
+
+
+ 3.5
+
+ publish\
+ true
+ Disk
+ false
+ Foreground
+ 7
+ Days
+ false
+ false
+ true
+ 0
+ 1.0.0.%2a
+ false
+ false
+ true
+
true
@@ -21,6 +41,7 @@
DEBUG;TRACE
prompt
4
+ AllRules.ruleset
pdbonly
@@ -29,6 +50,7 @@
TRACE
prompt
4
+ AllRules.ruleset
@@ -89,6 +111,23 @@
MvcIntegrationTestFramework
+
+
+ False
+ .NET Framework 3.5 SP1 Client Profile
+ false
+
+
+ False
+ .NET Framework 3.5 SP1
+ true
+
+
+ False
+ Windows Installer 3.1
+ true
+
+
-
+
-
+
-
+
-
+
-
\ No newline at end of file
+
diff --git a/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.Selenium/BookShop.AcceptanceTests.Selenium.csproj b/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.Selenium/BookShop.AcceptanceTests.Selenium.csproj
index c94475b7..de2e8faa 100644
--- a/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.Selenium/BookShop.AcceptanceTests.Selenium.csproj
+++ b/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.Selenium/BookShop.AcceptanceTests.Selenium.csproj
@@ -1,5 +1,5 @@
-
+
Debug
AnyCPU
@@ -10,8 +10,28 @@
Properties
BookShop.AcceptanceTests.Selenium
BookShop.AcceptanceTests.Selenium
- v3.5
+ v4.0
512
+
+
+ 3.5
+
+ publish\
+ true
+ Disk
+ false
+ Foreground
+ 7
+ Days
+ false
+ false
+ true
+ 0
+ 1.0.0.%2a
+ false
+ false
+ true
+
true
@@ -21,6 +41,7 @@
DEBUG;TRACE
prompt
4
+ AllRules.ruleset
pdbonly
@@ -29,6 +50,7 @@
TRACE
prompt
4
+ AllRules.ruleset
@@ -89,6 +111,23 @@
Bookshop
+
+
+ False
+ .NET Framework 3.5 SP1 Client Profile
+ false
+
+
+ False
+ .NET Framework 3.5 SP1
+ true
+
+
+ False
+ Windows Installer 3.1
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.WatiN/BookShop.AcceptanceTests.WatiN.csproj b/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.WatiN/BookShop.AcceptanceTests.WatiN.csproj
new file mode 100644
index 00000000..2feb6972
--- /dev/null
+++ b/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.WatiN/BookShop.AcceptanceTests.WatiN.csproj
@@ -0,0 +1,90 @@
+
+
+
+ Debug
+ AnyCPU
+ 8.0.30703
+ 2.0
+ {5D9AA484-8DC0-4333-8C11-B949C38E00B1}
+ Library
+ Properties
+ BookShop.AcceptanceTests.WatiN
+ BookShop.AcceptanceTests.WatiN
+ v4.0
+ 512
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+ ..\lib\nunit.framework.dll
+
+
+
+
+
+
+
+
+
+
+
+ ..\lib\WatiN.Core.dll
+
+
+ False
+ $(ProgramFiles)\TechTalk\SpecFlow\TechTalk.SpecFlow.dll
+
+
+
+
+
+
+
+
+
+
+
+
+ US01_BookSearch.feature
+ True
+ True
+
+
+
+
+
+ SpecFlowSingleFileGenerator
+ US01_BookSearch.feature.cs
+
+
+
+
+ {B75CFB7F-0D21-4C39-8550-F1C7BDEEDC50}
+ Bookshop
+
+
+
+
+
\ No newline at end of file
diff --git a/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.WatiN/Properties/AssemblyInfo.cs b/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.WatiN/Properties/AssemblyInfo.cs
new file mode 100644
index 00000000..909d5e95
--- /dev/null
+++ b/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.WatiN/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("BookShop.AcceptanceTests.WatiN")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("BookShop.AcceptanceTests.WatiN")]
+[assembly: AssemblyCopyright("Copyright © 2010")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("6d7ff727-834f-4666-b749-6c4af06968dc")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.WatiN/StepDefinitions/BookSteps.cs b/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.WatiN/StepDefinitions/BookSteps.cs
new file mode 100644
index 00000000..44012cd2
--- /dev/null
+++ b/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.WatiN/StepDefinitions/BookSteps.cs
@@ -0,0 +1,38 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using BookShop.AcceptanceTests.Support;
+using Bookshop.Controllers;
+using Bookshop.Models;
+using NUnit.Framework;
+using TechTalk.SpecFlow;
+
+namespace BookShop.AcceptanceTests.StepDefinitions
+{
+ [Binding]
+ public class BookSteps
+ {
+ public static readonly ReferenceBookList ReferenceBooks = new ReferenceBookList();
+
+ [BeforeScenario]
+ public void CleanReferenceBooks()
+ {
+ ReferenceBooks.Clear();
+ }
+
+ [Given(@"the following books")]
+ public void GivenTheFollowingBooks(Table table)
+ {
+ var db = new BookShopEntities();
+ foreach (var row in table.Rows)
+ {
+ Book book = new Book { Author = row["Author"], Title = row["Title"], Price = Convert.ToDecimal(row["Price"]) };
+ if (table.Header.Contains("Id"))
+ ReferenceBooks.Add(row["Id"], book);
+ db.AddToBooks(book);
+ }
+ db.SaveChanges();
+ }
+ }
+}
diff --git a/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.WatiN/StepDefinitions/SearchSteps.cs b/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.WatiN/StepDefinitions/SearchSteps.cs
new file mode 100644
index 00000000..bce7ffb6
--- /dev/null
+++ b/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.WatiN/StepDefinitions/SearchSteps.cs
@@ -0,0 +1,52 @@
+using System.Collections.Generic;
+using System.Linq;
+using BookShop.AcceptanceTests.Support;
+using BookShop.AcceptanceTests.WatiN.Support;
+using Bookshop.Models;
+using NUnit.Framework;
+using TechTalk.SpecFlow;
+using WatiN.Core;
+
+namespace BookShop.AcceptanceTests.WatiN.StepDefinitions
+{
+ [Binding]
+ public class SearchSteps
+ {
+ [When(@"I perform a simple search on '(.*)'")]
+ public void PerformSimpleSearch(string title)
+ {
+ WebBrowser.Current.GoToThePage("Home");
+ WebBrowser.Current.TextFields.First(Find.ById("searchTerm")).TypeText(title);
+ WebBrowser.Current.Buttons.First(Find.ByValue("Search")).Click();
+ //WebBrowser.Current.WaitForPageToLoad("30000");
+ }
+
+ [Then(@"the book list should exactly contain book '(.*)'")]
+ public void ThenTheBookListShouldExactlyContainBook(string title)
+ {
+ ThenTheBookListShouldExactlyContainBooks(title);
+ }
+
+ [Then(@"the book list should exactly contain books (.*)")]
+ public void ThenTheBookListShouldExactlyContainBooks(string titleList)
+ {
+ var titles = titleList.Split(',').Select(t => t.Trim().Trim('\''));
+
+ var table = WebBrowser.Current.Tables.First();
+ var itemCount = table.TableRows.Count;
+ var books = new List();
+ const int headerCount = 1;
+ for (int i = headerCount; i < itemCount; i++)
+ {
+ var tableRow = table.TableRows[i];
+ string title = tableRow.TableCells.First(Find.ByClass("title")).Text;
+ string author = tableRow.TableCells.First(Find.ByClass("author")).Text;
+ books.Add(new Book { Title = title, Author = author });
+ }
+
+ foreach (var title in titles)
+ CustomAssert.Any(books, b => b.Title == title);
+ Assert.AreEqual(titles.Count(), books.Count, "The list contains other books too");
+ }
+ }
+}
\ No newline at end of file
diff --git a/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.WatiN/Support/CustomAssert.cs b/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.WatiN/Support/CustomAssert.cs
new file mode 100644
index 00000000..7fed4ea5
--- /dev/null
+++ b/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.WatiN/Support/CustomAssert.cs
@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using NUnit.Framework;
+
+namespace BookShop.AcceptanceTests.Support
+{
+ public static class CustomAssert
+ {
+ public static void Any(IEnumerable items, Func predicate)
+ {
+ Assert.IsTrue(items.Any(predicate), "The collection does not contain the expected item");
+ }
+ }
+}
diff --git a/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.WatiN/Support/DatabaseTools.cs b/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.WatiN/Support/DatabaseTools.cs
new file mode 100644
index 00000000..3225c0fe
--- /dev/null
+++ b/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.WatiN/Support/DatabaseTools.cs
@@ -0,0 +1,30 @@
+using System;
+using System.Linq;
+using Bookshop.Models;
+using TechTalk.SpecFlow;
+
+namespace BookShop.AcceptanceTests.Support
+{
+ [Binding]
+ public class DatabaseTools
+ {
+ [BeforeScenario]
+ public void CleanDatabase()
+ {
+ var db = new BookShopEntities();
+ foreach (var lineItem in db.OrderLines)
+ {
+ db.DeleteObject(lineItem);
+ }
+ foreach (var order in db.Orders)
+ {
+ db.DeleteObject(order);
+ }
+ foreach (var book in db.Books)
+ {
+ db.DeleteObject(book);
+ }
+ db.SaveChanges();
+ }
+ }
+}
diff --git a/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.WatiN/Support/ReferenceBookList.cs b/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.WatiN/Support/ReferenceBookList.cs
new file mode 100644
index 00000000..339c0b4a
--- /dev/null
+++ b/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.WatiN/Support/ReferenceBookList.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Bookshop.Models;
+using NUnit.Framework;
+
+namespace BookShop.AcceptanceTests.Support
+{
+ public class ReferenceBookList : Dictionary
+ {
+ public Book GetById(string bookId)
+ {
+ var result = this[bookId.Trim()];
+ Assert.IsNotNull(result, "no reference book with id: " + bookId);
+ return result;
+ }
+ }
+}
diff --git a/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.WatiN/Support/WatiNSteps.cs b/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.WatiN/Support/WatiNSteps.cs
new file mode 100644
index 00000000..ae8704af
--- /dev/null
+++ b/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.WatiN/Support/WatiNSteps.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Configuration;
+using System.Threading;
+using TechTalk.SpecFlow;
+using WatiN.Core;
+
+namespace BookShop.AcceptanceTests.WatiN.Support
+{
+ static public class WatiNStepsExtensions
+ {
+ public static void GoToThePage(this Browser browser, string page)
+ {
+ var rootUrl = new Uri(ConfigurationManager.AppSettings["AppUrl"]);
+ var absoluteUrl = new Uri(rootUrl, page);
+ browser.GoTo(absoluteUrl);
+ //browser.WaitForComplete();
+ //Thread.Sleep(500);
+ }
+ }
+}
diff --git a/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.WatiN/Support/WebBrowser.cs b/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.WatiN/Support/WebBrowser.cs
new file mode 100644
index 00000000..59d52099
--- /dev/null
+++ b/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.WatiN/Support/WebBrowser.cs
@@ -0,0 +1,30 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using TechTalk.SpecFlow;
+using WatiN.Core;
+
+namespace BookShop.AcceptanceTests.WatiN.Support
+{
+ [Binding]
+ public class WebBrowser
+ {
+ public static Browser Current
+ {
+ get
+ {
+ if (!ScenarioContext.Current.ContainsKey("browser"))
+ ScenarioContext.Current["browser"] = new IE();
+ return (Browser)ScenarioContext.Current["browser"];
+ }
+ }
+
+ [AfterScenario]
+ public static void Close()
+ {
+ if (ScenarioContext.Current.ContainsKey("browser"))
+ WebBrowser.Current.Close();
+ }
+ }
+}
diff --git a/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.WatiN/US01_BookSearch.feature b/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.WatiN/US01_BookSearch.feature
new file mode 100644
index 00000000..db9b94b7
--- /dev/null
+++ b/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.WatiN/US01_BookSearch.feature
@@ -0,0 +1,33 @@
+Feature: US01 - Book Search
+ As a potential customer
+ I want to search for books by a simple string
+ So that I can easily allocate books by something I remember from them.
+
+Background:
+ Given the following books
+ |Author |Title |Price |
+ |Martin Fowler |Analysis Patterns |50.20 |
+ |Eric Evans |Domain Driven Design |46.34 |
+ |Ted Pattison |Inside Windows SharePoint Services |31.49 |
+ |Gojko Adzic |Bridging the Communication Gap |24.75 |
+
+@web
+Scenario: Title should be matched
+ When I perform a simple search on 'Domain'
+ Then the book list should exactly contain book 'Domain Driven Design'
+
+@web
+Scenario: Space should be treated as multiple OR search
+ When I perform a simple search on 'Windows Communication'
+ Then the book list should exactly contain books 'Inside Windows SharePoint Services', 'Bridging the Communication Gap'
+
+@web
+@alternative_syntax
+Scenario Outline: Simple search (scenario outline syntax)
+ When I perform a simple search on ''
+ Then the book list should exactly contain books
+
+ Examples:
+ |search phrase |books |
+ |Domain |'Domain Driven Design' |
+ |Windows Communication |'Inside Windows SharePoint Services', 'Bridging the Communication Gap' |
diff --git a/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.WatiN/US01_BookSearch.feature.cs b/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.WatiN/US01_BookSearch.feature.cs
new file mode 100644
index 00000000..a3bbb469
--- /dev/null
+++ b/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.WatiN/US01_BookSearch.feature.cs
@@ -0,0 +1,155 @@
+// ------------------------------------------------------------------------------
+//
+// This code was generated by SpecFlow (http://www.specflow.org/).
+// SpecFlow Version:1.3.0.0
+// Runtime Version:4.0.30319.1
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+// ------------------------------------------------------------------------------
+#region Designer generated code
+namespace BookShop.AcceptanceTests.Selenium
+{
+ using TechTalk.SpecFlow;
+
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("TechTalk.SpecFlow", "1.3.0.0")]
+ [System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [NUnit.Framework.TestFixtureAttribute()]
+ [NUnit.Framework.DescriptionAttribute("US01 - Book Search")]
+ public partial class US01_BookSearchFeature
+ {
+
+ private static TechTalk.SpecFlow.ITestRunner testRunner;
+
+#line 1 "US01_BookSearch.feature"
+#line hidden
+
+ [NUnit.Framework.TestFixtureSetUpAttribute()]
+ public virtual void FeatureSetup()
+ {
+ testRunner = TechTalk.SpecFlow.TestRunnerManager.GetTestRunner();
+ TechTalk.SpecFlow.FeatureInfo featureInfo = new TechTalk.SpecFlow.FeatureInfo(new System.Globalization.CultureInfo("en-US"), "US01 - Book Search", "As a potential customer\r\nI want to search for books by a simple string\r\nSo that I" +
+ " can easily allocate books by something I remember from them.", ((string[])(null)));
+ testRunner.OnFeatureStart(featureInfo);
+ }
+
+ [NUnit.Framework.TestFixtureTearDownAttribute()]
+ public virtual void FeatureTearDown()
+ {
+ testRunner.OnFeatureEnd();
+ testRunner = null;
+ }
+
+ public virtual void ScenarioSetup(TechTalk.SpecFlow.ScenarioInfo scenarioInfo)
+ {
+ testRunner.OnScenarioStart(scenarioInfo);
+ this.FeatureBackground();
+ }
+
+ [NUnit.Framework.TearDownAttribute()]
+ public virtual void ScenarioTearDown()
+ {
+ testRunner.OnScenarioEnd();
+ }
+
+ public virtual void FeatureBackground()
+ {
+#line 6
+#line hidden
+ TechTalk.SpecFlow.Table table1 = new TechTalk.SpecFlow.Table(new string[] {
+ "Author",
+ "Title",
+ "Price"});
+ table1.AddRow(new string[] {
+ "Martin Fowler",
+ "Analysis Patterns",
+ "50.20"});
+ table1.AddRow(new string[] {
+ "Eric Evans",
+ "Domain Driven Design",
+ "46.34"});
+ table1.AddRow(new string[] {
+ "Ted Pattison",
+ "Inside Windows SharePoint Services",
+ "31.49"});
+ table1.AddRow(new string[] {
+ "Gojko Adzic",
+ "Bridging the Communication Gap",
+ "24.75"});
+#line 7
+testRunner.Given("the following books", ((string)(null)), table1);
+#line hidden
+ }
+
+ [NUnit.Framework.TestAttribute()]
+ [NUnit.Framework.DescriptionAttribute("Title should be matched")]
+ [NUnit.Framework.CategoryAttribute("web")]
+ public virtual void TitleShouldBeMatched()
+ {
+ TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("Title should be matched", new string[] {
+ "web"});
+#line 15
+this.ScenarioSetup(scenarioInfo);
+#line 16
+testRunner.When("I perform a simple search on \'Domain\'");
+#line 17
+testRunner.Then("the book list should exactly contain book \'Domain Driven Design\'");
+#line hidden
+ testRunner.CollectScenarioErrors();
+ }
+
+ [NUnit.Framework.TestAttribute()]
+ [NUnit.Framework.DescriptionAttribute("Space should be treated as multiple OR search")]
+ [NUnit.Framework.CategoryAttribute("web")]
+ public virtual void SpaceShouldBeTreatedAsMultipleORSearch()
+ {
+ TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("Space should be treated as multiple OR search", new string[] {
+ "web"});
+#line 20
+this.ScenarioSetup(scenarioInfo);
+#line 21
+testRunner.When("I perform a simple search on \'Windows Communication\'");
+#line 22
+testRunner.Then("the book list should exactly contain books \'Inside Windows SharePoint Services\', " +
+ "\'Bridging the Communication Gap\'");
+#line hidden
+ testRunner.CollectScenarioErrors();
+ }
+
+ public virtual void SimpleSearchScenarioOutlineSyntax(string searchPhrase, string books)
+ {
+ TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("Simple search (scenario outline syntax)", new string[] {
+ "web",
+ "alternative_syntax"});
+#line 26
+this.ScenarioSetup(scenarioInfo);
+#line 27
+testRunner.When(string.Format("I perform a simple search on \'{0}\'", searchPhrase));
+#line 28
+testRunner.Then(string.Format("the book list should exactly contain books {0}", books));
+#line hidden
+ testRunner.CollectScenarioErrors();
+ }
+
+ [NUnit.Framework.TestAttribute()]
+ [NUnit.Framework.DescriptionAttribute("Simple search (scenario outline syntax)")]
+ [NUnit.Framework.CategoryAttribute("web")]
+ [NUnit.Framework.CategoryAttribute("alternative_syntax")]
+ public virtual void SimpleSearchScenarioOutlineSyntax_Domain()
+ {
+ this.SimpleSearchScenarioOutlineSyntax("Domain", "\'Domain Driven Design\'");
+ }
+
+ [NUnit.Framework.TestAttribute()]
+ [NUnit.Framework.DescriptionAttribute("Simple search (scenario outline syntax)")]
+ [NUnit.Framework.CategoryAttribute("web")]
+ [NUnit.Framework.CategoryAttribute("alternative_syntax")]
+ public virtual void SimpleSearchScenarioOutlineSyntax_WindowsCommunication()
+ {
+ this.SimpleSearchScenarioOutlineSyntax("Windows Communication", "\'Inside Windows SharePoint Services\', \'Bridging the Communication Gap\'");
+ }
+ }
+}
+#endregion
diff --git a/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests/BookShop.AcceptanceTests.csproj b/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests/BookShop.AcceptanceTests.csproj
index 56025beb..744ba143 100644
--- a/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests/BookShop.AcceptanceTests.csproj
+++ b/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests/BookShop.AcceptanceTests.csproj
@@ -1,4 +1,5 @@
-
+
+
Debug
AnyCPU
@@ -9,9 +10,28 @@
Properties
BookShop.AcceptanceTests
BookShop.AcceptanceTests
- v3.5
+ v4.0
512
{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+
+
+ 3.5
+
+ publish\
+ true
+ Disk
+ false
+ Foreground
+ 7
+ Days
+ false
+ false
+ true
+ 0
+ 1.0.0.%2a
+ false
+ false
+ true
true
@@ -21,6 +41,7 @@
DEBUG;TRACE
prompt
4
+ AllRules.ruleset
pdbonly
@@ -29,11 +50,10 @@
TRACE
prompt
4
+ AllRules.ruleset
-
- True
-
+
False
..\lib\Moq.dll
@@ -114,6 +134,28 @@
Bookshop
+
+
+ False
+ Microsoft .NET Framework 4 %28x86 and x64%29
+ true
+
+
+ False
+ .NET Framework 3.5 SP1 Client Profile
+ false
+
+
+ False
+ .NET Framework 3.5 SP1
+ false
+
+
+ False
+ Windows Installer 3.1
+ true
+
+
-
+
-
-
-
+
+
+
@@ -71,7 +71,7 @@
-
+
@@ -126,7 +126,7 @@
-
+
@@ -166,28 +166,28 @@
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ASP.NET-MVC/BookShop/Bookshop/Web.config b/ASP.NET-MVC/BookShop/Bookshop/Web.config
index 68dea04f..73dba079 100644
--- a/ASP.NET-MVC/BookShop/Bookshop/Web.config
+++ b/ASP.NET-MVC/BookShop/Bookshop/Web.config
@@ -8,44 +8,26 @@
\Windows\Microsoft.Net\Framework\v2.x\Config
-->
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ASP.NET-MVC/BookShop/LocalTestRun.testrunconfig b/ASP.NET-MVC/BookShop/LocalTestRun.testrunconfig
index 33476043..3083169d 100644
--- a/ASP.NET-MVC/BookShop/LocalTestRun.testrunconfig
+++ b/ASP.NET-MVC/BookShop/LocalTestRun.testrunconfig
@@ -1,5 +1,5 @@
-
-
+
+
This is a default test run configuration for a local test run.
\ No newline at end of file
diff --git a/ASP.NET-MVC/BookShop/ReadMe.txt b/ASP.NET-MVC/BookShop/ReadMe.txt
index 7f46c4f4..24566e16 100644
--- a/ASP.NET-MVC/BookShop/ReadMe.txt
+++ b/ASP.NET-MVC/BookShop/ReadMe.txt
@@ -9,9 +9,7 @@ You can find more information about SpecFlow at http://www.specflow.org/.
Prerequisites to run the application
====================================
-- Visual Studio 2008 or Visual Studio 2010
-- ASP.NET MVC2 RTM (only for Visual Studio 2008)
- (http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=c9ba1fe1-3ba8-439a-9e21-def90a8615a9)
+- Visual Studio 2010
- Microsoft SQL Server 2005 or higher (any editions)
- SpecFlow 1.3 or higher (http://www.specflow.org/)
- Optionally: cuke4vs - syntax coloring and intellisense for SpecFlow files
@@ -36,19 +34,6 @@ Setup Application
- Set the "BookShop" project as startup project and run the application. You
should see some books on the start page of the app.
-Upgrade Solution to VS2010
-==========================
-
-The solution can be upgraded to VS2010 with a few steps:
-- Open solution in VS2010 and let Visual Studio upgrade the solution.
- Let the wizard upgrade all projects to .NET 4.0 (choose "yes").
-- Upgrade the projects in the "Alternative Integrations" folder to .NET 4.0
- manually (change target framework in project properties). The upgrade wizard
- in VS2010 RTM skips these projects unfortunately.
-- Select the feature files in solution explorer and invoke "Run Custom Tool"
- command from the context menu (you can select multiple files within a
- project).
-
There will be two warnings still in the BookShop.edmx file, but those can be
ignored.
diff --git a/ASP.NET-MVC/BookShop/lib/Interop.SHDocVw.dll b/ASP.NET-MVC/BookShop/lib/Interop.SHDocVw.dll
new file mode 100644
index 00000000..9eef31ee
Binary files /dev/null and b/ASP.NET-MVC/BookShop/lib/Interop.SHDocVw.dll differ
diff --git a/ASP.NET-MVC/BookShop/lib/MvcIntegrationTestFramework/MvcIntegrationTestFramework.csproj b/ASP.NET-MVC/BookShop/lib/MvcIntegrationTestFramework/MvcIntegrationTestFramework.csproj
index d16725f5..2ba524ee 100644
--- a/ASP.NET-MVC/BookShop/lib/MvcIntegrationTestFramework/MvcIntegrationTestFramework.csproj
+++ b/ASP.NET-MVC/BookShop/lib/MvcIntegrationTestFramework/MvcIntegrationTestFramework.csproj
@@ -1,5 +1,5 @@
-
+
Debug
AnyCPU
@@ -10,8 +10,28 @@
Properties
MvcIntegrationTestFramework
MvcIntegrationTestFramework
- v3.5
+ v4.0
512
+
+
+ 3.5
+
+ publish\
+ true
+ Disk
+ false
+ Foreground
+ 7
+ Days
+ false
+ false
+ true
+ 0
+ 1.0.0.%2a
+ false
+ false
+ true
+
true
@@ -21,6 +41,7 @@
DEBUG;TRACE
prompt
4
+ AllRules.ruleset
pdbonly
@@ -29,6 +50,7 @@
TRACE
prompt
4
+ AllRules.ruleset
@@ -67,6 +89,23 @@
+
+
+ False
+ .NET Framework 3.5 SP1 Client Profile
+ false
+
+
+ False
+ .NET Framework 3.5 SP1
+ true
+
+
+ False
+ Windows Installer 3.1
+ true
+
+