private static void ResolveResourceLink(IDomLink domLink,
                                                IHypermediaContext hypermediaContext,
                                                IHypermediaAssembler hypermediaAssembler,
                                                IResourcePathContext resourcePathContext,
                                                Type clrResourceType,
                                                object clrResource,
                                                DomReadWriteLinks domReadWriteLinks)
        {
            if (domLink.IsReadOnly)
            {
                return;
            }

            // Resolve read-write resource link
            var domReadWriteLink = (DomReadWriteLink)domLink;
            var apiLinkRel       = domReadWriteLink.Rel;

            var apiLinkMeta = default(Meta);
            var domLinkMeta = (IDomMeta)domReadWriteLink.GetNode(DomNodeType.Meta);

            if (domLinkMeta != null)
            {
                apiLinkMeta = domLinkMeta.Meta;
            }

            // Create link.
            var linkContext     = new LinkContext(apiLinkRel, apiLinkMeta);
            var apiResourceLink = hypermediaAssembler.CreateResourceLink(hypermediaContext, resourcePathContext, clrResourceType, clrResource, linkContext);

            // Replace the old DOM read-write link node with a new DOM read-only link created by the framework.
            var domReadOnlyLink = DomReadOnlyLink.Create(apiLinkRel, apiResourceLink);

            domReadWriteLinks.ReplaceNode(domReadWriteLink, domReadOnlyLink);
        }
        internal void TestIDomLinkAbstraction(string name, string expectedRel, Link expectedLink, IDomLink domLink)
        {
            // Arrange

            // Act
            this.Output.WriteLine("Test Name: {0}", name);
            this.Output.WriteLine(String.Empty);
            this.Output.WriteLine("Expected Rel:  {0}", expectedRel);
            this.Output.WriteLine("Expected Link: {0}", expectedLink);

            this.Output.WriteLine(String.Empty);

            var actualRel  = domLink.Rel;
            var actualLink = domLink.Link;

            this.Output.WriteLine("Actual Rel:    {0}", actualRel);
            this.Output.WriteLine("Actual Link:   {0}", actualLink);

            // Assert
            Assert.Equal(expectedRel, actualRel);
            LinkAssert.Equal(expectedLink, actualLink);
        }