/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Compilers/Core/CodeAnalysisTest/Collections/IdentifierCollectionTests.cs
112 строк
4 KB
Jared Parsons
generated move
28 сен 2020, 19:36
28 сен 2020, 19:36
1cca63b
Код
Авторство
О чём код?
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. #nullable disable using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics; using System.Linq; using Microsoft.CodeAnalysis.Text; using Xunit; namespace Microsoft.CodeAnalysis.UnitTests.Collections { public class IdentifierCollectionTests { [Fact] public void TestSupportedCollectionInterface() { TestCases(new string[] { }); TestCases("a"); TestCases("a", "b", "c"); TestCases("c", "b", "a"); TestCases("alpha", "Alpha", "alphA", "AlphA"); TestCases("alpha", "beta", "gamma", "Alpha", "betA", "gaMMa"); } private void TestCases(params string[] strings) { TestCaseSensitive(strings); TestCaseInsensitive(strings); } private void TestCaseSensitive(params string[] strings) { var idcol = new IdentifierCollection(strings).AsCaseSensitiveCollection(); Assert.Equal(strings.Length, idcol.Count); Assert.True(Enumerable.SequenceEqual(strings.OrderBy(x => x), idcol.OrderBy(x => x))); Assert.Equal(idcol.GetEnumerator().GetType(), ((System.Collections.IEnumerable)idcol).GetEnumerator().GetType()); AssertContains(idcol, strings); AssertNotContains(idcol, strings.Select(s => s.ToUpper())); AssertNotContains(idcol, "x"); var copy = new string[strings.Length]; idcol.CopyTo(copy, 0); Assert.True(Enumerable.SequenceEqual(strings.OrderBy(x => x), copy.OrderBy(x => x))); } private void TestCaseInsensitive(params string[] strings) { var idcol = new IdentifierCollection(strings).AsCaseInsensitiveCollection(); Assert.Equal(strings.Length, idcol.Count); Assert.True(Enumerable.SequenceEqual(strings.OrderBy(x => x), idcol.OrderBy(x => x))); Assert.Equal(idcol.GetEnumerator().GetType(), ((System.Collections.IEnumerable)idcol).GetEnumerator().GetType()); AssertContains(idcol, strings); AssertContains(idcol, strings.Select(s => s.ToUpper())); AssertNotContains(idcol, "x"); var copy = new string[strings.Length]; idcol.CopyTo(copy, 0); Assert.True(Enumerable.SequenceEqual(strings.OrderBy(x => x), copy.OrderBy(x => x))); } [Fact] public void TestUnsupportedCollectionInterface() { var strs = new string[] { "a", "b", "c" }; TestReadOnly(new IdentifierCollection(strs).AsCaseSensitiveCollection()); TestReadOnly(new IdentifierCollection(strs).AsCaseInsensitiveCollection()); } private void TestReadOnly(ICollection<string> collection) { Assert.True(collection.IsReadOnly); Assert.Throws<NotSupportedException>(() => collection.Add("x")); Assert.Throws<NotSupportedException>(() => collection.Remove("x")); Assert.Throws<NotSupportedException>(() => collection.Clear()); } private void AssertContains(ICollection<string> collection, params string[] strings) { AssertContains(collection, (IEnumerable<string>)strings); } private void AssertContains(ICollection<string> collection, IEnumerable<string> strings) { foreach (var str in strings) { Assert.True(collection.Contains(str)); } } private void AssertNotContains(ICollection<string> collection, params string[] strings) { AssertNotContains(collection, (IEnumerable<string>)strings); } private void AssertNotContains(ICollection<string> collection, IEnumerable<string> strings) { foreach (var str in strings) { Assert.False(collection.Contains(str)); } } } }