From 51b2ef93be5b64f6742010b49ce0c36fc2a3dbac Mon Sep 17 00:00:00 2001 From: Victor Date: Sat, 12 Oct 2019 23:15:38 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=B2=D1=8B=D0=B4=D0=B0=D1=87=D0=B0=20?= =?UTF-8?q?=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B8=20=D0=B2=20include=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B8=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B5=20?= =?UTF-8?q?=D0=BF=D0=B0=D1=80=D1=81=D0=B8=D0=BD=D0=B3=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ownlang/parser/ast/IncludeStatement.java | 3 +- src/test/resources/expressions/include.own | 35 +++++++++++++++++++ .../expressions/includeClass.own.txt | 8 +++++ .../includeParseErrorSource.own.txt | 4 +++ 4 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 src/test/resources/expressions/include.own create mode 100644 src/test/resources/expressions/includeClass.own.txt create mode 100644 src/test/resources/expressions/includeParseErrorSource.own.txt diff --git a/src/main/java/com/annimon/ownlang/parser/ast/IncludeStatement.java b/src/main/java/com/annimon/ownlang/parser/ast/IncludeStatement.java index 3bca5a0..0c13129 100644 --- a/src/main/java/com/annimon/ownlang/parser/ast/IncludeStatement.java +++ b/src/main/java/com/annimon/ownlang/parser/ast/IncludeStatement.java @@ -1,5 +1,6 @@ package com.annimon.ownlang.parser.ast; +import com.annimon.ownlang.exceptions.ParseException; import com.annimon.ownlang.parser.Lexer; import com.annimon.ownlang.parser.Parser; import com.annimon.ownlang.parser.SourceLoader; @@ -40,7 +41,7 @@ public final class IncludeStatement extends InterruptableNode implements Stateme final Parser parser = new Parser(tokens); final Statement program = parser.parse(); if (parser.getParseErrors().hasErrors()) { - return null; + throw new ParseException(parser.getParseErrors().toString()); } return program; } diff --git a/src/test/resources/expressions/include.own b/src/test/resources/expressions/include.own new file mode 100644 index 0000000..41eeb1e --- /dev/null +++ b/src/test/resources/expressions/include.own @@ -0,0 +1,35 @@ +use "std" + +def testIncludeClass() { + include "src/test/resources/expressions/includeClass.own.txt" + obj = new IncludeClass() + assertEquals("1", obj.field1) + assertEquals(2, obj.field2) + assertEquals(42, obj.test()) +} + +def testIncludeNotExistsSource() { + assertFail(def() { + include "src/test.own" + }) +} + +def testCatchingIncludeNotExistsSource() { + res = try(def() { + include "src/test.own" + }, def(classname, message) = "ok") + assertEquals("ok", res) +} + +def testIncludeParseErrorSource() { + assertFail(def() { + include "src/test/resources/expressions/includeParseErrorSource.own.txt" + }) +} + +def testCatchingIncludeParseErrorSource() { + res = try(def() { + include "src/test/resources/expressions/includeParseErrorSource.own.txt" + }, def(classname, message) = "ok") + assertEquals("ok", res) +} \ No newline at end of file diff --git a/src/test/resources/expressions/includeClass.own.txt b/src/test/resources/expressions/includeClass.own.txt new file mode 100644 index 0000000..4c6a7ce --- /dev/null +++ b/src/test/resources/expressions/includeClass.own.txt @@ -0,0 +1,8 @@ +class IncludeClass { + field1 = "1" + field2 = 2 + + def test() { + return 42 + } +} \ No newline at end of file diff --git a/src/test/resources/expressions/includeParseErrorSource.own.txt b/src/test/resources/expressions/includeParseErrorSource.own.txt new file mode 100644 index 0000000..a6395c9 --- /dev/null +++ b/src/test/resources/expressions/includeParseErrorSource.own.txt @@ -0,0 +1,4 @@ +def test() = return println match x { + case case 1 +} +value = "passed" \ No newline at end of file