public void ToVersionRangeWorksCorrectly(KspVersion version, KspVersionRange expectedRange) { // Act var result = version.ToVersionRange(); // Assert Assert.AreEqual(expectedRange, result); }
public void IntersectWithWorksCorrectly(KspVersionRange left, KspVersionRange right, KspVersionRange expected) { // Act var result = left.IntersectWith(right); // Assert Assert.That(result, Is.EqualTo(expected)); }
public void ToStringWorksCorrectly(KspVersionRange vr, string expected) { // Act var result = vr.ToString(); // Assert Assert.That(result, Is.EqualTo(expected)); }
public void IsSupersetOfWorksCorrectly(KspVersionRange left, KspVersionRange right, bool expected) { // Act var result = left.IsSupersetOf(right); // Assert Assert.That(result, Is.EqualTo(expected)); }
public void IsSupersetOfThrowsOnNullParameter() { // Arrange var sut = new KspVersionRange(new KspVersionBound(), new KspVersionBound()); // Act TestDelegate act = () => sut.IsSupersetOf(null); // Assert Assert.That(act, Throws.Exception); }
public void VersionSpan_AllVersions_CorrectString() { // Arrange KspVersion min = KspVersion.Any; KspVersion max = KspVersion.Any; // Act string s = KspVersionRange.VersionSpan(min, max); // Assert Assert.AreEqual("KSP all versions", s); }
public void VersionSpan_MaxOnly_CorrectString() { // Arrange KspVersion min = KspVersion.Any; KspVersion max = new KspVersion(1, 0, 0); // Act string s = KspVersionRange.VersionSpan(min, max); // Assert Assert.AreEqual("KSP 1.0.0 and earlier", s); }
public void VersionSpan_OneOnly_CorrectString() { // Arrange KspVersion min = new KspVersion(1, 0, 0); KspVersion max = new KspVersion(1, 0, 0); // Act string s = KspVersionRange.VersionSpan(min, max); // Assert Assert.AreEqual("KSP 1.0.0", s); }
public void VersionSpan_FiniteRange_CorrectString() { // Arrange KspVersion min = new KspVersion(1, 0, 0); KspVersion max = new KspVersion(1, 1, 1); // Act string s = KspVersionRange.VersionSpan(min, max); // Assert Assert.AreEqual("KSP 1.0.0 - 1.1.1", s); }
/// <summary> /// Generate a string describing the range of game versions /// compatible with the given module. /// </summary> /// <param name="identifier">Mod name to findDependencyShallow</param> /// <returns> /// String describing range of compatible game versions. /// </returns> public static string CompatibleGameVersions(this IRegistryQuerier querier, CkanModule module) { ModuleVersion minMod = null, maxMod = null; KspVersion minKsp = null, maxKsp = null; Registry.GetMinMaxVersions( new CkanModule[] { module }, out minMod, out maxMod, out minKsp, out maxKsp ); return(KspVersionRange.VersionSpan(minKsp, maxKsp)); }
/// <summary> /// Generate a string describing the range of game versions /// compatible with the given module. /// </summary> /// <param name="identifier">Mod name to findDependencyShallow</param> /// <returns> /// String describing range of compatible game versions. /// </returns> public static string CompatibleGameVersions(this IRegistryQuerier querier, string identifier) { List <CkanModule> releases = querier.AvailableByIdentifier(identifier).ToList(); if (releases != null && releases.Count > 0) { ModuleVersion minMod = null, maxMod = null; KspVersion minKsp = null, maxKsp = null; Registry.GetMinMaxVersions(releases, out minMod, out maxMod, out minKsp, out maxKsp); return(KspVersionRange.VersionSpan(minKsp, maxKsp)); } return(""); }
public void CtorWorksCorrectly() { // Arrange var lower = new KspVersionBound(new KspVersion(1, 2, 3, 4), false); var upper = new KspVersionBound(new KspVersion(5, 6, 7, 8), true); // Act var result = new KspVersionRange(lower, upper); // Assert Assert.That(result.Lower, Is.EqualTo(lower)); Assert.That(result.Upper, Is.EqualTo(upper)); }
public void ReferenceEqualityWorksCorrectly() { // Arrange var sut = new KspVersionRange(new KspVersionBound(), new KspVersionBound()); // Act var genericEquals = sut.Equals(sut); var nonGenericEquals = sut.Equals((object)sut); // Assert Assert.IsTrue(genericEquals); Assert.IsTrue(nonGenericEquals); }
public void LaunchKSP() { var split = configuration.CommandLineArguments.Split(' '); if (split.Length == 0) { return; } var registry = RegistryManager.Instance(CurrentInstance).registry; var incomp = registry.IncompatibleInstalled(CurrentInstance.VersionCriteria()); if (incomp.Any()) { // Warn that it might not be safe to run KSP with incompatible modules installed string incompatDescrip = incomp .Select(m => $"{m.Module} ({registry.CompatibleGameVersions(m.Module)})") .Aggregate((a, b) => $"{a}, {b}"); if (!YesNoDialog(string.Format(Properties.Resources.MainLaunchWithIncompatible, incompatDescrip), Properties.Resources.MainLaunch, Properties.Resources.MainGoBack)) { return; } } // -single-instance crashes KSP 1.8 to KSP 1.9 on Linux // https://issuetracker.unity3d.com/issues/linux-segmentation-fault-when-running-a-built-project-with-single-instance-argument if (Platform.IsUnix) { var brokenVersionRange = new KspVersionRange( new KspVersion(1, 8), new KspVersion(1, 11) ); split = filterCmdLineArgs(split, brokenVersionRange, "-single-instance"); } var binary = split[0]; var args = string.Join(" ", split.Skip(1)); try { Directory.SetCurrentDirectory(CurrentInstance.GameDir()); Process.Start(binary, args); } catch (Exception exception) { currentUser.RaiseError(Properties.Resources.MainLaunchFailed, exception.Message); } }
/// <summary> /// If the installed game version is in the given range, /// return the given array without the given parameter, /// otherwise return the array as-is. /// </summary> /// <param name="args">Command line parameters to check</param> /// <param name="crashyKspRange">Game versions that should not use this parameter</param> /// <param name="parameter">The parameter to remove on version match</param> /// <returns> /// args or args minus parameter /// </returns> private string[] filterCmdLineArgs(string[] args, KspVersionRange crashyKspRange, string parameter) { var installedRange = Main.Instance.CurrentInstance.Version().ToVersionRange(); if (crashyKspRange.IntersectWith(installedRange) != null && args.Contains(parameter)) { log.DebugFormat( "Parameter {0} found on incompatible KSP version {1}, pruning", parameter, Main.Instance.CurrentInstance.Version().ToString()); return(args.Where(s => s != parameter).ToArray()); } return(args); }
public void RangeFromVersionsEqualsRangeFromBounds() { // Arrange var lowerBound = new KspVersionBound(new KspVersion(1, 2, 0, 0), true); var upperBound = new KspVersionBound(new KspVersion(2, 4, 7, 0), false); var lowerVersion = new KspVersion(1, 2); var upperVersion = new KspVersion(2, 4, 6); // Act var resultFromBounds = new KspVersionRange(lowerBound, upperBound); var resultFromVersions = new KspVersionRange(lowerVersion, upperVersion); // Assert Assert.That(resultFromBounds.Lower, Is.EqualTo(resultFromVersions.Lower)); Assert.That(resultFromBounds.Upper, Is.EqualTo(resultFromVersions.Upper)); }
public override bool SingleVersionsCompatible(KspVersion gameVersion, CkanModule module) { var gameVersionRange = gameVersion.ToVersionRange(); var moduleRange = KspVersionRange.Any; if (module.ksp_version != null) { moduleRange = module.ksp_version.ToVersionRange(); } else if (module.ksp_version_min != null || module.ksp_version_max != null) { if (module.ksp_version_min != null && module.ksp_version_max != null) { var minRange = module.ksp_version_min.ToVersionRange(); var maxRange = module.ksp_version_max.ToVersionRange(); if (minRange.Lower.Value <= maxRange.Upper.Value) { moduleRange = new KspVersionRange(minRange.Lower, maxRange.Upper); } else { log.WarnFormat("{0} is not less or equal to {1}", module.ksp_version_min, module.ksp_version_max); return(false); } } else if (module.ksp_version_min != null) { var minRange = module.ksp_version_min.ToVersionRange(); moduleRange = new KspVersionRange(minRange.Lower, KspVersionBound.Unbounded); } else if (module.ksp_version_max != null) { var maxRange = module.ksp_version_max.ToVersionRange(); moduleRange = new KspVersionRange(KspVersionBound.Unbounded, maxRange.Upper); } } else { return(true); } return(gameVersionRange.IntersectWith(moduleRange) != null); }
public bool Compatible(KspVersion gameVersion, CkanModule module) { var gameVersionRange = gameVersion.ToVersionRange(); var moduleRange = KspVersionRange.Any; if (module.ksp_version != null) { moduleRange = module.ksp_version.ToVersionRange(); } else if (module.ksp_version_min != null || module.ksp_version_max != null) { if (module.ksp_version_min != null && module.ksp_version_max != null) { if (module.ksp_version_min <= module.ksp_version_max) { var minRange = module.ksp_version_min.ToVersionRange(); var maxRange = module.ksp_version_max.ToVersionRange(); moduleRange = new KspVersionRange(minRange.Lower, maxRange.Upper); } else { return(false); } } else if (module.ksp_version_min != null) { var minRange = module.ksp_version_min.ToVersionRange(); moduleRange = new KspVersionRange(minRange.Lower, KspVersionBound.Unbounded); } else if (module.ksp_version_max != null) { var maxRange = module.ksp_version_max.ToVersionRange(); moduleRange = new KspVersionRange(KspVersionBound.Unbounded, maxRange.Upper); } } else { return(true); } return(moduleRange.IsSupersetOf(gameVersionRange)); }
public void EqualityWorksCorrectly(KspVersionRange vr1, KspVersionRange vr2, bool areEqual) { // Act var genericEquals = vr1.Equals(vr2); var nonGenericEquals = vr1.Equals((object)vr2); var equalsOperator = vr1 == vr2; var notEqualsOperator = vr1 != vr2; var reverseEqualsOperator = vr2 == vr1; var reverseNotEqualsOperator = vr2 != vr1; // Assert Assert.AreEqual(areEqual, genericEquals); Assert.AreEqual(areEqual, nonGenericEquals); Assert.AreEqual(areEqual, equalsOperator); Assert.AreNotEqual(areEqual, notEqualsOperator); Assert.AreEqual(areEqual, reverseEqualsOperator); Assert.AreNotEqual(areEqual, reverseNotEqualsOperator); }
private void addVersionBox(int l, int t, int r, int b, Func<string> title, Func<ConsoleColor> color, bool doubleLine, List<CkanModule> releases) { AddObject(new ConsoleFrame( l, t, r, b, title, color, doubleLine )); if (releases != null && releases.Count > 0) { ModuleVersion minMod = null, maxMod = null; KspVersion minKsp = null, maxKsp = null; Registry.GetMinMaxVersions(releases, out minMod, out maxMod, out minKsp, out maxKsp); AddObject(new ConsoleLabel( l + 2, t + 1, r - 2, () => minMod == maxMod ? $"{ModuleInstaller.WithAndWithoutEpoch(minMod?.ToString() ?? "???")}" : $"{ModuleInstaller.WithAndWithoutEpoch(minMod?.ToString() ?? "???")} - {ModuleInstaller.WithAndWithoutEpoch(maxMod?.ToString() ?? "???")}", null, color )); AddObject(new ConsoleLabel( l + 2, t + 2, r - 2, () => "Compatible with:", null, () => ConsoleTheme.Current.DimLabelFg )); AddObject(new ConsoleLabel( l + 4, t + 3, r - 2, () => KspVersionRange.VersionSpan(minKsp, maxKsp), null, color )); } }
public void NullEqualityWorksCorrectly() { // Arrange var sut = new KspVersionRange(new KspVersionBound(), new KspVersionBound()); // Act // ReSharper disable ConditionIsAlwaysTrueOrFalse var genericEquals = sut.Equals(null); var nonGenericEquals = sut.Equals((object)null); var equalsOperatorNullLeft = null == sut; var equalsOperatorNullRight = sut == null; var notEqualsOperatorNullLeft = null != sut; var notEqualsOperatorNullRight = sut != null; // ReSharper restore ConditionIsAlwaysTrueOrFalse // ASsert Assert.IsFalse(genericEquals); Assert.IsFalse(nonGenericEquals); Assert.IsFalse(equalsOperatorNullLeft); Assert.IsFalse(equalsOperatorNullRight); Assert.IsTrue(notEqualsOperatorNullLeft); Assert.IsTrue(notEqualsOperatorNullRight); }
public void Validate(Metadata metadata) { var mod = CkanModule.FromJson(metadata.Json().ToString()); if (!mod.IsCompatibleKSP(new KspVersionCriteria(null, buildMap.KnownVersions))) { KspVersion minKsp = null, maxKsp = null; Registry.GetMinMaxVersions(new List <CkanModule>() { mod }, out _, out _, out minKsp, out maxKsp); throw new Kraken($"{metadata.Identifier} doesn't match any valid game version: {KspVersionRange.VersionSpan(minKsp, maxKsp)}"); } }
private bool VersionsNeedManualReview(Metadata metadata, out string reason) { JObject json = metadata.Json(); var minStr = json["ksp_version_min"] ?? json["ksp_version"]; var maxStr = json["ksp_version_max"] ?? json["ksp_version"]; var minVer = minStr == null ? KspVersion.Any : KspVersion.Parse((string)minStr); var maxVer = maxStr == null ? KspVersion.Any : KspVersion.Parse((string)maxStr); if (currentRelease.IntersectWith(new KspVersionRange(minVer, maxVer)) == null) { reason = $"Hard-coded game versions not compatible with current release: {KspVersionRange.VersionSpan(minVer, maxVer)}\r\nPlease check that they match the forum thread."; return(true); } else { // Compatible with latest release, no manual review needed reason = ""; return(false); } }