expressir 1.2.5-aarch64-linux → 1.2.6-aarch64-linux
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/rake.yml +0 -12
- data/README.adoc +8 -0
- data/lib/expressir/express/2.7/express_parser.so +0 -0
- data/lib/expressir/express/3.0/express_parser.so +0 -0
- data/lib/expressir/express/3.1/express_parser.so +0 -0
- data/lib/expressir/express/parser.rb +3 -4
- data/lib/expressir/version.rb +1 -1
- data/rakelib/antlr4-native.rake +122 -24
- data/spec/acceptance/version_spec.rb +10 -0
- data/spec/expressir/express/cache_spec.rb +15 -0
- data/spec/expressir/express/formatter_spec.rb +38 -0
- data/spec/expressir/express/parser_spec.rb +30 -0
- data/spec/expressir/model/model_element_spec.rb +44 -0
- data/spec/spec_helper.rb +7 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '01769cae2fc1e22f5bb8e52524bf7d0a0285d105f85b34c98b5381bee71ac97e'
|
4
|
+
data.tar.gz: 33619ec66228a87dab43e3131fce3e3295a12836c67a8133d1f60c6275a8b8e7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e60c3325e809f664d9cca4a5e47af6a19ea60ceb3648ff0ab5b65a37ba094ee3f5a2708fcf188b5fb8695ff9a1884541709790f1ba6d50e400376b80bcda6bf9
|
7
|
+
data.tar.gz: c4394cef99759fc793ee902ffe3724d96acf99f0b96a2acee877006f6080c173bfc28b556de7e510149b5a6b8a7218e754d95934ea5972f8dc48130a6b11e48a
|
data/.github/workflows/rake.yml
CHANGED
@@ -29,23 +29,11 @@ jobs:
|
|
29
29
|
rake:
|
30
30
|
name: test on ruby-${{ matrix.ruby }} ${{ matrix.os }}
|
31
31
|
runs-on: ${{ matrix.os }}
|
32
|
-
continue-on-error: ${{ matrix.experimental }}
|
33
32
|
strategy:
|
34
33
|
fail-fast: false
|
35
34
|
matrix:
|
36
35
|
ruby: [ '3.1', '3.0', '2.7' ]
|
37
36
|
os: [ ubuntu-latest, windows-latest, macos-latest ]
|
38
|
-
experimental: [ false ]
|
39
|
-
include:
|
40
|
-
- ruby: 'head'
|
41
|
-
os: 'ubuntu-latest'
|
42
|
-
experimental: true
|
43
|
-
- ruby: 'head'
|
44
|
-
os: 'windows-latest'
|
45
|
-
experimental: true
|
46
|
-
- ruby: 'head'
|
47
|
-
os: 'macos-latest'
|
48
|
-
experimental: true
|
49
37
|
|
50
38
|
steps:
|
51
39
|
- name: Checkout
|
data/README.adoc
CHANGED
@@ -75,6 +75,14 @@ Run the test suite
|
|
75
75
|
bin/rspec
|
76
76
|
----
|
77
77
|
|
78
|
+
=== Grammar updates
|
79
|
+
EXPRESS grammar is lined as git submodule to ext/express-grammar
|
80
|
+
Shoudl you update it, run ```rake generate```. This command will generate source code for updated native extension using antlr4-native gem.
|
81
|
+
Please note that we create several classes on top of antlr4-native output so using embedded rake task is a real requirement.
|
82
|
+
|
83
|
+
When new extension is gnerated and tested plase check in updated C++ files to git (```rake generate``` is NOT a CI step,
|
84
|
+
extension source files are pulled from the repo).
|
85
|
+
|
78
86
|
== Installation
|
79
87
|
|
80
88
|
Add this line to your application's `Gemfile`:
|
Binary file
|
Binary file
|
Binary file
|
@@ -31,13 +31,12 @@ module Expressir
|
|
31
31
|
# @param [Boolean] include_source attach original source code to model elements
|
32
32
|
# @return [Model::Repository]
|
33
33
|
def self.from_file(file, skip_references: nil, include_source: nil)
|
34
|
-
@input = File.read(file)
|
35
34
|
|
36
35
|
# An important note re memory management
|
37
|
-
# parse, syntax, visitor methods return complex tree structures created in
|
36
|
+
# parse, syntax, visitor methods return complex tree structures created in native (C++) extension
|
38
37
|
# visit method references nodes and leaves of this structures but it is totally untransparent for Ruby GarbageCllector
|
39
|
-
# so in this class we keep those C++ structure marked for GC so
|
40
|
-
@parser = ::ExpressParser::
|
38
|
+
# so in this class we keep those C++ structure marked for GC so they are not freed
|
39
|
+
@parser = ::ExpressParser::ParserExt.new(file.to_s)
|
41
40
|
@parse_tree = @parser.syntax()
|
42
41
|
|
43
42
|
@visitor = Visitor.new(@parser.tokens, include_source: include_source)
|
data/lib/expressir/version.rb
CHANGED
data/rakelib/antlr4-native.rake
CHANGED
@@ -2,34 +2,138 @@ require "fileutils"
|
|
2
2
|
require "antlr4-native"
|
3
3
|
require "rake"
|
4
4
|
|
5
|
-
def
|
6
|
-
|
7
|
-
i
|
8
|
-
parser_source_lines[i + 6] += <<~CPP.split("\n").map { |x| x == "" ? x : " #{x}" }.join("\n")
|
5
|
+
def create_class_declarations(parser_source_lines)
|
6
|
+
i = parser_source_lines.index { |x| x == "Class rb_cContextProxy;" }
|
7
|
+
parser_source_lines[i] += <<~CPP.split("\n").map { |x| x == "" ? x : x.to_s }.join("\n")
|
9
8
|
|
10
|
-
|
11
|
-
|
9
|
+
Class rb_cParserExt;
|
10
|
+
Class rb_cTokenExt;
|
12
11
|
|
13
|
-
|
12
|
+
CPP
|
13
|
+
end
|
14
|
+
|
15
|
+
def create_tp_class_definition(parser_source_lines)
|
16
|
+
i = parser_source_lines.index { |x| x == "class ContextProxy {" }
|
17
|
+
parser_source_lines[i - 2] += <<~CPP.split("\n").map { |x| x == "" ? x : x.to_s }.join("\n")
|
18
|
+
|
19
|
+
|
20
|
+
class TokenProxy : public Object {
|
21
|
+
public:
|
22
|
+
TokenProxy(Token* orig) {
|
23
|
+
this -> orig = orig;
|
24
|
+
}
|
25
|
+
|
26
|
+
std::string getText() {
|
27
|
+
return orig->getText();
|
28
|
+
}
|
29
|
+
|
30
|
+
size_t getChannel() {
|
31
|
+
return orig->getChannel();
|
32
|
+
}
|
33
|
+
|
34
|
+
size_t getTokenIndex() {
|
35
|
+
return orig->getTokenIndex();
|
36
|
+
}
|
37
|
+
|
38
|
+
private:
|
39
|
+
Token * orig = nullptr;
|
40
|
+
};
|
41
|
+
|
42
|
+
CPP
|
43
|
+
end
|
44
|
+
|
45
|
+
def create_pp_class_definition(parser_source_lines)
|
46
|
+
i = parser_source_lines.index { |x| x == "extern \"C\"" }
|
47
|
+
parser_source_lines[i - 2] += <<~CPP.split("\n").map { |x| x == "" ? x : x.to_s }.join("\n")
|
48
|
+
|
49
|
+
class ParserProxyExt : public Object {
|
50
|
+
public:
|
51
|
+
ParserProxyExt(Object self, string file) {
|
52
|
+
ifstream stream;
|
53
|
+
stream.open(file);
|
54
|
+
input = new ANTLRInputStream(stream);
|
55
|
+
lexer = new ExpressLexer(input);
|
56
|
+
tokens = new CommonTokenStream(lexer);
|
57
|
+
parser = new ExpressParser(tokens);
|
58
|
+
stream.close();
|
59
|
+
};
|
60
|
+
|
61
|
+
~ParserProxyExt() {
|
62
|
+
delete parser;
|
63
|
+
delete tokens;
|
64
|
+
delete lexer;
|
65
|
+
delete input;
|
66
|
+
}
|
67
|
+
|
68
|
+
Object syntax() {
|
69
|
+
auto ctx = parser -> syntax();
|
70
|
+
|
71
|
+
SyntaxContextProxy proxy((ExpressParser::SyntaxContext*) ctx);
|
72
|
+
return detail::To_Ruby<SyntaxContextProxy>().convert(proxy);
|
73
|
+
}
|
14
74
|
|
15
|
-
|
16
|
-
|
17
|
-
|
75
|
+
Array getTokens() {
|
76
|
+
Array a;
|
77
|
+
for (auto token : tokens -> getTokens()) {
|
78
|
+
a.push(new TokenProxy(token));
|
79
|
+
}
|
80
|
+
return a;
|
81
|
+
}
|
82
|
+
|
83
|
+
Object visit(VisitorProxy* visitor) {
|
84
|
+
auto result = visitor -> visit(parser -> syntax());
|
85
|
+
|
86
|
+
lexer -> reset();
|
87
|
+
parser -> reset();
|
88
|
+
|
89
|
+
try {
|
90
|
+
return std::any_cast<Object>(result);
|
91
|
+
} catch(std::bad_cast) {
|
92
|
+
return Qnil;
|
93
|
+
}
|
94
|
+
}
|
95
|
+
|
96
|
+
private:
|
97
|
+
ANTLRInputStream* input;
|
98
|
+
ExpressLexer* lexer;
|
99
|
+
CommonTokenStream* tokens;
|
100
|
+
ExpressParser* parser;
|
101
|
+
};
|
18
102
|
|
19
|
-
return a;
|
20
|
-
}
|
21
103
|
|
22
104
|
CPP
|
23
105
|
end
|
24
106
|
|
25
|
-
def
|
26
|
-
i = parser_source_lines.index { |x| x ==
|
27
|
-
parser_source_lines[i] += <<~CPP.split("\n").map { |x| x == "" ? x : "
|
107
|
+
def create_class_api(parser_source_lines)
|
108
|
+
i = parser_source_lines.index { |x| x == " .define_method(\"visit\", &ParserProxy::visit, Return().keepAlive());" }
|
109
|
+
parser_source_lines[i] += <<~CPP.split("\n").map { |x| x == "" ? x : " #{x}" }.join("\n")
|
110
|
+
|
111
|
+
|
112
|
+
rb_cTokenExt = define_class_under<TokenProxy>(rb_mExpressParser, "TokenExt")
|
113
|
+
.define_method("text", &TokenProxy::getText)
|
114
|
+
.define_method("channel", &TokenProxy::getChannel)
|
115
|
+
.define_method("token_index", &TokenProxy::getTokenIndex);
|
116
|
+
|
117
|
+
rb_cParserExt = define_class_under<ParserProxyExt>(rb_mExpressParser, "ParserExt")
|
118
|
+
.define_constructor(Constructor<ParserProxyExt, Object, string>())
|
119
|
+
.define_method("syntax", &ParserProxyExt::syntax, Return().keepAlive())
|
120
|
+
.define_method("tokens", &ParserProxyExt::getTokens)
|
121
|
+
.define_method("visit", &ParserProxyExt::visit, Return().keepAlive());
|
28
122
|
|
29
|
-
.define_method("tokens", &ParserProxy::getTokens)
|
30
123
|
CPP
|
31
124
|
end
|
32
125
|
|
126
|
+
def generate_extended_parser
|
127
|
+
# Generate extended parser that provide Ruby access to token stream
|
128
|
+
parser_source_file = File.join("ext", "express-parser", "express_parser.cpp")
|
129
|
+
parser_source_lines = File.read(parser_source_file).split("\n")
|
130
|
+
create_class_declarations(parser_source_lines)
|
131
|
+
create_tp_class_definition(parser_source_lines)
|
132
|
+
create_pp_class_definition(parser_source_lines)
|
133
|
+
create_class_api(parser_source_lines)
|
134
|
+
File.write(parser_source_file, "#{parser_source_lines.join("\n")}\n")
|
135
|
+
end
|
136
|
+
|
33
137
|
desc "Generate parser (Usage: 'rake generate <grammar_file>')"
|
34
138
|
task "generate" do
|
35
139
|
grammar_file = ARGV[1]
|
@@ -38,7 +142,6 @@ task "generate" do
|
|
38
142
|
end
|
39
143
|
|
40
144
|
puts "Generating parser from '#{grammar_file}'"
|
41
|
-
|
42
145
|
# ANTLR does weird things if the grammar file isn't in the current working directory
|
43
146
|
temp_grammar_file = File.join(FileUtils.pwd, File.basename(grammar_file))
|
44
147
|
FileUtils.cp(grammar_file, temp_grammar_file)
|
@@ -51,13 +154,8 @@ task "generate" do
|
|
51
154
|
)
|
52
155
|
generator.generate
|
53
156
|
|
54
|
-
|
55
|
-
|
56
|
-
parser_source_lines = File.read(parser_source_file).split("\n")
|
57
|
-
create_tokens_api(parser_source_lines)
|
58
|
-
create_tokens_method(parser_source_lines)
|
59
|
-
File.write(parser_source_file, "#{parser_source_lines.join("\n")}\n")
|
60
|
-
|
157
|
+
puts "Generating extended parser"
|
158
|
+
generate_extended_parser
|
61
159
|
# cleanup
|
62
160
|
FileUtils.rm(temp_grammar_file)
|
63
161
|
end
|
@@ -5,6 +5,11 @@ RSpec.describe "Expressir" do
|
|
5
5
|
it "has a version number" do |example|
|
6
6
|
print "\n[#{example.description}] "
|
7
7
|
expect(Expressir::VERSION).not_to be nil
|
8
|
+
|
9
|
+
# Validate Object Space
|
10
|
+
GC.start
|
11
|
+
GC.verify_compaction_references
|
12
|
+
GC.verify_internal_consistency
|
8
13
|
end
|
9
14
|
|
10
15
|
it "displays the current verison" do |example|
|
@@ -12,6 +17,11 @@ RSpec.describe "Expressir" do
|
|
12
17
|
command = %w(version)
|
13
18
|
output = capture_stdout { Expressir::Cli.start(command) }
|
14
19
|
expect(output).to include("Version #{Expressir::VERSION}")
|
20
|
+
|
21
|
+
# Validate Object Space
|
22
|
+
GC.start
|
23
|
+
GC.verify_compaction_references
|
24
|
+
GC.verify_internal_consistency
|
15
25
|
end
|
16
26
|
end
|
17
27
|
end
|
@@ -24,6 +24,11 @@ RSpec.describe Expressir::Express::Cache do
|
|
24
24
|
temp_file.close
|
25
25
|
temp_file.unlink
|
26
26
|
end
|
27
|
+
|
28
|
+
# Validate Object Space
|
29
|
+
GC.start
|
30
|
+
GC.verify_compaction_references
|
31
|
+
GC.verify_internal_consistency
|
27
32
|
end
|
28
33
|
end
|
29
34
|
|
@@ -44,6 +49,11 @@ RSpec.describe Expressir::Express::Cache do
|
|
44
49
|
temp_file.close
|
45
50
|
temp_file.unlink
|
46
51
|
end
|
52
|
+
|
53
|
+
# Validate Object Space
|
54
|
+
GC.start
|
55
|
+
GC.verify_compaction_references
|
56
|
+
GC.verify_internal_consistency
|
47
57
|
end
|
48
58
|
|
49
59
|
it "fails parsing a file from a different Expressir version" do |example|
|
@@ -62,6 +72,11 @@ RSpec.describe Expressir::Express::Cache do
|
|
62
72
|
temp_file.close
|
63
73
|
temp_file.unlink
|
64
74
|
end
|
75
|
+
|
76
|
+
# Validate Object Space
|
77
|
+
GC.start
|
78
|
+
GC.verify_compaction_references
|
79
|
+
GC.verify_internal_consistency
|
65
80
|
end
|
66
81
|
end
|
67
82
|
end
|
@@ -19,6 +19,11 @@ RSpec.describe Expressir::Express::Formatter do
|
|
19
19
|
expected_result = File.read(formatted_exp_file)
|
20
20
|
|
21
21
|
expect(result).to eq(expected_result)
|
22
|
+
|
23
|
+
# Validate Object Space
|
24
|
+
GC.start
|
25
|
+
GC.verify_compaction_references
|
26
|
+
GC.verify_internal_consistency
|
22
27
|
end
|
23
28
|
|
24
29
|
it "exports an object (multiple.exp)" do |example|
|
@@ -33,6 +38,9 @@ RSpec.describe Expressir::Express::Formatter do
|
|
33
38
|
expected_result = File.read(formatted_exp_file)
|
34
39
|
|
35
40
|
expect(result).to eq(expected_result)
|
41
|
+
GC.start
|
42
|
+
GC.verify_compaction_references
|
43
|
+
GC.verify_internal_consistency
|
36
44
|
end
|
37
45
|
|
38
46
|
it "exports an object (remark.exp)" do |example|
|
@@ -47,6 +55,11 @@ RSpec.describe Expressir::Express::Formatter do
|
|
47
55
|
expected_result = File.read(formatted_exp_file)
|
48
56
|
|
49
57
|
expect(result).to eq(expected_result)
|
58
|
+
|
59
|
+
# Validate Object Space
|
60
|
+
GC.start
|
61
|
+
GC.verify_compaction_references
|
62
|
+
GC.verify_internal_consistency
|
50
63
|
end
|
51
64
|
|
52
65
|
it "exports an object (syntax.exp)" do |example|
|
@@ -61,6 +74,11 @@ RSpec.describe Expressir::Express::Formatter do
|
|
61
74
|
expected_result = File.read(formatted_exp_file)
|
62
75
|
|
63
76
|
expect(result).to eq(expected_result)
|
77
|
+
|
78
|
+
# Validate Object Space
|
79
|
+
GC.start
|
80
|
+
GC.verify_compaction_references
|
81
|
+
GC.verify_internal_consistency
|
64
82
|
end
|
65
83
|
|
66
84
|
it "exports an object with schema head formatter (syntax.exp)" do |example|
|
@@ -78,6 +96,11 @@ RSpec.describe Expressir::Express::Formatter do
|
|
78
96
|
expected_result = File.read(formatted_exp_file)
|
79
97
|
|
80
98
|
expect(result).to eq(expected_result)
|
99
|
+
|
100
|
+
# Validate Object Space
|
101
|
+
GC.start
|
102
|
+
GC.verify_compaction_references
|
103
|
+
GC.verify_internal_consistency
|
81
104
|
end
|
82
105
|
|
83
106
|
it "exports an object with hyperlink formatter (syntax.exp)" do |example|
|
@@ -95,6 +118,11 @@ RSpec.describe Expressir::Express::Formatter do
|
|
95
118
|
expected_result = File.read(formatted_exp_file)
|
96
119
|
|
97
120
|
expect(result).to eq(expected_result)
|
121
|
+
|
122
|
+
# Validate Object Space
|
123
|
+
GC.start
|
124
|
+
GC.verify_compaction_references
|
125
|
+
GC.verify_internal_consistency
|
98
126
|
end
|
99
127
|
|
100
128
|
it "exports an object with hyperlink formatter (multiple.exp)" do |example|
|
@@ -112,6 +140,11 @@ RSpec.describe Expressir::Express::Formatter do
|
|
112
140
|
expected_result = File.read(formatted_exp_file)
|
113
141
|
|
114
142
|
expect(result).to eq(expected_result)
|
143
|
+
|
144
|
+
# Validate Object Space
|
145
|
+
GC.start
|
146
|
+
GC.verify_compaction_references
|
147
|
+
GC.verify_internal_consistency
|
115
148
|
end
|
116
149
|
|
117
150
|
it "exports an object with schema head and hyperlink formatter (multiple.exp)" do |example|
|
@@ -130,6 +163,11 @@ RSpec.describe Expressir::Express::Formatter do
|
|
130
163
|
expected_result = File.read(formatted_exp_file)
|
131
164
|
|
132
165
|
expect(result).to eq(expected_result)
|
166
|
+
|
167
|
+
# Validate Object Space
|
168
|
+
GC.start
|
169
|
+
GC.verify_compaction_references
|
170
|
+
GC.verify_internal_consistency
|
133
171
|
end
|
134
172
|
end
|
135
173
|
end
|
@@ -15,6 +15,11 @@ RSpec.describe Expressir::Express::Parser do
|
|
15
15
|
expected_result = File.read(yaml_file)
|
16
16
|
|
17
17
|
expect(result).to eq(expected_result)
|
18
|
+
|
19
|
+
# Validate Object Space
|
20
|
+
GC.start
|
21
|
+
GC.verify_compaction_references
|
22
|
+
GC.verify_internal_consistency
|
18
23
|
end
|
19
24
|
|
20
25
|
it "parses a file (multiple.exp)" do |example|
|
@@ -28,6 +33,11 @@ RSpec.describe Expressir::Express::Parser do
|
|
28
33
|
expected_result = File.read(yaml_file)
|
29
34
|
|
30
35
|
expect(result).to eq(expected_result)
|
36
|
+
|
37
|
+
# Validate Object Space
|
38
|
+
GC.start
|
39
|
+
GC.verify_compaction_references
|
40
|
+
GC.verify_internal_consistency
|
31
41
|
end
|
32
42
|
|
33
43
|
it "parses a file (syntax.exp)" do |example|
|
@@ -41,6 +51,11 @@ RSpec.describe Expressir::Express::Parser do
|
|
41
51
|
expected_result = File.read(yaml_file)
|
42
52
|
|
43
53
|
expect(result).to eq(expected_result)
|
54
|
+
|
55
|
+
# Validate Object Space
|
56
|
+
GC.start
|
57
|
+
GC.verify_compaction_references
|
58
|
+
GC.verify_internal_consistency
|
44
59
|
end
|
45
60
|
|
46
61
|
it "parses a file (remark.exp)" do |example|
|
@@ -54,6 +69,11 @@ RSpec.describe Expressir::Express::Parser do
|
|
54
69
|
expected_result = File.read(yaml_file)
|
55
70
|
|
56
71
|
expect(result).to eq(expected_result)
|
72
|
+
|
73
|
+
# Validate Object Space
|
74
|
+
GC.start
|
75
|
+
GC.verify_compaction_references
|
76
|
+
GC.verify_internal_consistency
|
57
77
|
end
|
58
78
|
|
59
79
|
it "parses a file including original source (multiple.exp)" do |example|
|
@@ -74,6 +94,11 @@ RSpec.describe Expressir::Express::Parser do
|
|
74
94
|
stop_index = input.index("END_ENTITY;") + "END_ENTITY;".length - 1
|
75
95
|
expected_result = input[start_index..stop_index]
|
76
96
|
expect(entity.source).to eq(expected_result)
|
97
|
+
|
98
|
+
# Validate Object Space
|
99
|
+
GC.start
|
100
|
+
GC.verify_compaction_references
|
101
|
+
GC.verify_internal_consistency
|
77
102
|
end
|
78
103
|
end
|
79
104
|
|
@@ -99,6 +124,11 @@ RSpec.describe Expressir::Express::Parser do
|
|
99
124
|
expect(schemas[3].id).to eq("multiple_schema3")
|
100
125
|
expect(schemas[4].file).to eq(exp_files[1].to_s)
|
101
126
|
expect(schemas[4].id).to eq("multiple_schema4")
|
127
|
+
|
128
|
+
# Validate Object Space
|
129
|
+
GC.start
|
130
|
+
GC.verify_compaction_references
|
131
|
+
GC.verify_internal_consistency
|
102
132
|
end
|
103
133
|
end
|
104
134
|
end
|
@@ -17,6 +17,11 @@ RSpec.describe Expressir::Model::ModelElement do
|
|
17
17
|
expected_result = File.read(yaml_file)
|
18
18
|
|
19
19
|
expect(result).to eq(expected_result)
|
20
|
+
|
21
|
+
# Validate Object Space
|
22
|
+
GC.start
|
23
|
+
GC.verify_compaction_references
|
24
|
+
GC.verify_internal_consistency
|
20
25
|
end
|
21
26
|
end
|
22
27
|
|
@@ -32,6 +37,11 @@ RSpec.describe Expressir::Model::ModelElement do
|
|
32
37
|
expected_result = File.read(yaml_file)
|
33
38
|
|
34
39
|
expect(result).to eq(expected_result)
|
40
|
+
|
41
|
+
# Validate Object Space
|
42
|
+
GC.start
|
43
|
+
GC.verify_compaction_references
|
44
|
+
GC.verify_internal_consistency
|
35
45
|
end
|
36
46
|
|
37
47
|
it "parses an object (multiple.yaml)" do |example|
|
@@ -45,6 +55,11 @@ RSpec.describe Expressir::Model::ModelElement do
|
|
45
55
|
expected_result = File.read(yaml_file)
|
46
56
|
|
47
57
|
expect(result).to eq(expected_result)
|
58
|
+
|
59
|
+
# Validate Object Space
|
60
|
+
GC.start
|
61
|
+
GC.verify_compaction_references
|
62
|
+
GC.verify_internal_consistency
|
48
63
|
end
|
49
64
|
|
50
65
|
it "parses an object (syntax.yaml)" do |example|
|
@@ -58,6 +73,10 @@ RSpec.describe Expressir::Model::ModelElement do
|
|
58
73
|
expected_result = File.read(yaml_file)
|
59
74
|
|
60
75
|
expect(result).to eq(expected_result)
|
76
|
+
|
77
|
+
GC.start
|
78
|
+
GC.verify_compaction_references
|
79
|
+
GC.verify_internal_consistency
|
61
80
|
end
|
62
81
|
|
63
82
|
it "parses an object (remark.yaml)" do |example|
|
@@ -71,6 +90,11 @@ RSpec.describe Expressir::Model::ModelElement do
|
|
71
90
|
expected_result = File.read(yaml_file)
|
72
91
|
|
73
92
|
expect(result).to eq(expected_result)
|
93
|
+
|
94
|
+
# Validate Object Space
|
95
|
+
GC.start
|
96
|
+
GC.verify_compaction_references
|
97
|
+
GC.verify_internal_consistency
|
74
98
|
end
|
75
99
|
end
|
76
100
|
|
@@ -88,6 +112,11 @@ RSpec.describe Expressir::Model::ModelElement do
|
|
88
112
|
# schema scope
|
89
113
|
schema = repo.schemas.first
|
90
114
|
expect(schema.find("empty_entity")).to be_instance_of(Expressir::Model::Declarations::Entity)
|
115
|
+
|
116
|
+
# Validate Object Space
|
117
|
+
GC.start
|
118
|
+
GC.verify_compaction_references
|
119
|
+
GC.verify_internal_consistency
|
91
120
|
end
|
92
121
|
|
93
122
|
it "finds an object (multiple.exp)" do |example|
|
@@ -111,6 +140,11 @@ RSpec.describe Expressir::Model::ModelElement do
|
|
111
140
|
expect(schema.find("attribute_entity2")).to be_instance_of(Expressir::Model::Declarations::Entity)
|
112
141
|
expect(schema.find("attribute_entity3")).to be_instance_of(Expressir::Model::Declarations::Entity)
|
113
142
|
expect(schema.find("attribute_entity4")).to be_instance_of(Expressir::Model::Declarations::Entity)
|
143
|
+
|
144
|
+
# Validate Object Space
|
145
|
+
GC.start
|
146
|
+
GC.verify_compaction_references
|
147
|
+
GC.verify_internal_consistency
|
114
148
|
end
|
115
149
|
|
116
150
|
it "finds an object (syntax.exp)" do |example|
|
@@ -126,6 +160,11 @@ RSpec.describe Expressir::Model::ModelElement do
|
|
126
160
|
# schema scope
|
127
161
|
schema = repo.schemas.first
|
128
162
|
expect(schema.find("empty_entity")).to be_instance_of(Expressir::Model::Declarations::Entity)
|
163
|
+
|
164
|
+
# Validate Object Space
|
165
|
+
GC.start
|
166
|
+
GC.verify_compaction_references
|
167
|
+
GC.verify_internal_consistency
|
129
168
|
end
|
130
169
|
|
131
170
|
it "finds an object (remark.exp)" do |example|
|
@@ -269,6 +308,11 @@ RSpec.describe Expressir::Model::ModelElement do
|
|
269
308
|
expect(entity.find("remark_type.wr:WR1")).to be_instance_of(Expressir::Model::Declarations::WhereRule)
|
270
309
|
expect(entity.find("remark_type.IP1")).to be_instance_of(Expressir::Model::Declarations::RemarkItem)
|
271
310
|
expect(entity.find("remark_type.ip:IP1")).to be_instance_of(Expressir::Model::Declarations::RemarkItem)
|
311
|
+
|
312
|
+
# Validate Object Space
|
313
|
+
GC.start
|
314
|
+
GC.verify_compaction_references
|
315
|
+
GC.verify_internal_consistency
|
272
316
|
end
|
273
317
|
end
|
274
318
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: expressir
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.6
|
5
5
|
platform: aarch64-linux
|
6
6
|
authors:
|
7
7
|
- Ribose Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-05-
|
11
|
+
date: 2022-05-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|