< Summary

Information
Class: System.Text.Json.Serialization.ConfigurationList<T>
Assembly: System.Text.Json
File(s): C:\h\w\B31A098C\w\BB5A0A33\e\runtime-utils\Runner\runtime\src\libraries\System.Text.Json\src\System\Text\Json\Serialization\ConfigurationList.cs
Line coverage
26%
Covered lines: 19
Uncovered lines: 52
Coverable lines: 71
Total lines: 133
Line coverage: 26.7%
Branch coverage
25%
Covered branches: 1
Total branches: 4
Branch coverage: 25%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Cyclomatic complexity NPath complexity Sequence coverage
.ctor(...)50%22100%
OnCollectionModified()100%11100%
ValidateAddedValue(...)100%110%
Add(...)100%11100%
Clear()100%110%
Contains(...)100%110%
CopyTo(...)100%110%
GetEnumerator()100%11100%
IndexOf(...)100%110%
Insert(...)100%110%
Remove(...)0%220%
RemoveAt(...)100%110%
System.Collections.Generic.IEnumerable<TItem>.GetEnumerator()100%110%
System.Collections.IEnumerable.GetEnumerator()100%110%
.ctor(...)100%110%

File(s)

C:\h\w\B31A098C\w\BB5A0A33\e\runtime-utils\Runner\runtime\src\libraries\System.Text.Json\src\System\Text\Json\Serialization\ConfigurationList.cs

#LineLine coverage
 1// Licensed to the .NET Foundation under one or more agreements.
 2// The .NET Foundation licenses this file to you under the MIT license.
 3
 4using System.Collections;
 5using System.Collections.Generic;
 6using System.Diagnostics;
 7
 8namespace System.Text.Json.Serialization
 9{
 10    /// <summary>
 11    /// A list of configuration items that can be locked for modification
 12    /// </summary>
 13    [DebuggerDisplay("{DebuggerDisplay,nq}")]
 14    [DebuggerTypeProxy(typeof(ConfigurationList<>.ConfigurationListDebugView))]
 15    internal abstract class ConfigurationList<TItem> : IList<TItem>
 16    {
 17        protected readonly List<TItem> _list;
 18
 129919        public ConfigurationList(IEnumerable<TItem>? source = null)
 129920        {
 129921            _list = source is null ? new List<TItem>() : new List<TItem>(source);
 129922        }
 23
 24        public abstract bool IsReadOnly { get; }
 25        protected abstract void OnCollectionModifying();
 1558826        protected virtual void OnCollectionModified() { }
 027        protected virtual void ValidateAddedValue(TItem item) { }
 28
 29        public TItem this[int index]
 30        {
 31            get
 779432            {
 779433                return _list[index];
 779434            }
 35            set
 036            {
 037                ArgumentNullException.ThrowIfNull(value);
 38
 039                OnCollectionModifying();
 040                ValidateAddedValue(value);
 041                _list[index] = value;
 042                OnCollectionModified();
 043            }
 44        }
 45
 1948546        public int Count => _list.Count;
 47
 48        public void Add(TItem item)
 779449        {
 779450            ArgumentNullException.ThrowIfNull(item);
 51
 779452            OnCollectionModifying();
 779453            ValidateAddedValue(item);
 779454            _list.Add(item);
 779455            OnCollectionModified();
 779456        }
 57
 58        public void Clear()
 059        {
 060            OnCollectionModifying();
 061            _list.Clear();
 062            OnCollectionModified();
 063        }
 64
 65        public bool Contains(TItem item)
 066        {
 067            return _list.Contains(item);
 068        }
 69
 70        public void CopyTo(TItem[] array, int arrayIndex)
 071        {
 072            _list.CopyTo(array, arrayIndex);
 073        }
 74
 75        public List<TItem>.Enumerator GetEnumerator()
 129976        {
 129977            return _list.GetEnumerator();
 129978        }
 79
 80        public int IndexOf(TItem item)
 081        {
 082            return _list.IndexOf(item);
 083        }
 84
 85        public void Insert(int index, TItem item)
 086        {
 087            ArgumentNullException.ThrowIfNull(item);
 88
 089            OnCollectionModifying();
 090            ValidateAddedValue(item);
 091            _list.Insert(index, item);
 092            OnCollectionModified();
 093        }
 94
 95        public bool Remove(TItem item)
 096        {
 097            OnCollectionModifying();
 098            bool removed = _list.Remove(item);
 099            if (removed)
 0100            {
 0101                OnCollectionModified();
 0102            }
 103
 0104            return removed;
 0105        }
 106
 107        public void RemoveAt(int index)
 0108        {
 0109            OnCollectionModifying();
 0110            _list.RemoveAt(index);
 0111            OnCollectionModified();
 0112        }
 113
 114        IEnumerator<TItem> IEnumerable<TItem>.GetEnumerator()
 0115        {
 0116            return _list.GetEnumerator();
 0117        }
 118
 119        IEnumerator IEnumerable.GetEnumerator()
 0120        {
 0121            return _list.GetEnumerator();
 0122        }
 123
 124        [DebuggerBrowsable(DebuggerBrowsableState.Never)]
 0125        private string DebuggerDisplay => $"Count = {Count}, IsReadOnly = {IsReadOnly}";
 126
 0127        private sealed class ConfigurationListDebugView(ConfigurationList<TItem> collection)
 128        {
 129            [DebuggerBrowsable(DebuggerBrowsableState.RootHidden)]
 0130            public TItem[] Items => collection._list.ToArray();
 131        }
 132    }
 133}