예제 #1
0
        public void RetargetFilesInProject_retargets_Edmx_files_in_project()
        {
            var mockDte = new MockDTE(".NETFramework, Version=v4.5", references: new Reference[0]);

            var projectItems =
                new[]
            {
                MockDTE.CreateProjectItem("C:\\model1.edmx"),
                MockDTE.CreateProjectItem("D:\\model2.EDMX")
            };

            var fileInfos =
                projectItems.Select(
                    i =>
                    new VSFileFinder.VSFileInfo
            {
                Hierarchy = mockDte.Hierarchy,
                ItemId    = mockDte.AddProjectItem(i),
                Path      = i.Object.get_FileNames(1)
            }).ToArray();

            var mockRetargetingHandler =
                new Mock <RetargetingHandler>(mockDte.Hierarchy, mockDte.ServiceProvider)
            {
                CallBase = true
            };

            mockRetargetingHandler
            .Protected()
            .Setup <IEnumerable <VSFileFinder.VSFileInfo> >("GetEdmxFileInfos")
            .Returns(fileInfos);

            mockRetargetingHandler
            .Protected().Setup <bool>("IsDataServicesEdmx", ItExpr.IsAny <string>()).Returns(false);

            mockRetargetingHandler
            .Protected()
            .Setup <XmlDocument>("RetargetFile", ItExpr.IsAny <string>(), ItExpr.IsAny <Version>()).Returns(new XmlDocument());

            mockRetargetingHandler
            .Protected()
            .Setup("WriteModifiedFiles", ItExpr.IsAny <Project>(), ItExpr.IsAny <Dictionary <string, object> >())
            .Callback(
                (Project project, Dictionary <string, object> documentMap) =>
                Assert.Equal(fileInfos.Select(f => f.Path), documentMap.Keys));

            mockRetargetingHandler.Object.RetargetFilesInProject();

            mockRetargetingHandler.Protected().Verify("IsDataServicesEdmx", Times.Exactly(2), ItExpr.IsAny <string>());
            mockRetargetingHandler.Protected().Verify("RetargetFile", Times.Exactly(2), ItExpr.IsAny <string>(), ItExpr.IsAny <Version>());
        }