public void VerifyThatExceptionThrown()
        {
            var list     = new ReactiveList <IRowViewModelBase <Thing> >();
            var comparer = new ElementDefinitionChildRowComparer();

            Assert.Throws <ArgumentNullException>(() => list.SortedInsert(null, comparer));
        }
        public void VerifyThatRowsAreInsertedCorrectly()
        {
            var list     = new ReactiveList <IRowViewModelBase <Thing> >();
            var comparer = new ElementDefinitionChildRowComparer();

            var parameter1 = new Parameter(Guid.NewGuid(), this.cache, this.uri)
            {
                ParameterType = this.type, Owner = this.domain, Container = this.elementDef
            };

            parameter1.ValueSet.Add(this.valueSet);

            var parameterRow1 = new ParameterRowViewModel(parameter1, this.option, this.session.Object, null);

            var typeClone = this.type.Clone(false);

            typeClone.Name = "b";
            var paraClone = parameter1.Clone(false);

            paraClone.ParameterType = typeClone;

            var parameterRow2 = new ParameterRowViewModel(paraClone, this.option, this.session.Object, null)
            {
                Name = "b"
            };

            var group1 = new ParameterGroup(Guid.NewGuid(), null, this.uri)
            {
                Name = "a"
            };
            var groupRow1 = new ParameterGroupRowViewModel(group1, this.session.Object, null);

            var group2 = new ParameterGroup(Guid.NewGuid(), null, this.uri)
            {
                Name = "b"
            };
            var groupRow2 = new ParameterGroupRowViewModel(group2, this.session.Object, null);

            var usage1 = this.elementUsage.Clone(false);

            usage1.Name = "def";
            var usageRow1 = new ElementUsageRowViewModel(usage1, this.option, this.session.Object, null);

            var usage2 = this.elementUsage.Clone(false);

            usage2.Name = "abc";
            var usageRow2 = new ElementUsageRowViewModel(usage2, this.option, this.session.Object, null);

            var usage3 = this.elementUsage.Clone(false);

            usage3.Name = "ghi";
            var usageRow3 = new ElementUsageRowViewModel(usage3, this.option, this.session.Object, null);

            list.SortedInsert(usageRow1, comparer);
            list.SortedInsert(usageRow3, comparer);

            list.SortedInsert(parameterRow1, comparer);
            list.SortedInsert(groupRow1, comparer);
            list.SortedInsert(parameterRow2, comparer);
            list.SortedInsert(groupRow2, comparer);

            list.SortedInsert(usageRow2, comparer);

            Assert.AreSame(parameterRow1, list[0]);
            Assert.AreSame(parameterRow2, list[1]);
            Assert.AreSame(groupRow1, list[2]);
            Assert.AreSame(groupRow2, list[3]);
            Assert.AreSame(usageRow2, list[4]);
            Assert.AreSame(usageRow1, list[5]);
            Assert.AreSame(usageRow3, list[6]);
        }