Skip to content

Commit 21b12fb

Browse files
authored
Merge pull request #206 from DavidVanDeursen/tilde-allowed-in-server-path
Added test and added tilde as allowed character in server name
2 parents 93ad2a0 + 56a105e commit 21b12fb

2 files changed

Lines changed: 25 additions & 13 deletions

File tree

src/XLParser.Tests/FormulaAnalysisTest.cs

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -601,17 +601,6 @@ public void ExternalWorkbook()
601601
Assert.AreEqual("Sheet1", references.First().Worksheet);
602602
}
603603

604-
[TestMethod]
605-
public void ExternalWorkbookNetworkPath()
606-
{
607-
List<ParserReference> references = new FormulaAnalyzer(@"='\\TEST-01\Folder\[Book1.xlsx]Sheet1'!$A$1").ParserReferences().ToList();
608-
609-
Assert.AreEqual(1, references.Count);
610-
Assert.AreEqual(@"\\TEST-01\Folder\", references.First().FilePath);
611-
Assert.AreEqual("Book1.xlsx", references.First().FileName);
612-
Assert.AreEqual("Sheet1", references.First().Worksheet);
613-
}
614-
615604
[TestMethod]
616605
public void ExternalWorkbookUrlPathHttp()
617606
{
@@ -683,6 +672,29 @@ public void ExternalWorkbookUrlPathHttpWithEscapedSingleQuote()
683672
Assert.AreEqual("Sheet1", references.First().Worksheet);
684673
}
685674

675+
[TestMethod]
676+
public void ExternalWorkbookNetworkPath()
677+
{
678+
List<ParserReference> references = new FormulaAnalyzer(@"='\\TEST-01\Folder\[Book1.xlsx]Sheet1'!$A$1").ParserReferences().ToList();
679+
680+
Assert.AreEqual(1, references.Count);
681+
Assert.AreEqual(@"\\TEST-01\Folder\", references.First().FilePath);
682+
Assert.AreEqual("Book1.xlsx", references.First().FileName);
683+
Assert.AreEqual("Sheet1", references.First().Worksheet);
684+
}
685+
686+
[TestMethod]
687+
public void ExternalWorkbookNetworkPathWithTilde()
688+
{
689+
//See [#205] (https://github.com/spreadsheetlab/XLParser/issues/205)
690+
List<ParserReference> references = new FormulaAnalyzer(@"='\\TEST-~01\Folder\[Book1.xlsx]Sheet1'!$A$1").ParserReferences().ToList();
691+
692+
Assert.AreEqual(1, references.Count);
693+
Assert.AreEqual(@"\\TEST-~01\Folder\", references.First().FilePath);
694+
Assert.AreEqual("Book1.xlsx", references.First().FileName);
695+
Assert.AreEqual("Sheet1", references.First().Worksheet);
696+
}
697+
686698
[TestMethod]
687699
public void ExternalWorkbookNetworkPathWithSpace()
688700
{
@@ -1426,4 +1438,4 @@ public void TestConstants()
14261438
}
14271439
#endregion
14281440
}
1429-
}
1441+
}

src/XLParser/ExcelFormulaGrammar.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ public class ExcelFormulaGrammar : Grammar
204204
{ Priority = TerminalPriority.FileName };
205205

206206
// Source: http://stackoverflow.com/a/6416209/572635
207-
private const string windowsFilePathRegex = @"(?:[a-zA-Z]:|\\?\\?[\w\-.$ @]+)\\(([^<>\"" /\|?*\\']|( |''))*\\)*";
207+
private const string windowsFilePathRegex = @"(?:[a-zA-Z]:|\\?\\?[\w\-.$ @~]+)\\(([^<>\"" /\|?*\\']|( |''))*\\)*";
208208
private const string urlPathRegex = @"http(s?)\://([\p{L}\p{N}-_]+\.[\p{L}\p{N}-_]*)+(:[0-9]+)?/([\p{L}\p{N}\-\.\?\,\'+&%\$#_ ()]*/)*";
209209
private const string filePathRegex = @"(" + windowsFilePathRegex + @"|" + urlPathRegex + @")";
210210
public Terminal FilePathToken { get; } = new RegexBasedTerminal(GrammarNames.TokenFilePath, filePathRegex)

0 commit comments

Comments
 (0)