fix issues with subfolders

This commit is contained in:
atravita-mods 2022-10-16 18:04:19 -04:00
parent 573f732c2a
commit 4dcc6904b9
3 changed files with 19 additions and 4 deletions

View File

@ -243,6 +243,20 @@ namespace SMAPI.Tests.Core
return result; return result;
} }
[TestCase("Mods/SomeMod/SomeSubdirectory", "Mods/Some", true, ExpectedResult = true)]
[TestCase("Mods/SomeMod/SomeSubdirectory", "Mods/Some", false, ExpectedResult = false)]
public bool StartsWith_SubfolderWithPartial(string mainAssetName, string otherAssetName, bool allowSubfolder)
{
// arrange
mainAssetName = PathUtilities.NormalizeAssetName(mainAssetName);
// act
AssetName name = AssetName.Parse(mainAssetName, _ => null);
// assert value
return name.StartsWith(otherAssetName, allowPartialWord: true, allowSubfolder: allowSubfolder);
}
/**** /****
** GetHashCode ** GetHashCode

View File

@ -19,6 +19,7 @@
<PackageReference Include="Moq" Version="4.18.1" /> <PackageReference Include="Moq" Version="4.18.1" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="NUnit" Version="3.13.3" /> <PackageReference Include="NUnit" Version="3.13.3" />
<PackageReference Include="NUnit3TestAdapter" Version="4.2.1" PrivateAssets="all" IncludeAssets="runtime; build; native; contentfiles; analyzers; buildtransitive" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@ -162,8 +162,8 @@ namespace StardewModdingAPI.Framework.Content
if (prefixHasMore) if (prefixHasMore)
return false; return false;
// possible match: all prefix segments matched // possible match: all prefix segments matched.
return allowSubfolder || !curParts.Remainder.Contains(pathSeparators, StringComparison.Ordinal); return allowSubfolder || (pathSeparators.Contains(trimmed[^1]) ? curParts.Remainder.Length == 0 : curParts.Current.Length == 0);
} }
// match: previous segments matched exactly and both reached the end // match: previous segments matched exactly and both reached the end
@ -192,7 +192,7 @@ namespace StardewModdingAPI.Framework.Content
return false; return false;
// possible match // possible match
return allowSubfolder || !curParts.Remainder.Contains(pathSeparators, StringComparison.Ordinal); return allowSubfolder || (pathSeparators.Contains(trimmed[^1]) ? curParts.Remainder.IndexOfAny(ToolkitPathUtilities.PossiblePathSeparators) < 0 : curParts.Remainder.Length == 0);
} }
} }
} }
@ -203,7 +203,7 @@ namespace StardewModdingAPI.Framework.Content
if (assetFolder is null) if (assetFolder is null)
return false; return false;
return this.StartsWith(assetFolder + "/", allowPartialWord: false, allowSubfolder: false); return this.StartsWith(assetFolder + ToolkitPathUtilities.PreferredPathSeparator, allowPartialWord: false, allowSubfolder: false);
} }
/// <inheritdoc /> /// <inheritdoc />