public void AddsObjectsMetadataToHolder()
        {
            var object1 = new object();
            var object2 = new object();

            var metadata1 = new UriResolvedMetadata(new Uri("tst://p1/md1/vw1"), Substitute.For <IDisposable>());
            var metadata2 = new UriResolvedMetadata(new Uri("tst://p2/md2/vw2"), Substitute.For <IDisposable>());

            var holder = new UriResolvedObjectHolder();

            holder.Add(object1, metadata1);
            holder.Add(object2, metadata2);

            var holderMetadata1 = holder.GetMetadata(object1);
            var holderMetadata2 = holder.GetMetadata(object2);

            // Идентификатор назначается холдером, поэтому придется изменить
            // локальные метаданные, ипользуя сведения от GetMetadata.
            // Подобное допустимо, т.к. нас интересуют не идентификаторы,
            // а все остальные поля.
            metadata1 = metadata1.AssignId(holderMetadata1.ResolvedId);
            metadata2 = metadata2.AssignId(holderMetadata2.ResolvedId);

            Assert.AreEqual(metadata1, holderMetadata1);
            Assert.AreEqual(metadata2, holderMetadata2);
        }
        public void AssignIdReturnsTheSameMetadataWithTheSpecifiedId()
        {
            var metadata1 = new UriResolvedMetadata(new Uri("about:blank"), Substitute.For <IDisposable>());
            var metadata2 = metadata1.AssignId(1005);

            Assert.AreEqual(1005, metadata2.ResolvedId);
            Assert.AreEqual(metadata1.Disposable, metadata2.Disposable);
            Assert.AreEqual(metadata1.Uri, metadata2.Uri);
        }
 /// <summary>
 /// Adds the new object opened via an URI.
 /// </summary>
 /// <param name="resolved">The added object.</param>
 /// <param name="metadata">The metadata of the added object.</param>
 public void Add(object resolved, UriResolvedMetadata metadata)
 {
     try
     {
         this._data.Add(resolved, metadata.AssignId(this.GenerateNewId()));
     }
     catch (ArgumentException)
     {
         throw new ArgumentException(
                   string.Format(Properties.Resources.UriResolvedObjectAlreadyExists, resolved, typeof(IUriResolvedObjectHolder).Name),
                   "resolved");
     }
 }