Esempio n. 1
0
    public static IVsSolution CreateSolution(TreeItem root)
    {
        Mock <IVsSolution> solution;
        IEnumHierarchies   enumerator;


        solution = new Mock <IVsSolution>();

        solution
        .Setup((x) => x.GetGuidOfProject(It.IsAny <IVsHierarchy>(), out It.Ref <Guid> .IsAny))
        .Returns(new GetGuidOfProject((IVsHierarchy hierarchy, out Guid guid) => {
            foreach (var node in root.DescendantsAndSelf())
            {
                if (node.Hierarchy == hierarchy)
                {
                    guid = node.Data.Identifier;
                    return(VSConstants.S_OK);
                }
            }

            guid = default;
            return(VSConstants.E_FAIL);
        }));

        solution
        .Setup((x) => x.GetProjectOfGuid(ref It.Ref <Guid> .IsAny, out It.Ref <IVsHierarchy?> .IsAny))
        .Returns(new GetProjectOfGuid((ref Guid guid, out IVsHierarchy? hierarchy) => {
            foreach (var node in root.DescendantsAndSelf())
            {
                if (node.Data.Identifier == guid)
                {
                    hierarchy = EnsureHierarchyExists(node, solution.Object);
                    return(VSConstants.S_OK);
                }
            }

            hierarchy = null;
            return(VSConstants.E_FAIL);
        }));

        solution
        .Setup((x) => x.GetProjectEnum((uint)__VSENUMPROJFLAGS.EPF_ALLINSOLUTION, ref It.Ref <Guid> .IsAny, out enumerator))
        .Returns(new GetProjectEnum((uint flags, ref Guid type, out IEnumHierarchies enumerator) => {
            enumerator = CreateHierarchyEnumerator(root, solution.Object);
            return(VSConstants.S_OK);
        }));

        solution
        .As <IVsSolution4>()
        .Setup((x) => x.ReloadProject(ref It.Ref <Guid> .IsAny))
        .Returns(new ReloadProjectCallback((ref Guid identifier) => {
            foreach (var item in root.Descendants())
            {
                if (item.Data.Identifier == identifier)
                {
                    SetType(item, HierarchyType.Project);
                    return(VSConstants.S_OK);
                }
            }
            return(VSConstants.E_FAIL);
        }));

        solution
        .As <IVsSolution4>()
        .Setup((x) => x.UnloadProject(ref It.Ref <Guid> .IsAny, (uint)_VSProjectUnloadStatus.UNLOADSTATUS_UnloadedByUser))
        .Returns(new UnloadProjectCallback((ref Guid identifier, uint status) => {
            foreach (var item in root.Descendants())
            {
                if (item.Data.Identifier == identifier)
                {
                    SetType(item, HierarchyType.UnloadedProject);
                    return(VSConstants.S_OK);
                }
            }
            return(VSConstants.E_FAIL);
        }));

        solution.As <IVsHierarchy>();

        return(solution.Object);
    }