Skip to content

Commit

Permalink
Merge 635d530 into 28e914d
Browse files Browse the repository at this point in the history
  • Loading branch information
goto40 committed Jul 23, 2019
2 parents 28e914d + 635d530 commit 089755d
Show file tree
Hide file tree
Showing 13 changed files with 362 additions and 92 deletions.
10 changes: 7 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,15 @@ please take a look at related PRs and issues and see if the change affects you.

### Added

- Added new function `textx.scoping.is_file_included` [#197]
- Added new function `textx.scoping.is_file_included` ([#197]).

### Changed

- Changed function name `textx.scoping.get_all_models_including_attached_models`
to `textx.scoping.get_included_models` [#197] (marked old function
as deprecated).
to `textx.scoping.get_included_models` (marked old function
as deprecated) ([#197]).
- Delete all models touched while loading a model, when an error occurs
while loading in all repositories (strong exception safety guarantee) ([#200]).

## [v2.0.1] (released: 2019-05-20)

Expand Down Expand Up @@ -407,6 +409,8 @@ please take a look at related PRs and issues and see if the change affects you.
- Export to dot.


[#200]: https://github.com/textX/textX/issues/200
[#197]: https://github.com/textX/textX/issues/197
[#188]: https://github.com/textX/textX/issues/188
[#187]: https://github.com/textX/textX/pull/187
[#186]: https://github.com/textX/textX/pull/186
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#include "data_structures_including_error.edata" // <--- types must be lowercase
#include "types.etype"

algo A1 : Point -> City
algo A2 : City -> Population
connect A1 -> A2
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#include "data_structures.edata"
#include "types_with_syntax_error.etype"

algo A1 : Point -> City
algo A2 : City -> Population
connect A1 -> A2
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
UNEXPECTED_#include "data_structures_including_error.edata"
#include "types.etype"

algo A1 : Point -> City
algo A2 : City -> Population
connect A1 -> A // <--- Unknown object "A" of class "Algo"
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#include "data_structures_including_error.edata"
#include "types.etype"

algo A1 : Point -> City
algo A2 : City -> Population
connect A1 -> A // <--- Unknown object "A" of class "Algo"
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
UNEXPECTED_type Int // Syntax error
type string
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,25 @@ def test_flow_dsl_types_validation(clear_all):
Test flow model including error raises error.
"""

# print("-----------------------------------1---")
# print(metamodel_for_language('flow-dsl')._tx_model_repository.all_models.filename_to_model.keys())
# print("----------------- #={}".format(
# len(metamodel_for_language('flow-dsl')._tx_model_repository.all_models.filename_to_model.keys())))
mmF = metamodel_for_language('flow-dsl')
with pytest.raises(TextXSyntaxError,
match=r'.*lowercase.*'):
mmF.model_from_file(os.path.join(current_dir,
'models',
'data_flow_including_error.eflow'))

# When reading a second time, the error must be reported again:

# print("-----------------------------------2---")
# print(metamodel_for_language('flow-dsl')._tx_model_repository.all_models.filename_to_model.keys())
# print("----------------- #={}".format(
# len(metamodel_for_language('flow-dsl')._tx_model_repository.all_models.filename_to_model.keys())))
with pytest.raises(TextXSyntaxError,
match=r'.*lowercase.*'):
mmF.model_from_file(os.path.join(current_dir,
'models',
'data_flow_including_error.eflow'))
116 changes: 116 additions & 0 deletions tests/functional/registration/projects/flow_dsl/tests/test_issue196.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
from textx import metamodel_for_language
from textx.exceptions import TextXError
import os.path
import pytest


current_dir = os.path.dirname(__file__)


def test_issue196_errors_in_scope_provider_and_obj_processor():
mmF = metamodel_for_language('flow-dsl')

# print("-----------------------------------1---")
# print(metamodel_for_language('flow-dsl').
# _tx_model_repository.all_models.filename_to_model.keys())

cached_model_count = len(
metamodel_for_language('flow-dsl').
_tx_model_repository.all_models.filename_to_model)

with pytest.raises(TextXError,
match=r'.*types must be lowercase.*'):
mmF.model_from_file(os.path.join(current_dir,
'models',
'MODEL_WITH_IMPORT_ERROR.eflow'))

# print("-----------------------------------2---")
# print(metamodel_for_language('flow-dsl').
# _tx_model_repository.all_models.filename_to_model.keys())

# error while reading, no file cached (cached_model_count unchanged)!
assert cached_model_count == len(
metamodel_for_language('flow-dsl').
_tx_model_repository.all_models.filename_to_model)

with pytest.raises(TextXError,
match=r'.*Unknown object "A" of class "Algo".*'):
print("loading MODEL_WITH_TYPE_ERROR")
mmF.model_from_file(os.path.join(current_dir,
'models',
'MODEL_WITH_TYPE_ERROR.eflow'))

# print("-----------------------------------3---")
# print(metamodel_for_language('flow-dsl').
# _tx_model_repository.all_models.filename_to_model.keys())

# error while reading, no file cached! (cached_model_count unchanged)!
assert cached_model_count == len(
metamodel_for_language('flow-dsl').
_tx_model_repository.all_models.filename_to_model)

with pytest.raises(TextXError,
match=r'.*types must be lowercase.*'):
mmF.model_from_file(os.path.join(current_dir,
'models',
'MODEL_WITH_IMPORT_ERROR.eflow'))

# error while reading, no file cached! (cached_model_count unchanged)!
assert cached_model_count == len(
metamodel_for_language('flow-dsl').
_tx_model_repository.all_models.filename_to_model)


def test_issue196_syntax_error_1():
mmF = metamodel_for_language('flow-dsl')

# print("-----------------------------------1---")
# print(metamodel_for_language('flow-dsl').
# _tx_model_repository.all_models.filename_to_model.keys())

cached_model_count = len(
metamodel_for_language('flow-dsl').
_tx_model_repository.all_models.filename_to_model)

with pytest.raises(TextXError,
match=r'.*error: Expected.*'):
mmF.model_from_file(
os.path.join(current_dir,
'models',
'MODEL_WITH_IMPORT_SYNTAX_ERROR.eflow'))

# print("-----------------------------------2---")
# print(metamodel_for_language('flow-dsl').
# _tx_model_repository.all_models.filename_to_model.keys())

# error while reading, no file cached!
assert cached_model_count == len(
metamodel_for_language('flow-dsl').
_tx_model_repository.all_models.filename_to_model)


def test_issue196_syntax_error_2():
mmF = metamodel_for_language('flow-dsl')

# print("-----------------------------------1---")
# print(metamodel_for_language('flow-dsl').
# _tx_model_repository.all_models.filename_to_model.keys())

cached_model_count = len(
metamodel_for_language('flow-dsl').
_tx_model_repository.all_models.filename_to_model)

with pytest.raises(TextXError,
match=r'.*error: Expected.*'):
mmF.model_from_file(os.path.join(current_dir,
'models',
'MODEL_WITH_SYNTAX_ERROR.eflow'))

# print("-----------------------------------2---")
# print(metamodel_for_language('flow-dsl').
# _tx_model_repository.all_models.filename_to_model.keys())

# error while reading, no file cached! (cached_model_count unchanged)!
assert cached_model_count == len(
metamodel_for_language('flow-dsl').
_tx_model_repository.all_models.filename_to_model)
2 changes: 1 addition & 1 deletion textx/metamodel.py
Original file line number Diff line number Diff line change
Expand Up @@ -586,7 +586,7 @@ def _pre_ref_resolution_callback(other_model):
from textx.scoping import GlobalModelRepository
filename = other_model._tx_filename
assert filename
# print("METAMODEL PRE-CALLBACK{}".format(filename))
# print("METAMODEL PRE-CALLBACK => {}".format(filename))
other_model._tx_model_repository = GlobalModelRepository(
self._tx_model_repository.all_models)
self._tx_model_repository.all_models\
Expand Down

0 comments on commit 089755d

Please sign in to comment.