Skip to content

Commit da0a8ee

Browse files
committed
Refactor ReplacePath methods to improve readability and maintainability by expanding inline replacements into structured logic for handling Windows paths and JSON-escaped versions.
1 parent 9afb64b commit da0a8ee

File tree

1 file changed

+48
-2
lines changed

1 file changed

+48
-2
lines changed

src/Confix.Tool/test/Confix.Tool.Tests/Extensions/TestExtensions.cs

Lines changed: 48 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,54 @@ public static string ToJsonString(this object node)
1414
});
1515

1616
public static string ReplacePath(this string str, TestConfixCommandline info, string name)
17-
=> str.Replace(info.Directories.Content.Parent!.FullName, $"<<{name}>>");
17+
{
18+
var path = info.Directories.Content.Parent!.FullName;
19+
var result = str;
20+
21+
// Replace original path
22+
result = result.Replace(path, $"<<{name}>>");
23+
24+
// On Windows, also replace forward-slash version and JSON-escaped versions
25+
if (Path.DirectorySeparatorChar == '\\')
26+
{
27+
var forwardSlashPath = path.Replace('\\', '/');
28+
result = result.Replace(forwardSlashPath, $"<<{name}>>");
29+
30+
// Handle JSON-escaped paths (backslashes doubled)
31+
var jsonEscapedBackslash = path.Replace("\\", "\\\\");
32+
result = result.Replace(jsonEscapedBackslash, $"<<{name}>>");
33+
34+
// Handle JSON-escaped forward slash paths
35+
var jsonEscapedForward = forwardSlashPath.Replace("/", "\\/");
36+
result = result.Replace(jsonEscapedForward, $"<<{name}>>");
37+
}
38+
39+
return result;
40+
}
1841

1942
public static string ReplacePath(this string str, TestMiddlewareContext info, string name)
20-
=> str.Replace(info.Directories.Content.Parent!.FullName, $"<<{name}>>");
43+
{
44+
var path = info.Directories.Content.Parent!.FullName;
45+
var result = str;
46+
47+
// Replace original path
48+
result = result.Replace(path, $"<<{name}>>");
49+
50+
// On Windows, also replace forward-slash version and JSON-escaped versions
51+
if (Path.DirectorySeparatorChar == '\\')
52+
{
53+
var forwardSlashPath = path.Replace('\\', '/');
54+
result = result.Replace(forwardSlashPath, $"<<{name}>>");
55+
56+
// Handle JSON-escaped paths (backslashes doubled)
57+
var jsonEscapedBackslash = path.Replace("\\", "\\\\");
58+
result = result.Replace(jsonEscapedBackslash, $"<<{name}>>");
59+
60+
// Handle JSON-escaped forward slash paths
61+
var jsonEscapedForward = forwardSlashPath.Replace("/", "\\/");
62+
result = result.Replace(jsonEscapedForward, $"<<{name}>>");
63+
}
64+
65+
return result;
66+
}
2167
}

0 commit comments

Comments
 (0)