More tests
parent
e18dc6e084
commit
96804f8531
@ -0,0 +1,58 @@
|
||||
using Irony.Interpreter;
|
||||
using irules.core;
|
||||
|
||||
namespace test.core;
|
||||
|
||||
public class ClauseTests : GrammarTester
|
||||
{
|
||||
public ClauseTests() : base(new Clause())
|
||||
{
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void TestA()
|
||||
{
|
||||
Parse("A");
|
||||
}
|
||||
[Fact]
|
||||
public void TestNotA()
|
||||
{
|
||||
Parse("^A");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void TestAandB()
|
||||
{
|
||||
Parse("A&B");
|
||||
}
|
||||
[Fact]
|
||||
public void TestAorB()
|
||||
{
|
||||
Parse("A|B");
|
||||
}
|
||||
[Fact]
|
||||
public void TestAorNotB()
|
||||
{
|
||||
Parse("A|^B");
|
||||
}
|
||||
[Fact]
|
||||
public void TestAandNotB()
|
||||
{
|
||||
Parse("A&^B");
|
||||
}
|
||||
[Fact]
|
||||
public void TestNotAandNotB()
|
||||
{
|
||||
Parse("^A&^B");
|
||||
}
|
||||
|
||||
|
||||
[Fact]
|
||||
public void TestSyntactError()
|
||||
{
|
||||
var ex = Assert.Throws<ScriptException>(()=>
|
||||
Parse("B+A"));
|
||||
Assert.Equal(0, ex.Location.Line);
|
||||
Assert.Equal(1, ex.Location.Column);
|
||||
}
|
||||
}
|
@ -0,0 +1,54 @@
|
||||
using Irony.Interpreter;
|
||||
using Irony.Parsing;
|
||||
using Xunit.Sdk;
|
||||
|
||||
namespace test.core;
|
||||
|
||||
public class GrammarTester
|
||||
{
|
||||
private Grammar grammar;
|
||||
private LanguageData language;
|
||||
private Parser parser;
|
||||
|
||||
public GrammarTester(Grammar grammar)
|
||||
{
|
||||
this.grammar = grammar;
|
||||
|
||||
language = new LanguageData(grammar);
|
||||
|
||||
parser = new Parser(language);
|
||||
}
|
||||
|
||||
public Exception LastException { get; private set; }
|
||||
public AppStatus Status { get; private set; }
|
||||
public ParseTree LastScript { get; private set; }
|
||||
|
||||
public object Parse(string script)
|
||||
{
|
||||
try
|
||||
{
|
||||
var parsedScript = parser.Parse(script);
|
||||
if (parsedScript.HasErrors())
|
||||
{
|
||||
Status = AppStatus.SyntaxError;
|
||||
var ex = new ScriptException("Syntax errors found: "
|
||||
+ string.Join(", ", parsedScript.ParserMessages.Select(m => $"{m.Message} at line {m.Location.Line}, column {m.Location.Column}" )));
|
||||
ex.Location = parsedScript.ParserMessages.First().Location;
|
||||
throw ex;
|
||||
}
|
||||
|
||||
if (parser.Context.Status == ParserStatus.AcceptedPartial)
|
||||
{
|
||||
throw new Exception("AcceptedPartial");
|
||||
}
|
||||
LastScript = parsedScript;
|
||||
return parsedScript;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
this.LastException = ex;
|
||||
this.Status = AppStatus.Crash;
|
||||
throw;
|
||||
}
|
||||
}
|
||||
}
|
@ -1,49 +0,0 @@
|
||||
using Irony.Interpreter;
|
||||
using Irony.Parsing;
|
||||
using irules.core;
|
||||
using Xunit.Sdk;
|
||||
|
||||
namespace test.core;
|
||||
|
||||
public class UnitTest1
|
||||
{
|
||||
public AppStatus Status { get; private set; }
|
||||
public ParseTree LastScript { get; private set; }
|
||||
public Exception LastException { get; private set; }
|
||||
|
||||
[Fact]
|
||||
public void Test1()
|
||||
{
|
||||
Parse("A");
|
||||
}
|
||||
|
||||
|
||||
public object Parse(string script) {
|
||||
|
||||
var grammar = new Clause();
|
||||
|
||||
var language = new LanguageData(grammar);
|
||||
|
||||
var parser = new Parser(language);
|
||||
try {
|
||||
var parsedScript = parser.Parse(script);
|
||||
if (parsedScript.HasErrors()) {
|
||||
Status = AppStatus.SyntaxError;
|
||||
throw new ScriptException("Syntax errors found: "
|
||||
+ string.Join(", ",parsedScript.ParserMessages));
|
||||
}
|
||||
|
||||
if (parser.Context.Status == ParserStatus.AcceptedPartial) {
|
||||
throw new Exception ("AcceptedPartial");
|
||||
}
|
||||
LastScript = parsedScript;
|
||||
return parsedScript;
|
||||
} catch (ScriptException) {
|
||||
throw;
|
||||
} catch (Exception ex) {
|
||||
this.LastException = ex;
|
||||
this.Status = AppStatus.Crash;
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue