Skip to content

Commit 31b8c81

Browse files
committed
Replace result tests, ParsingContext interface
1 parent 041770a commit 31b8c81

File tree

18 files changed

+102
-50
lines changed

18 files changed

+102
-50
lines changed
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
namespace SimpleStateMachine.StructuralSearch.Tests.Mock
2+
{
3+
public class EmptyParsingContext : IParsingContext
4+
{
5+
public bool TryGetPlaceholder(string name, out string value)
6+
{
7+
throw new System.NotImplementedException();
8+
}
9+
10+
public void AddPlaceholder(string name, string value)
11+
{
12+
throw new System.NotImplementedException();
13+
}
14+
15+
public string GetPlaceholder(string name)
16+
{
17+
return name;
18+
}
19+
}
20+
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
$var1$ $sign$ $value1$ ? $value1$ : $value2$;
1+
$var1$ $sign$ $value1$ ? $value2$ : $value3$;
Lines changed: 29 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
using System.IO;
1+
using System.Collections.Generic;
2+
using System.IO;
23
using System.Linq;
4+
using SimpleStateMachine.StructuralSearch.Tests.Mock;
35
using Xunit;
46

57
namespace SimpleStateMachine.StructuralSearch.Tests
@@ -13,23 +15,34 @@ public class ReplaceTemplateTests
1315
public void TemplateParsingShouldHaveStepCount(string templatePath, int stepsCount)
1416
{
1517
var replaceTemplate = File.ReadAllText(templatePath);
16-
var replaceBuilder = StructuralSearch.ParseReplaceTemplate(replaceTemplate, new ParsingContext());
17-
var result = replaceBuilder.Build();
18-
18+
var replaceBuilder = StructuralSearch.ParseReplaceTemplate(replaceTemplate);
19+
var result = replaceBuilder.Build(new EmptyParsingContext());
20+
1921
Assert.NotNull(replaceTemplate);
2022
Assert.Equal(replaceBuilder.Steps.Count(), stepsCount);
2123
}
22-
23-
// [Theory]
24-
// [InlineData("Source/IfElseSource.txt", "ReplaceTemplate/IfElseReplaceTemplate.txt")]
25-
// public void ReplaceByTemplateShouldBeSuccess(string sourcePath, string templatePath)
26-
// {
27-
// var replaceTemplate = File.ReadAllText(templatePath);
28-
// var replaceBuilder = StructuralSearch.ParseReplaceTemplate(replaceTemplate, new ParsingContext());
29-
// var result = replaceBuilder.Build();
30-
//
31-
// Assert.NotNull(replaceTemplate);
32-
// Assert.Equal(replaceBuilder.Steps.Count(), stepsCount);
33-
// }
24+
25+
[Theory]
26+
[InlineData("ReplaceTemplate/IfElseReplaceTemplate.txt", "ReplaceResult/IfElseReplaceResult.txt", new[] { "var1", "sign", "value1", "value2", "value3" }, new[] { "temp", "==", "125", "12", "15" })]
27+
[InlineData("ReplaceTemplate/IfValueIsNullReplaceTemplate.txt", "ReplaceResult/IfValueIsNullReplaceResult.txt", new[] { "var", "value" }, new[] { "temp", "12" })]
28+
[InlineData("ReplaceTemplate/TernaryOperatorReplaceTemplate.txt", "ReplaceResult/TernaryOperatorReplaceResult.txt", new[] { "condition", "value1", "value2" }, new[] { "temp == 125", "12", "15" })]
29+
public void ReplaceByTemplateShouldBeSuccess(string templatePath, string resultPath, string[] keys, string[] values)
30+
{
31+
var replaceTemplate = File.ReadAllText(templatePath);
32+
var replaceResult = File.ReadAllText(resultPath);
33+
var replaceBuilder = StructuralSearch.ParseReplaceTemplate(replaceTemplate);
34+
35+
var parsingContext = new ParsingContext();
36+
for (int i = 0; i < keys.Length; i++)
37+
{
38+
parsingContext.AddPlaceholder(keys[i], values[i]);
39+
}
40+
41+
var result = replaceBuilder.Build(parsingContext);
42+
43+
Assert.NotNull(replaceTemplate);
44+
Assert.NotNull(replaceResult);
45+
Assert.Equal(replaceResult, result);
46+
}
3447
}
3548
}

src/SimpleStateMachine.StructuralSearch.Tests/SimpleStateMachine.StructuralSearch.Tests.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@
3535
<Content Include="ReplaceTemplate\*.txt">
3636
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
3737
</Content>
38+
<Content Include="ReplaceResult\*.txt">
39+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
40+
</Content>
3841
<Content Include="ConfigurationFile\*">
3942
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
4043
</Content>

src/SimpleStateMachine.StructuralSearch/Extensions/SourceMatchManyParserExtensions.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@ public static class SourceMatchParserExtensions
99
// {
1010
// return parsers.Select(x => Parsers.Series(x, getResult));
1111
// }
12-
public static Parser<char, Parser<char, string>> JoinResults(this Parser<char, IEnumerable<Parser<char, string>>> parsers, ParsingContext context)
12+
public static Parser<char, Parser<char, string>> JoinResults(this Parser<char, IEnumerable<Parser<char, string>>> parsers, IParsingContext context)
1313
{
1414
return parsers.Select(x => Parsers.Series(context, x, y => string.Join(string.Empty, y)));
1515
}
16-
public static Parser<char, Parser<char, SourceMatch>> JoinResults(this Parser<char, IEnumerable<Parser<char, SourceMatch>>> parsers, ParsingContext context)
16+
public static Parser<char, Parser<char, SourceMatch>> JoinResults(this Parser<char, IEnumerable<Parser<char, SourceMatch>>> parsers, IParsingContext context)
1717
{
1818
return parsers.Select(x => Parsers.Series(context, x, y => y.Concatenate()));
1919
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
namespace SimpleStateMachine.StructuralSearch
2+
{
3+
public interface IParsingContext
4+
{
5+
bool TryGetPlaceholder(string name, out string value);
6+
7+
void AddPlaceholder(string name, string value);
8+
9+
string GetPlaceholder(string name);
10+
}
11+
}

src/SimpleStateMachine.StructuralSearch/Parsers/IContextDependent.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@
22
{
33
public interface IContextDependent
44
{
5-
void SetContext(ParsingContext context);
5+
void SetContext(IParsingContext context);
66
}
77
}

src/SimpleStateMachine.StructuralSearch/Parsers/Parsers.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ public static Parser<TToken, IEnumerable<T>> MapToMany<TToken, T>(Parser<TToken,
7878
}
7979

8080

81-
public static Parser<TToken, R> Series<TToken, T, R>(ParsingContext context, IEnumerable<Parser<TToken, T>> parsers,
81+
public static Parser<TToken, R> Series<TToken, T, R>(IParsingContext context, IEnumerable<Parser<TToken, T>> parsers,
8282
Func<IEnumerable<T>, R> func)
8383
{
8484
if (parsers == null)

src/SimpleStateMachine.StructuralSearch/Parsers/PlaceholderParser.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ namespace SimpleStateMachine.StructuralSearch
77
{
88
public class PlaceholderParser : ParserWithLookahead<char, string>, IContextDependent
99
{
10-
private ParsingContext _context;
10+
private IParsingContext _context;
1111

1212
public PlaceholderParser(string name)
1313
{
@@ -60,7 +60,7 @@ public override bool TryParse(ref ParseState<char> state, ref PooledList<Expecte
6060
bool res;
6161

6262
// No use look-ahead if placeholder is already defined
63-
if (_context.TryGet(Name, out var value))
63+
if (_context.TryGetPlaceholder(Name, out var value))
6464
{
6565
res = Parser.String(value).TryParse(ref state, ref expected, out result);
6666
}
@@ -102,7 +102,7 @@ public override bool TryParse(ref ParseState<char> state, ref PooledList<Expecte
102102
// var parser = term.JoinToString().AsMatch();
103103
// return parser;
104104
// }
105-
public void SetContext(ParsingContext context)
105+
public void SetContext(IParsingContext context)
106106
{
107107
_context = context;
108108
}

src/SimpleStateMachine.StructuralSearch/Parsers/SeriesParser.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ public class SeriesParser<TToken, T, R>: Parser<TToken, R>
99
{
1010
private readonly Func<IEnumerable<T>, R> _getResult;
1111
private readonly IEnumerable<Parser<TToken, T>> _parsers;
12-
private readonly ParsingContext _context;
12+
private readonly IParsingContext _context;
1313
private bool _initialized = false;
14-
public SeriesParser(ParsingContext context, IEnumerable<Parser<TToken, T>> parsers, Func<IEnumerable<T>, R> getResult)
14+
public SeriesParser(IParsingContext context, IEnumerable<Parser<TToken, T>> parsers, Func<IEnumerable<T>, R> getResult)
1515
{
1616
_getResult = getResult;
1717
_parsers = parsers;

0 commit comments

Comments
 (0)