/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Compilers/Core/CodeAnalysisTest/VersionHelperTests.cs
231 строка
12 KB
Viktor Hofer
Emit numeric prefix of SemVer2 versions in Win32 FIXEDFILEINFO (#84463)
10 июл 2026, 21:22
Не верифицирован
10 июл 2026, 21:22
f701b3f
Код
Авторство
О чём код?
// 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.Linq; using System.Text; using Microsoft.CodeAnalysis.Text; using Microsoft.CodeAnalysis.Test.Utilities; using Xunit; namespace Microsoft.CodeAnalysis.UnitTests { public class VersionHelperTests { [Fact] public void ParseGood() { Version version; Assert.True(VersionHelper.TryParseAssemblyVersion("3.2.*", allowWildcard: true, version: out version)); Assert.Equal(3, version.Major); Assert.Equal(2, version.Minor); Assert.Equal(65535, version.Build); Assert.Equal(65535, version.Revision); Assert.True(VersionHelper.TryParseAssemblyVersion("1.2.3.*", allowWildcard: true, version: out version)); Assert.Equal(1, version.Major); Assert.Equal(2, version.Minor); Assert.Equal(3, version.Build); Assert.Equal(65535, version.Revision); } [Fact] public void TimeBased() { var now = DateTime.Now; int days, seconds; VersionTestHelpers.GetDefaultVersion(now, out days, out seconds); var version = VersionHelper.GenerateVersionFromPatternAndCurrentTime(now, new Version(3, 2, 65535, 65535)); Assert.Equal(3, version.Major); Assert.Equal(2, version.Minor); Assert.Equal(days, version.Build); Assert.Equal(seconds, version.Revision); version = VersionHelper.GenerateVersionFromPatternAndCurrentTime(now, new Version(1, 2, 3, 65535)); Assert.Equal(1, version.Major); Assert.Equal(2, version.Minor); Assert.Equal(3, version.Build); Assert.Equal(seconds, version.Revision); version = VersionHelper.GenerateVersionFromPatternAndCurrentTime(now, new Version(1, 2, 3, 4)); Assert.Equal(1, version.Major); Assert.Equal(2, version.Minor); Assert.Equal(3, version.Build); Assert.Equal(4, version.Revision); Assert.Null(VersionHelper.GenerateVersionFromPatternAndCurrentTime(now, null)); } [Fact] public void ParseGood2() { Version version; Assert.True(VersionHelper.TryParse("1.234.56.7", out version)); Assert.Equal(1, version.Major); Assert.Equal(234, version.Minor); Assert.Equal(56, version.Build); Assert.Equal(7, version.Revision); Assert.True(VersionHelper.TryParse("3.2.1", out version)); Assert.Equal(3, version.Major); Assert.Equal(2, version.Minor); Assert.Equal(1, version.Build); Assert.Equal(0, version.Revision); Assert.True(VersionHelper.TryParse("3.2", out version)); Assert.Equal(3, version.Major); Assert.Equal(2, version.Minor); Assert.Equal(0, version.Build); Assert.Equal(0, version.Revision); Assert.True(VersionHelper.TryParse("3", out version)); Assert.Equal(3, version.Major); Assert.Equal(0, version.Minor); Assert.Equal(0, version.Build); Assert.Equal(0, version.Revision); } [Fact] public void ParseBad() { var expected = new Version(0, 0, 0, 0); Version version; Assert.False(VersionHelper.TryParseAssemblyVersion("1.234.56.7.*", allowWildcard: true, version: out version)); Assert.Equal(expected, version); Assert.False(VersionHelper.TryParseAssemblyVersion("1.234.56.7.1", allowWildcard: true, version: out version)); Assert.Equal(expected, version); Assert.False(VersionHelper.TryParseAssemblyVersion("*", allowWildcard: true, version: out version)); Assert.Equal(expected, version); Assert.False(VersionHelper.TryParseAssemblyVersion("1.2. *", allowWildcard: true, version: out version)); Assert.Equal(expected, version); Assert.False(VersionHelper.TryParseAssemblyVersion("1.2.* ", allowWildcard: true, version: out version)); Assert.Equal(expected, version); Assert.False(VersionHelper.TryParseAssemblyVersion("1.*", allowWildcard: true, version: out version)); Assert.Equal(expected, version); Assert.False(VersionHelper.TryParseAssemblyVersion("1.1.*.*", allowWildcard: true, version: out version)); Assert.Equal(expected, version); Assert.False(VersionHelper.TryParseAssemblyVersion("", allowWildcard: true, version: out version)); Assert.Equal(expected, version); Assert.False(VersionHelper.TryParseAssemblyVersion(" ", allowWildcard: true, version: out version)); Assert.Equal(expected, version); Assert.False(VersionHelper.TryParseAssemblyVersion(null, allowWildcard: true, version: out version)); Assert.Equal(expected, version); Assert.False(VersionHelper.TryParseAssemblyVersion("a", allowWildcard: true, version: out version)); Assert.Equal(expected, version); Assert.False(VersionHelper.TryParseAssemblyVersion("********", allowWildcard: true, version: out version)); Assert.Equal(expected, version); Assert.False(VersionHelper.TryParseAssemblyVersion("...", allowWildcard: true, version: out version)); Assert.Equal(expected, version); Assert.False(VersionHelper.TryParseAssemblyVersion(".a.b.", allowWildcard: true, version: out version)); Assert.Equal(expected, version); Assert.False(VersionHelper.TryParseAssemblyVersion(".0.1.", allowWildcard: true, version: out version)); Assert.Equal(expected, version); Assert.False(VersionHelper.TryParseAssemblyVersion("65535.65535.65535.65535", allowWildcard: true, version: out version)); Assert.Equal(expected, version); Assert.False(VersionHelper.TryParseAssemblyVersion("65535.65535.65535.65535", allowWildcard: false, version: out version)); Assert.Equal(expected, version); Assert.False(VersionHelper.TryParseAssemblyVersion(" 1.2.3.4", allowWildcard: true, version: out version)); Assert.Equal(expected, version); Assert.False(VersionHelper.TryParseAssemblyVersion("1 .2.3.4", allowWildcard: true, version: out version)); Assert.Equal(expected, version); Assert.False(VersionHelper.TryParseAssemblyVersion("1.2.3.4 ", allowWildcard: true, version: out version)); Assert.Equal(expected, version); Assert.False(VersionHelper.TryParseAssemblyVersion("1.2.3. 4", allowWildcard: true, version: out version)); Assert.Equal(expected, version); Assert.False(VersionHelper.TryParseAssemblyVersion("1.2. 3.4", allowWildcard: true, version: out version)); Assert.Equal(expected, version); // More than four dot-separated components (e.g. SemVer2 informational versions). // Partial parsing is not allowed for assembly versions, so these fail to the null version. Assert.False(VersionHelper.TryParseAssemblyVersion("1.2.3.4.5", allowWildcard: true, version: out version)); Assert.Equal(expected, version); Assert.False(VersionHelper.TryParseAssemblyVersion("1.2.3.4.5", allowWildcard: false, version: out version)); Assert.Equal(expected, version); Assert.False(VersionHelper.TryParseAssemblyVersion("1.2.3-p.4.5+metadata", allowWildcard: true, version: out version)); Assert.Equal(expected, version); Assert.False(VersionHelper.TryParseAssemblyVersion("1.2.3.4.*", allowWildcard: true, version: out version)); Assert.Equal(expected, version); // U+FF11 FULLWIDTH DIGIT ONE Assert.False(VersionHelper.TryParseAssemblyVersion("\uFF11.\uFF10.\uFF10.\uFF10", allowWildcard: true, version: out version)); Assert.Equal(expected, version); } [Fact] public void ParseBad2() { var expected = new Version(0, 0, 0, 0); Version version; Assert.False(VersionHelper.TryParse("", out version)); Assert.Equal(expected, version); Assert.False(VersionHelper.TryParse(null, out version)); Assert.Equal(expected, version); Assert.False(VersionHelper.TryParse("a", out version)); Assert.Equal(expected, version); Assert.False(VersionHelper.TryParse("********", out version)); Assert.Equal(expected, version); Assert.False(VersionHelper.TryParse("...", out version)); Assert.Equal(expected, version); Assert.False(VersionHelper.TryParse(".a.b.", out version)); Assert.Equal(expected, version); Assert.False(VersionHelper.TryParse(".1.2.", out version)); Assert.Equal(expected, version); Assert.False(VersionHelper.TryParse("*", out version)); Assert.Equal(expected, version); Assert.False(VersionHelper.TryParse("-1.2.3.4", out version)); Assert.Equal(expected, version); // U+FF11 FULLWIDTH DIGIT ONE Assert.False(VersionHelper.TryParse("\uFF11.\uFF10.\uFF10.\uFF10", out version)); Assert.Equal(expected, version); } [Fact] public void ParsePartial() { var expected = new Version(0, 0, 0, 0); Version version; Assert.False(VersionHelper.TryParse("1.2. 3", out version)); Assert.Equal(new Version(1, 2, 0, 0), version); Assert.False(VersionHelper.TryParse("1.2.3 ", out version)); Assert.Equal(new Version(1, 2, 3, 0), version); Assert.False(VersionHelper.TryParse("1.a", out version)); Assert.Equal(new Version(1, 0, 0, 0), version); Assert.False(VersionHelper.TryParse("1.2.a.b", out version)); Assert.Equal(new Version(1, 2, 0, 0), version); Assert.False(VersionHelper.TryParse("1.-2.3.4", out version)); Assert.Equal(new Version(1, 0, 0, 0), version); Assert.False(VersionHelper.TryParse("1..1.2", out version)); Assert.Equal(new Version(1, 0, 0, 0), version); Assert.False(VersionHelper.TryParse("1.1.65536", out version)); Assert.Equal(new Version(1, 1, 0, 0), version); Assert.False(VersionHelper.TryParse("1.1.1.10000000", out version)); Assert.Equal(new Version(1, 1, 1, 38528), version); Assert.False(VersionHelper.TryParse("1.1.18446744073709551617999999999999999999999999900001.1", out version)); Assert.Equal(new Version(1, 1, 31073, 1), version); Assert.False(VersionHelper.TryParse("1.1.18446744073709551617999999999999999999999999900001garbage.1", out version)); Assert.Equal(new Version(1, 1, 31073, 0), version); Assert.False(VersionHelper.TryParse("1.1.18446744073709551617999999999999999999999999900001.23garbage", out version)); Assert.Equal(new Version(1, 1, 31073, 23), version); Assert.False(VersionHelper.TryParse("65536.2.65536.1", out version)); Assert.Equal(new Version(0, 2, 0, 1), version); // More than four dot-separated components (e.g. SemVer2 informational versions). // The leading numeric components are emitted rather than falling back to 0.0.0.0. Assert.False(VersionHelper.TryParse("1.234.56.7.8", out version)); Assert.Equal(new Version(1, 234, 56, 7), version); Assert.False(VersionHelper.TryParse("1.2.3-p.4.5+metadata", out version)); Assert.Equal(new Version(1, 2, 3, 0), version); Assert.False(VersionHelper.TryParse("18.10.0-ci.26360.1+95817c0", out version)); Assert.Equal(new Version(18, 10, 0, 0), version); Assert.False(VersionHelper.TryParse("1.2.3.4.5", out version)); Assert.Equal(new Version(1, 2, 3, 4), version); } } }