Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitdc24fb7

Browse files
authored
Merge pull request#181 from wlsnmrk/fix/deserialize-old-installed-version-numbers
fix: correctly deserialize old installed version numbers
2 parents2e6ace6 +e1b3371 commitdc24fb7

File tree

25 files changed

+530
-338
lines changed

25 files changed

+530
-338
lines changed

‎GodotEnv.Tests/src/features/godot/domain/GodotRepositoryTest.cs‎

Lines changed: 73 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -144,11 +144,78 @@ public void DirectoryToVersionUndoesVersionFsName(string godotVersionString)
144144
versionSerializer:versionSerializer.Object
145145
);
146146

147-
vardotnetVersion=fileVersionDeserializer.Deserialize(godotVersionString,true)!;
148-
varreconstructedDotnetVersion=godotRepo.DirectoryToVersion(godotRepo.GetVersionFsName(fileVersionSerializer,dotnetVersion));
149-
dotnetVersion.ShouldBe(reconstructedDotnetVersion);
150-
varnonDotnetVersion=fileVersionDeserializer.Deserialize(godotVersionString,false)!;
151-
varreconstructedNonDotnetVersion=godotRepo.DirectoryToVersion(godotRepo.GetVersionFsName(fileVersionSerializer,nonDotnetVersion));
152-
nonDotnetVersion.ShouldBe(reconstructedNonDotnetVersion);
147+
vardotnetVersion=fileVersionDeserializer.Deserialize(godotVersionString,true);
148+
dotnetVersion.IsSuccess.ShouldBeTrue();
149+
vardotnetDirectory=godotRepo.GetVersionFsName(fileVersionSerializer,dotnetVersion.Value);
150+
varreconstructedDotnetVersion=godotRepo.DirectoryToVersion(dotnetDirectory);
151+
reconstructedDotnetVersion.IsSuccess.ShouldBeTrue();
152+
reconstructedDotnetVersion.Value.ShouldBe(dotnetVersion.Value);
153+
varnonDotnetVersion=fileVersionDeserializer.Deserialize(godotVersionString,false);
154+
nonDotnetVersion.IsSuccess.ShouldBeTrue();
155+
varnonDotnetDirectory=godotRepo.GetVersionFsName(fileVersionSerializer,nonDotnetVersion.Value);
156+
varreconstructedNonDotnetVersion=godotRepo.DirectoryToVersion(nonDotnetDirectory);
157+
reconstructedNonDotnetVersion.IsSuccess.ShouldBeTrue();
158+
reconstructedNonDotnetVersion.Value.ShouldBe(nonDotnetVersion.Value);
159+
}
160+
161+
[Theory]
162+
[InlineData(["4_5_0_rc_1","4.5-rc1"])]
163+
[InlineData(["4_4_0_dev6","4.4-dev6"])]
164+
publicvoidDirectoryToVersionHandlesOldDirectoryNames(stringdirectorySuffix,stringreleaseVersionStr)
165+
{
166+
varsystemInfo=newMockSystemInfo(OSType.Linux,CpuArch.X64);
167+
varcomputer=newMock<IComputer>();
168+
varprocessRunner=newMock<IProcessRunner>();
169+
170+
varfileClient=newMock<IFileClient>();
171+
172+
varnetworkClient=newMock<NetworkClient>(newMock<IDownloadService>().Object,Defaults.DownloadConfiguration);
173+
varzipClient=newMock<ZipClient>(fileClient.Object.Files);
174+
varenvironmentVariableClient=newMock<IEnvironmentVariableClient>();
175+
176+
varfileVersionDeserializer=newReleaseVersionDeserializer();
177+
varfileVersionSerializer=newReleaseVersionSerializer();
178+
varplatform=newMock<GodotEnvironment>(
179+
systemInfo,fileClient.Object,computer.Object,fileVersionDeserializer,fileVersionSerializer
180+
);
181+
182+
varchecksumClient=newMock<IGodotChecksumClient>();
183+
varversionDeserializer=newMock<IVersionDeserializer>();
184+
varversionSerializer=newMock<IVersionSerializer>();
185+
186+
vargodotRepo=newGodotRepository(
187+
systemInfo:systemInfo,
188+
config:newConfig(
189+
newConfigValues
190+
{
191+
Godot=newGodotConfigSection
192+
{
193+
InstallationsPath="INSTALLATION_PATH"
194+
},
195+
}
196+
),
197+
fileClient:fileClient.Object,
198+
networkClient:networkClient.Object,
199+
zipClient:zipClient.Object,
200+
platform:platform.Object,
201+
environmentVariableClient:environmentVariableClient.Object,
202+
processRunner:processRunner.Object,
203+
checksumClient:checksumClient.Object,
204+
versionDeserializer:versionDeserializer.Object,
205+
versionSerializer:versionSerializer.Object
206+
);
207+
208+
varreleaseDeserializer=newReleaseVersionDeserializer();
209+
210+
vardotnetVersion=releaseDeserializer.Deserialize(releaseVersionStr,true);
211+
dotnetVersion.IsSuccess.ShouldBeTrue();
212+
varreconstructedDotnetVersion=godotRepo.DirectoryToVersion($"godot_dotnet_{directorySuffix}");
213+
reconstructedDotnetVersion.IsSuccess.ShouldBeTrue();
214+
reconstructedDotnetVersion.Value.ShouldBe(dotnetVersion.Value);
215+
varnonDotnetVersion=releaseDeserializer.Deserialize(releaseVersionStr,false);
216+
nonDotnetVersion.IsSuccess.ShouldBeTrue();
217+
varreconstructedNonDotnetVersion=godotRepo.DirectoryToVersion($"godot_{directorySuffix}");
218+
reconstructedNonDotnetVersion.IsSuccess.ShouldBeTrue();
219+
reconstructedNonDotnetVersion.Value.ShouldBe(nonDotnetVersion.Value);
153220
}
154221
}

‎GodotEnv.Tests/src/features/godot/domain/GodotVersionSpecifierRepositoryTest.cs‎

Lines changed: 42 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -78,76 +78,53 @@ public void GetsVersionFilesInCorrectOrder()
7878
}
7979

8080
[Fact]
81-
publicvoidValidatedGodotVersionIsNullIfVersionIsNull()
81+
publicvoidValidatedGodotVersionReturnsFailureIfVersionIsFailure()
8282
{
8383
varfileClient=newMock<IFileClient>();
8484
varfile=newMock<IGodotVersionFile>();
85-
SpecificDotnetStatusGodotVersion?version=null;
86-
file.Setup(f=>f.ParseGodotVersion(fileClient.Object)).Returns(version);
87-
88-
varlog=newMock<ILog>();
85+
varversionResult=newResult<SpecificDotnetStatusGodotVersion>(
86+
false,
87+
null,
88+
"Testing"
89+
);
90+
file.Setup(f=>f.ParseGodotVersion(fileClient.Object)).Returns(versionResult);
8991

9092
varrepo=newGodotVersionSpecifierRepository("/test/working-dir",fileClient.Object);
9193

92-
repo.GetValidatedGodotVersion(file.Object,log.Object).ShouldBe(null);
93-
}
94-
95-
[Fact]
96-
publicvoidValidatedGodotVersionIsNullAndWarnsIfParsingThrows()
97-
{
98-
vardeserializationError="bad.version is not a recognized version string";
99-
varpath="/test/path";
100-
varfileClient=newMock<IFileClient>();
101-
102-
varfile=newMock<IGodotVersionFile>();
103-
file.Setup(f=>f.FilePath).Returns(path);
104-
file.Setup(f=>f.ParseGodotVersion(fileClient.Object))
105-
.Throws(newArgumentException(deserializationError));
106-
107-
varlog=newMock<ILog>();
108-
109-
varrepo=newGodotVersionSpecifierRepository("test/working-dir",fileClient.Object);
110-
111-
repo.GetValidatedGodotVersion(file.Object,log.Object)
112-
.ShouldBe(null);
113-
log.Verify(
114-
log=>
115-
log.Warn($"{path} contains invalid version string; skipping")
116-
);
117-
log.Verify(
118-
log=>
119-
log.Warn(deserializationError)
120-
);
94+
varversion=repo.GetValidatedGodotVersion(file.Object);
95+
version.IsSuccess.ShouldBeFalse();
96+
version.Error.ShouldBe("Testing");
12197
}
12298

12399
[Fact]
124100
publicvoidValidatedGodotVersionIsVersionIfVersionDeserializerReturns()
125101
{
126-
varversion=newSpecificDotnetStatusGodotVersion(4,4,1,"stable",-1,true);
102+
varversion=newResult<SpecificDotnetStatusGodotVersion>(
103+
true,
104+
new(4,4,1,"stable",-1,true),
105+
string.Empty
106+
);
127107
varpath="/test/path";
128108
varfileClient=newMock<IFileClient>();
129109

130110
varfile=newMock<IGodotVersionFile>();
131111
file.Setup(f=>f.FilePath).Returns(path);
132112
file.Setup(f=>f.ParseGodotVersion(fileClient.Object)).Returns(version);
133113

134-
varlog=newMock<ILog>();
135-
136114
varrepo=newGodotVersionSpecifierRepository("test/working-dir",fileClient.Object);
137115

138-
repo.GetValidatedGodotVersion(file.Object,log.Object)
139-
.ShouldBe(version);
116+
repo.GetValidatedGodotVersion(file.Object).ShouldBe(version);
140117
}
141118

142119
[Fact]
143120
publicvoidInfersVersionFromFirstValidVersionFile()
144121
{
145122
varfileClient=newMock<IFileClient>();
146123

147-
varversions=newList<SpecificDotnetStatusGodotVersion?>{
148-
null,
149-
new(4,3,0,"stable",-1,true),
150-
new(4,4,1,"stable",-1,true),
124+
varversions=newList<Result<SpecificDotnetStatusGodotVersion>>{
125+
new(false,null,"Testing"),
126+
new(true,new(4,3,0,"stable",-1,true),string.Empty),
127+
new(true,new(4,4,1,"stable",-1,true),string.Empty),
151128
};
152129
varfileMocks=newList<Mock<IGodotVersionFile>>{
153130
new(),
@@ -156,6 +133,7 @@ public void InfersVersionFromFirstValidVersionFile()
156133
};
157134
for(vari=0;i<versions.Count;++i)
158135
{
136+
fileMocks[i].Setup(f=>f.FilePath).Returns($"file{i}");
159137
fileMocks[i].Setup(f=>f.ParseGodotVersion(fileClient.Object)).Returns(versions[i]);
160138
}
161139

@@ -167,14 +145,14 @@ public void InfersVersionFromFirstValidVersionFile()
167145
}
168146

169147
[Fact]
170-
publicvoidInfersNoVersionIfNoValidVersionFile()
148+
publicvoidInfersNoVersionAndLogsIfNoValidVersionFile()
171149
{
172150
varfileClient=newMock<IFileClient>();
173151

174-
varversions=newList<SpecificDotnetStatusGodotVersion?>{
175-
null,
176-
null,
177-
null,
152+
varversions=newList<Result<SpecificDotnetStatusGodotVersion>>{
153+
new(false,null,"Testing-0"),
154+
new(false,null,"Testing-1"),
155+
new(false,null,"Testing-2"),
178156
};
179157
varfileMocks=newList<Mock<IGodotVersionFile>>{
180158
new(),
@@ -183,14 +161,29 @@ public void InfersNoVersionIfNoValidVersionFile()
183161
};
184162
for(vari=0;i<versions.Count;++i)
185163
{
164+
fileMocks[i].Setup(f=>f.FilePath).Returns($"file{i}");
186165
fileMocks[i].Setup(f=>f.ParseGodotVersion(fileClient.Object)).Returns(versions[i]);
187166
}
188167

189168
varlog=newMock<ILog>();
190169

191170
varrepo=newGodotVersionSpecifierRepository("test/working-dir",fileClient.Object);
192171

193-
repo.InferVersion(Enumerate(fileMocks, m=>m.Object),log.Object).ShouldBe(null);
172+
varresult=repo.InferVersion(Enumerate(fileMocks, m=>m.Object),log.Object);
173+
result.IsSuccess.ShouldBeFalse();
174+
result.Error.ShouldBe("No valid Godot version found in specifier files");
175+
176+
for(vari=0;i<versions.Count;++i)
177+
{
178+
log.Verify(
179+
log=>
180+
log.Warn($"file{i} does not contain valid version string; skipping")
181+
);
182+
log.Verify(
183+
log=>
184+
log.Warn($"Testing-{i}")
185+
);
186+
}
194187
}
195188

196189
[Fact]

‎GodotEnv.Tests/src/features/godot/models/CsprojFileTest.cs‎

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -59,11 +59,13 @@ public void ParsedVersionIsGodotSdkIfPresent()
5959
varfileClient=newMock<IFileClient>();
6060
fileClient.Setup(client=>client.GetReader(path)).Returns(reader);
6161
varversion=newSpecificDotnetStatusGodotVersion(4,4,1,"stable",-1,true);
62-
file.ParseGodotVersion(fileClient.Object).ShouldBe(version);
62+
varparsedVersion=file.ParseGodotVersion(fileClient.Object);
63+
parsedVersion.IsSuccess.ShouldBeTrue();
64+
parsedVersion.Value.ShouldBe(version);
6365
}
6466

6567
[Fact]
66-
publicvoidParsedVersionIsNullIfGodotSdkVersionUnspecified()
68+
publicvoidParsedVersionIsFailureIfGodotSdkVersionUnspecified()
6769
{
6870
varcontents=
6971
/*lang=xml,strict*/
@@ -102,11 +104,13 @@ public void ParsedVersionIsNullIfGodotSdkVersionUnspecified()
102104
varfile=newCsprojFile(path);
103105
varfileClient=newMock<IFileClient>();
104106
fileClient.Setup(client=>client.GetReader(path)).Returns(reader);
105-
file.ParseGodotVersion(fileClient.Object).ShouldBe(null);
107+
varparsedVersion=file.ParseGodotVersion(fileClient.Object);
108+
parsedVersion.IsSuccess.ShouldBeFalse();
109+
parsedVersion.Error.ShouldBe($"csproj file{path} does not use a Godot SDK (found Godot.NET.Sdk)");
106110
}
107111

108112
[Fact]
109-
publicvoidParsedVersionIsEmptyIfGodotSdkNotUsed()
113+
publicvoidParsedVersionIsFailureIfGodotSdkNotUsed()
110114
{
111115
varcontents=
112116
/*lang=xml,strict*/
@@ -144,11 +148,13 @@ public void ParsedVersionIsEmptyIfGodotSdkNotUsed()
144148
varfile=newCsprojFile(path);
145149
varfileClient=newMock<IFileClient>();
146150
fileClient.Setup(client=>client.GetReader(path)).Returns(reader);
147-
file.ParseGodotVersion(fileClient.Object).ShouldBe(null);
151+
varparsedVersion=file.ParseGodotVersion(fileClient.Object);
152+
parsedVersion.IsSuccess.ShouldBeFalse();
153+
parsedVersion.Error.ShouldBe($"csproj file{path} does not use a Godot SDK (found Microsoft.NET.Sdk)");
148154
}
149155

150156
[Fact]
151-
publicvoidParseVersionThrowsIfGodotSdkVersionInvalid()
157+
publicvoidParsedVersionIsFailureIfGodotSdkVersionInvalid()
152158
{
153159
varcontents=
154160
/*lang=xml,strict*/
@@ -187,7 +193,9 @@ public void ParseVersionThrowsIfGodotSdkVersionInvalid()
187193
varfile=newCsprojFile(path);
188194
varfileClient=newMock<IFileClient>();
189195
fileClient.Setup(client=>client.GetReader(path)).Returns(reader);
190-
Should.Throw<ArgumentException>(()=>file.ParseGodotVersion(fileClient.Object));
196+
varparsedVersion=file.ParseGodotVersion(fileClient.Object);
197+
parsedVersion.IsSuccess.ShouldBeFalse();
198+
parsedVersion.Error.ShouldBe("Couldn't match\"not.a.version\" to known GodotSharp version patterns.");
191199
}
192200

193201
[Fact]

‎GodotEnv.Tests/src/features/godot/models/GlobalJsonFileTest.cs‎

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
namespaceChickensoft.GodotEnv.Tests.Features.Godot.Models;
22

3-
usingSystem;
43
usingSystem.IO;
54
usingSystem.Text.Json.Nodes;
65
usingChickensoft.GodotEnv.Common.Clients;
@@ -48,12 +47,14 @@ public void ParsedVersionIsGodotSdkIfPresent()
4847
varfileClient=newMock<IFileClient>();
4948
fileClient.Setup(client=>client.GetReadStream(path)).Returns(stream);
5049
varversion=newSpecificDotnetStatusGodotVersion(4,4,1,"stable",-1,true);
51-
file.ParseGodotVersion(fileClient.Object).ShouldBe(version);
50+
varparsedVersion=file.ParseGodotVersion(fileClient.Object);
51+
parsedVersion.IsSuccess.ShouldBeTrue();
52+
parsedVersion.Value.ShouldBe(version);
5253
}
5354
}
5455

5556
[Fact]
56-
publicvoidParsedVersionIsNullIfGodotSdkNotPresent()
57+
publicvoidParsedVersionIsFailureIfGodotSdkNotPresent()
5758
{
5859
varcontents=
5960
/*lang=json,strict*/
@@ -77,12 +78,14 @@ public void ParsedVersionIsNullIfGodotSdkNotPresent()
7778
stream.Position=0;
7879
varfileClient=newMock<IFileClient>();
7980
fileClient.Setup(client=>client.GetReadStream(path)).Returns(stream);
80-
file.ParseGodotVersion(fileClient.Object).ShouldBe(null);
81+
varparsedVersion=file.ParseGodotVersion(fileClient.Object);
82+
parsedVersion.IsSuccess.ShouldBeFalse();
83+
parsedVersion.Error.ShouldBe($"global.json file{path} does not exist or does not contain Godot.NET.Sdk information");
8184
}
8285
}
8386

8487
[Fact]
85-
publicvoidParseVersionThrowsIfGodotSdkVersionInvalid()
88+
publicvoidParsedVersionIsFailureIfGodotSdkVersionInvalid()
8689
{
8790
varcontents=
8891
/*lang=json,strict*/
@@ -109,7 +112,9 @@ public void ParseVersionThrowsIfGodotSdkVersionInvalid()
109112
stream.Position=0;
110113
varfileClient=newMock<IFileClient>();
111114
fileClient.Setup(client=>client.GetReadStream(path)).Returns(stream);
112-
Should.Throw<ArgumentException>(()=>file.ParseGodotVersion(fileClient.Object));
115+
varparsedVersion=file.ParseGodotVersion(fileClient.Object);
116+
parsedVersion.IsSuccess.ShouldBeFalse();
117+
parsedVersion.Error.ShouldBe("Couldn't match\"not.a.version\" to known GodotSharp version patterns.");
113118
}
114119
}
115120

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp