Exemplo n.º 1
0
        public void GivenXmlWithSingleProject__WhenCallingParse__ShouldReturnArrayWithMatchingProject()
        {
            const string xml = @"<?xml version=""1.0"" encoding=""UTF-8""?>
                                <eaw-ci:BuildConfiguration
                                  ConfigVersion=""1.0.0"" 
                                  xmlns:eaw-ci=""eaw-ci""
                                  xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"">
                                  <Projects>
                                    <Project Id=""TestProject"">
                                      <Jobs>
                                        <Job Id=""idvalue1"">
                                          <Tasks>
                                          </Tasks>
                                        </Job>
                                      </Jobs>
                                    </Project>
                                  </Projects>
                                </eaw-ci:BuildConfiguration>";

            _mockFileData.TextContents = xml;

            const string projectName = "TestProject";

            BuildComponentFactoryStub factoryStub = new BuildComponentFactoryStub {
                Project = new ProjectStub()
            };
            XmlBuildConfigParser sut = new XmlBuildConfigParser(_fileSystem, factoryStub);

            IEnumerable <IProject> projects = sut.Parse(Path);

            ProjectStub actual     = projects.ToList()[0] as ProjectStub;
            string      actualName = actual?.Name;

            AssertProjectNameEquals(projectName, actualName);
        }
Exemplo n.º 2
0
        public void GivenJobWithMultipleTasks__WhenCallingParse__JobShouldHaveAllTasks()
        {
            const string lua = @"
                local p = project('test')
                local j = p:add_job('test-job')
                j:add_tasks { run_process('echo'), copy('a', 'b') }  
            ";

            _mockFileData.TextContents = lua;

            JobStub jobStub = new JobStub();

            ITask[] expectedTasks = { new TaskDummy(), new TaskDummy() };
            BuildComponentFactoryStub factoryStub = new BuildComponentFactoryStub
            {
                Job         = jobStub,
                TaskBuilder = new IteratingTaskBuilderStub
                {
                    Tasks = expectedTasks.ToList()
                }
            };

            MakeSutAndParse(factoryStub);

            List <ITask> actualTasks = jobStub.Tasks;

            CollectionAssert.AreEqual(expectedTasks, actualTasks);
        }
Exemplo n.º 3
0
        GivenProjectWithJobAndTaskReferenceToNonExistingGlobalTask__WhenCallingParse__ShouldThrowInvalidOperationException()
        {
            const string xml = @"<?xml version=""1.0"" encoding=""UTF-8""?>
                                <eaw-ci:BuildConfiguration
                                  ConfigVersion=""1.0.0"" 
                                  xmlns:eaw-ci=""eaw-ci""
                                  xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"">
                                  <GlobalTasks>
                                  </GlobalTasks>

                                  <Projects>
                                    <Project Id=""idvalue1"">
                                      <Jobs>
                                        <Job Id=""idvalue2"" Name=""TestJob"">
                                          <Tasks>
                                            <TaskReference ReferenceId=""TestTask"" />
                                          </Tasks>
                                        </Job>
                                      </Jobs>
                                    </Project>
                                  </Projects>
                                </eaw-ci:BuildConfiguration>";

            _mockFileData.TextContents = xml;

            BuildComponentFactoryStub factoryStub = new BuildComponentFactoryStub();
            XmlBuildConfigParser      sut         = new XmlBuildConfigParser(_fileSystem, factoryStub);

            sut.Parse(Path);
        }
Exemplo n.º 4
0
        public void GivenConfigWithProjectRunProcessTaskWithSettings__WhenParsing__TaskShouldBeConfiguredCorrectly()
        {
            const string lua = @"
                local p = project('test')
                local j = p:add_job('test-job')
                j:add_task(run_process('echo'):
                           arguments('Hello World'):
                           working_directory('sub/dir'):
                           allowed_to_fail(true)
                )  
            ";

            _mockFileData.TextContents = lua;

            TaskBuilderMock taskBuilderMock = new TaskBuilderMock(new Dictionary <string, object>
            {
                { "ExecutablePath", "echo" },
                { "Arguments", "Hello World" },
                { "WorkingDirectory", "sub/dir" },
                { "AllowedToFail", true }
            });

            BuildComponentFactoryStub factoryStub = new BuildComponentFactoryStub {
                TaskBuilder = taskBuilderMock
            };

            MakeSutAndParse(factoryStub);

            taskBuilderMock.Verify();
        }
Exemplo n.º 5
0
        GivenConfigWithCreateSteamWorkshopItemTask_WithoutTags__WhenParsing__TaskShouldBeConfiguredWithGivenSettings()
        {
            const string lua = @"
                local p = project('test')
                local j = p:add_job('test-job')
                j:add_task(create_steam_workshop_item {
                    app_id = 32470,
                    title = 'my-test-item',
                    description_file = 'path/to/description',
                    item_folder = 'path/to/folder',
                    visibility = visibility.private,
                    language = 'English'
                })
            ";

            _mockFileData.TextContents = lua;

            TaskBuilderMock taskBuilderMock = new TaskBuilderMock(new Dictionary <string, object>
            {
                { "AppId", (uint)32470 },
                { "Title", "my-test-item" },
                { "DescriptionFilePath", "path/to/description" },
                { "ItemFolderPath", "path/to/folder" },
                { "Visibility", WorkshopItemVisibility.Private },
                { "Language", "English" }
            });

            BuildComponentFactoryStub factoryStub = new BuildComponentFactoryStub {
                TaskBuilder = taskBuilderMock
            };

            MakeSutAndParse(factoryStub);

            taskBuilderMock.Verify();
        }
Exemplo n.º 6
0
        public void GivenConfigWithProjectWithJobAndUpdateSteamWorkshopItemTask__WhenParsing__JobShouldHaveTask()
        {
            const string lua = @"
                local p = project('test')
                local j = p:add_job('test-job')
                j:add_task(update_steam_workshop_item {
                    app_id = 32470,
                    title = 'my-test-item',
                    description_file = 'path/to/description',
                    item_folder = 'path/to/folder',
                    visibility = visibility.private,
                    language = 'English'
                })  
            ";

            _mockFileData.TextContents = lua;

            JobStub   jobStub   = new JobStub();
            TaskDummy taskDummy = new TaskDummy();
            BuildComponentFactoryStub factoryStub = MakeBuildComponentFactoryStub(jobStub, taskDummy);

            MakeSutAndParse(factoryStub);

            ITask actualTask = jobStub.Tasks.First();

            Assert.AreEqual(taskDummy, actualTask);
        }
Exemplo n.º 7
0
        public void GivenConfigWithCopyTaskWithSettings__WhenParsing__TaskShouldBeConfiguredCorrectly()
        {
            const string lua = @"
                local p = project('test')
                local j = p:add_job('test-job')
                j:add_task(copy('a', 'b'):
                           overwrite(true):
                           pattern('*.xml'):
                           recursive(true))  
            ";

            _mockFileData.TextContents = lua;

            TaskBuilderMock taskBuilderMock = new TaskBuilderMock(new Dictionary <string, object>
            {
                { "CopyFromPath", "a" },
                { "CopyToPath", "b" },
                { "AlwaysOverwrite", true },
                { "CopyFileByPattern", "*.xml" },
                { "CopySubfolders", true }
            });

            BuildComponentFactoryStub factoryStub = new BuildComponentFactoryStub {
                TaskBuilder = taskBuilderMock
            };

            MakeSutAndParse(factoryStub);

            taskBuilderMock.Verify();
        }
Exemplo n.º 8
0
        GivenConfigWithUpdateSteamWorkshopItemTask_WithTags__WhenParsing__TaskShouldBeConfiguredWithGivenTags()
        {
            const string lua = @"
                local p = project('test')
                local j = p:add_job('test-job')
                j:add_task(update_steam_workshop_item {
                    app_id = 32470,
                    item_id = 1234,
                    title = 'my-test-item',
                    description_file = 'path/to/description',
                    item_folder = 'path/to/folder',
                    visibility = visibility.private,
                    language = 'English',
                    tags = {'EAW', 'FOC'}
                })
            ";

            _mockFileData.TextContents = lua;

            TaskBuilderSpy taskBuilderMock = new TaskBuilderSpy();

            BuildComponentFactoryStub factoryStub = new BuildComponentFactoryStub {
                TaskBuilder = taskBuilderMock
            };

            MakeSutAndParse(factoryStub);

            object actual = taskBuilderMock["Tags"];

            Assert.IsInstanceOfType(actual, typeof(IEnumerable <string>));
            CollectionAssert.AreEquivalent(ExpectedTags, ((IEnumerable <string>)actual).ToArray());
        }
        public void WhenCallingLink__ShouldReturnLuaCopyTask()
        {
            BuildComponentFactoryStub factoryStub = new BuildComponentFactoryStub();
            EawCiLuaEnvironment       sut         = new EawCiLuaEnvironment(factoryStub, _luaParser);
            ILuaTask actual = sut.Link(string.Empty, string.Empty);

            Assert.IsInstanceOfType(actual, typeof(LuaCopyTask));
        }
Exemplo n.º 10
0
        public void GivenLuaProjectWithName__WhenGettingProject__ProjectShouldHaveName()
        {
            BuildComponentFactoryStub factoryStub = new BuildComponentFactoryStub();
            LuaProject sut = new LuaProject("TestProject", factoryStub);

            string actual = sut.Project.Name;

            Assert.AreEqual("TestProject", actual);
        }
Exemplo n.º 11
0
        public void GivenProjectWithJobAndTwoTasks__WhenCallingParse__ShouldAddBothTasksToJob()
        {
            const string xml = @"<?xml version=""1.0"" encoding=""UTF-8""?>
                                <eaw-ci:BuildConfiguration
                                  ConfigVersion=""1.0.0"" 
                                  xmlns:eaw-ci=""eaw-ci""
                                  xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"">
                                  <Projects>
                                    <Project Id=""idvalue0"">
                                      <Jobs>
                                        <Job Id=""idvalue1"" Name=""TestJob"">
                                          <Tasks>
                                            <Task Id=""idvalue2"" Name=""FirstTask"" xsi:type=""eaw-ci:Copy"">
                                              <CopyFromPath>path/to/first/source</CopyFromPath>
                                              <CopyToPath>path/to/first/dest</CopyToPath>
                                              <CopySubfolders>true</CopySubfolders>
                                              <CopyFileByPattern>*</CopyFileByPattern>
                                              <AlwaysOverwrite>false</AlwaysOverwrite>
                                            </Task>

                                            <Task Id=""idvalue3"" Name=""SecondTask"" xsi:type=""eaw-ci:Copy"">
                                              <CopyFromPath>path/to/second/source</CopyFromPath>
                                              <CopyToPath>path/to/second/dest</CopyToPath>
                                              <CopySubfolders>true</CopySubfolders>
                                              <CopyFileByPattern>*</CopyFileByPattern>
                                              <AlwaysOverwrite>false</AlwaysOverwrite>
                                            </Task>
                                          </Tasks>
                                        </Job>
                                      </Jobs>
                                    </Project>
                                  </Projects>
                                </eaw-ci:BuildConfiguration>";

            _mockFileData.TextContents = xml;

            JobStub   jobStub    = new JobStub();
            TaskDummy firstTask  = new TaskDummy();
            TaskDummy secondTask = new TaskDummy();

            IteratingTaskBuilderStub taskBuilderStub = new IteratingTaskBuilderStub();

            taskBuilderStub.Tasks.Add(firstTask);
            taskBuilderStub.Tasks.Add(secondTask);

            BuildComponentFactoryStub factoryStub = new BuildComponentFactoryStub
            {
                Job = jobStub, TaskBuilder = taskBuilderStub
            };
            XmlBuildConfigParser sut = new XmlBuildConfigParser(_fileSystem, factoryStub);

            sut.Parse(Path);

            AssertJobHasExpectedTask(jobStub, firstTask);
            AssertJobHasExpectedTask(jobStub, secondTask);
        }
Exemplo n.º 12
0
        public void GivenConfigWithProjectAndDifferentName__WhenParsing__ShouldReturnProject()
        {
            const string lua = "project('another-project')";

            _mockFileData.TextContents = lua;

            BuildComponentFactoryStub factoryStub = new BuildComponentFactoryStub();
            IEnumerable <IProject>    projects    = MakeSutAndParse(factoryStub);

            IProject actual = projects.First();

            Assert.AreEqual("another-project", actual.Name);
        }
Exemplo n.º 13
0
        private static BuildComponentFactoryStub MakeBuildComponentFactoryStub(JobDummy job, TaskDummy task = null)
        {
            BuildComponentFactoryStub factoryStub = new BuildComponentFactoryStub
            {
                Project     = new ProjectStub(),
                Job         = job,
                TaskBuilder = new TaskBuilderStub
                {
                    Task = task ?? new TaskDummy()
                }
            };

            return(factoryStub);
        }
Exemplo n.º 14
0
        public void GivenLuaProject__WhenAddingJob__ShouldReturnLuaJob()
        {
            JobStub jobStub = new JobStub();
            BuildComponentFactoryStub factoryStub = new BuildComponentFactoryStub
            {
                Project = new ProjectStub(),
                Job     = jobStub
            };

            LuaProject sut    = new LuaProject("TestProject", factoryStub);
            LuaJob     actual = sut.add_job("test-job");

            Assert.IsInstanceOfType(actual, typeof(LuaJob));
        }
Exemplo n.º 15
0
        public void GivenProjectWithJobAndCopyTask__WhenCallingParse__ShouldConfigureTaskWithBuilder()
        {
            const string xml = @"<?xml version=""1.0"" encoding=""UTF-8""?>
                                <eaw-ci:BuildConfiguration
                                  ConfigVersion=""1.0.0"" 
                                  xmlns:eaw-ci=""eaw-ci""
                                  xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"">
                                  <Projects>
                                    <Project Id=""idvalue0"">
                                      <Jobs>
                                        <Job Id=""idvalue1"" Name=""TestJob"">
                                          <Tasks>
                                            <Task Id=""TestTask"" Name=""TestTask"" xsi:type=""eaw-ci:Copy"">
                                              <CopyFromPath>path/to/source</CopyFromPath>
                                              <CopyToPath>path/to/dest</CopyToPath>
                                              <CopySubfolders>true</CopySubfolders>
                                              <CopyFileByPattern>*</CopyFileByPattern>
                                              <AlwaysOverwrite>false</AlwaysOverwrite>
                                            </Task>
                                          </Tasks>
                                        </Job>
                                      </Jobs>
                                    </Project>
                                  </Projects>
                                </eaw-ci:BuildConfiguration>";

            _mockFileData.TextContents = xml;

            TaskBuilderMock taskBuilderMock = new TaskBuilderMock(new Dictionary <string, object>
            {
                { "Id", "TestTask" },
                { "Name", "TestTask" },
                { "CopyFromPath", "path/to/source" },
                { "CopyToPath", "path/to/dest" },
                { "CopySubfolders", true },
                { "CopyFileByPattern", "*" },
                { "AlwaysOverwrite", false }
            });

            BuildComponentFactoryStub factoryStub = new BuildComponentFactoryStub {
                TaskBuilder = taskBuilderMock
            };
            XmlBuildConfigParser sut = new XmlBuildConfigParser(_fileSystem, factoryStub);

            sut.Parse(Path);

            taskBuilderMock.Verify();
        }
Exemplo n.º 16
0
        public void GivenGlobalCopyTaskAndReferenceInProjectJob__WhenCallingParse__ShouldAddTaskToJob()
        {
            const string xml = @"<?xml version=""1.0"" encoding=""UTF-8""?>
                                <eaw-ci:BuildConfiguration
                                  ConfigVersion=""1.0.0"" 
                                  xmlns:eaw-ci=""eaw-ci""
                                  xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"">
                                  <GlobalTasks>
                                    <TaskDefinition Id=""TestTask"" xsi:type=""eaw-ci:Copy"">
                                      <CopyFromPath>path/to/source</CopyFromPath>
                                      <CopyToPath>path/to/dest</CopyToPath>
                                      <CopySubfolders>true</CopySubfolders>
                                      <CopyFileByPattern>*</CopyFileByPattern>
                                      <AlwaysOverwrite>false</AlwaysOverwrite>
                                    </TaskDefinition>
                                  </GlobalTasks>

                                  <Projects>
                                    <Project Id=""idvalue1"">
                                      <Jobs>
                                        <Job Id=""idvalue2"" Name=""TestJob"">
                                          <Tasks>
                                            <TaskReference ReferenceId=""TestTask"" />
                                          </Tasks>
                                        </Job>
                                      </Jobs>
                                    </Project>
                                  </Projects>
                                </eaw-ci:BuildConfiguration>";

            _mockFileData.TextContents = xml;

            JobStub                   jobStub         = new JobStub();
            TaskBuilderStub           taskBuilderStub = new TaskBuilderStub();
            BuildComponentFactoryStub factoryStub     = new BuildComponentFactoryStub
            {
                Job = jobStub, TaskBuilder = taskBuilderStub
            };
            XmlBuildConfigParser sut = new XmlBuildConfigParser(_fileSystem, factoryStub);

            sut.Parse(Path);

            AssertJobHasExpectedTask(jobStub, taskBuilderStub.Task);
        }
Exemplo n.º 17
0
        public void GivenLuaProjectWithJob__WhenGettingProject__ProjectShouldHaveJob()
        {
            JobStub jobStub = new JobStub();
            BuildComponentFactoryStub factoryStub = new BuildComponentFactoryStub
            {
                Project = new ProjectStub(),
                Job     = jobStub
            };

            LuaProject sut = new LuaProject("TestProject", factoryStub);

            sut.add_job("test-job");

            ProjectStub actual    = sut.Project as ProjectStub;
            IJob        actualJob = actual?.Jobs.First();

            Assert.AreSame(jobStub, actualJob);
            Assert.AreEqual("test-job", actualJob?.Name);
        }
Exemplo n.º 18
0
        public void GivenConfigWithProjectAndJob__WhenParsing__ProjectShouldHaveJob()
        {
            const string lua = @"
                local p = project('test')
                p:add_job('test-job')  
            ";

            _mockFileData.TextContents = lua;

            JobStub jobStub = new JobStub();
            BuildComponentFactoryStub factoryStub = MakeBuildComponentFactoryStub(jobStub);
            IEnumerable <IProject>    projects    = MakeSutAndParse(factoryStub);

            ProjectStub actual    = projects.First() as ProjectStub;
            IJob        actualJob = actual?.Jobs.First();

            Assert.AreSame(jobStub, actualJob);
            Assert.AreEqual("test-job", actualJob?.Name);
        }
Exemplo n.º 19
0
        public void GivenConfigWithProjectWithJobAndCopyTask__WhenParsing__JobShouldHaveTask()
        {
            const string lua = @"
                local p = project('test')
                local j = p:add_job('test-job')
                j:add_task(copy('a', 'b'))  
            ";

            _mockFileData.TextContents = lua;

            JobStub   jobStub   = new JobStub();
            TaskDummy taskDummy = new TaskDummy();
            BuildComponentFactoryStub factoryStub = MakeBuildComponentFactoryStub(jobStub, taskDummy);

            MakeSutAndParse(factoryStub);

            ITask actualTask = jobStub.Tasks.First();

            Assert.AreEqual(taskDummy, actualTask);
        }
Exemplo n.º 20
0
        GivenXmlWithWrongConfigVersion__WhenCallingParse__ShouldThrowException()
        {
            const string xml = @"<?xml version=""1.0"" encoding=""UTF-8""?>
                                <eaw-ci:BuildConfiguration
                                  ConfigVersion=""1.0.1"" 
                                  xmlns:eaw-ci=""eaw-ci""
                                  xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"">
                                  <Projects>
                                    <Project Id=""idvalue0"" Name=""TestProject"">
                                      <Jobs>
                                        <Job Id=""idvalue1"">
                                          <Tasks>
                                            <Task Id=""idvalue2"" xsi:type=""eaw-ci:AbstractTaskType""/>
                                          </Tasks>
                                        </Job>
                                      </Jobs>
                                    </Project>
                                  </Projects>
                                </eaw-ci:BuildConfiguration>";

            _mockFileData.TextContents = xml;
            const string exceptionMessage =
                "The value of the 'ConfigVersion' attribute does not equal its fixed value.";
            BuildComponentFactoryStub factoryStub = new BuildComponentFactoryStub {
                Project = new ProjectStub()
            };
            XmlBuildConfigParser sut = new XmlBuildConfigParser(_fileSystem, factoryStub);

            try
            {
                sut.Parse(Path);
            }
            catch (Exception e)
            {
                Assert.AreEqual(typeof(InvalidOperationException), e.GetType());
                Assert.AreEqual(typeof(XmlSchemaValidationException), e.InnerException.GetType());
                Assert.AreEqual(exceptionMessage, e.InnerException.Message);
            }
        }
Exemplo n.º 21
0
        public void GivenConfigWithCleanTask__WhenParsing__TaskShouldBeConfiguredCorrectly()
        {
            const string lua = @"
                local p = project('test')
                local j = p:add_job('test-job')
                j:add_task(clean('path'))  
            ";

            _mockFileData.TextContents = lua;

            TaskBuilderMock taskBuilderMock = new TaskBuilderMock(new Dictionary <string, object>
            {
                { "Path", "path" }
            });

            BuildComponentFactoryStub factoryStub = new BuildComponentFactoryStub {
                TaskBuilder = taskBuilderMock
            };

            MakeSutAndParse(factoryStub);

            taskBuilderMock.Verify();
        }
Exemplo n.º 22
0
        public void GivenXmlWithSingleProjectAndJob__WhenCallingParse__ProjectShouldHaveMatchingJob()
        {
            const string xml = @"<?xml version=""1.0"" encoding=""UTF-8""?>
                                <eaw-ci:BuildConfiguration
                                  ConfigVersion=""1.0.0"" 
                                  xmlns:eaw-ci=""eaw-ci""
                                  xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"">
                                  <Projects>
                                    <Project Id=""idvalue0"">
                                      <Jobs>
                                        <Job Id=""idvalue1"" Name=""TestJob"">
                                          <Tasks>
                                          </Tasks>
                                        </Job>
                                      </Jobs>
                                    </Project>
                                  </Projects>
                                </eaw-ci:BuildConfiguration>";

            _mockFileData.TextContents = xml;

            const string jobName = "TestJob";

            BuildComponentFactoryStub factoryStub = new BuildComponentFactoryStub
            {
                Project = new ProjectStub(), Job = new JobStub()
            };
            XmlBuildConfigParser sut = new XmlBuildConfigParser(_fileSystem, factoryStub);

            IEnumerable <IProject> projects = sut.Parse(Path);

            ProjectStub actualProject = (ProjectStub)projects.ToList()[0];
            IJob        actualJob     = actualProject.Jobs[0];

            AssertJobNameEquals(jobName, actualJob);
        }
Exemplo n.º 23
0
        GivenTwoGlobalTasksAndReferenceToSecondInProjectJob__WhenCallingParse__ShouldBuildSecondGlobalTask()
        {
            const string xml = @"<?xml version=""1.0"" encoding=""UTF-8""?>
                                <eaw-ci:BuildConfiguration
                                  ConfigVersion=""1.0.0"" 
                                  xmlns:eaw-ci=""eaw-ci""
                                  xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"">
                                  <GlobalTasks>
                                    <TaskDefinition Id=""TestTask"" xsi:type=""eaw-ci:Copy"">
                                      <CopyFromPath>invalid</CopyFromPath>
                                      <CopyToPath>invalid</CopyToPath>
                                      <CopySubfolders>false</CopySubfolders>
                                      <CopyFileByPattern>*</CopyFileByPattern>
                                      <AlwaysOverwrite>false</AlwaysOverwrite>
                                    </TaskDefinition>

                                    <TaskDefinition Id=""ExpectedTask"" Name=""ExpectedTask"" xsi:type=""eaw-ci:Copy"">
                                      <CopyFromPath>path/to/source</CopyFromPath>
                                      <CopyToPath>path/to/dest</CopyToPath>
                                      <CopySubfolders>true</CopySubfolders>
                                      <CopyFileByPattern>*</CopyFileByPattern>
                                      <AlwaysOverwrite>false</AlwaysOverwrite>
                                    </TaskDefinition>
                                  </GlobalTasks>

                                  <Projects>
                                    <Project Id=""idvalue1"">
                                      <Jobs>
                                        <Job Id=""idvalue2"" Name=""TestJob"">
                                          <Tasks>
                                            <TaskReference ReferenceId=""ExpectedTask"" />
                                          </Tasks>
                                        </Job>
                                      </Jobs>
                                    </Project>
                                  </Projects>
                                </eaw-ci:BuildConfiguration>";

            _mockFileData.TextContents = xml;

            JobStub         jobStub         = new JobStub();
            TaskBuilderMock taskBuilderMock = new TaskBuilderMock(new Dictionary <string, object>
            {
                { "Id", "ExpectedTask" },
                { "Name", "ExpectedTask" },
                { "CopyFromPath", "path/to/source" },
                { "CopyToPath", "path/to/dest" },
                { "CopySubfolders", true },
                { "CopyFileByPattern", "*" },
                { "AlwaysOverwrite", false }
            });

            BuildComponentFactoryStub factoryStub = new BuildComponentFactoryStub
            {
                Job = jobStub, TaskBuilder = taskBuilderMock
            };
            XmlBuildConfigParser sut = new XmlBuildConfigParser(_fileSystem, factoryStub);

            sut.Parse(Path);

            taskBuilderMock.Verify();
        }