rgen 0.4.2 → 0.4.3
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +7 -0
- data/lib/rgen/metamodel_builder.rb +5 -4
- data/lib/rgen/metamodel_builder.rb.bak +196 -0
- data/lib/rgen/metamodel_builder/builder_extensions.rb +51 -38
- data/lib/rgen/metamodel_builder/builder_extensions.rb.bak +437 -0
- data/lib/rgen/metamodel_builder/builder_runtime.rb +2 -20
- data/lib/rgen/metamodel_builder/builder_runtime.rb.bak +73 -0
- data/lib/rgen/name_helper.rb.bak +37 -0
- data/lib/rgen/template_language.rb +8 -0
- data/lib/rgen/template_language.rb.bak +289 -0
- data/lib/rgen/template_language/directory_template_container.rb +11 -0
- data/lib/rgen/template_language/directory_template_container.rb.bak +69 -0
- data/lib/rgen/template_language/output_handler.rb +3 -2
- data/lib/rgen/template_language/output_handler.rb.bak +88 -0
- data/lib/rgen/template_language/template_container.rb +5 -4
- data/lib/rgen/template_language/template_container.rb.bak +196 -0
- data/lib/rgen/transformer.rb.bak +381 -0
- data/test/environment_test.rb.bak +52 -0
- data/test/metamodel_builder_test.rb +6 -0
- data/test/metamodel_builder_test.rb.bak +443 -0
- data/test/metamodel_roundtrip_test/TestModel_Regenerated.rb +34 -32
- data/test/metamodel_roundtrip_test/houseMetamodel_Regenerated.ecore +58 -58
- data/test/output_handler_test.rb +8 -0
- data/test/output_handler_test.rb.bak +50 -0
- data/test/template_language_test.rb +23 -0
- data/test/template_language_test.rb.bak +72 -0
- data/test/template_language_test/indentStringTestDefaultIndent.out +1 -0
- data/test/template_language_test/indentStringTestTabIndent.out +1 -0
- data/test/template_language_test/templates/indent_string_test.tpl +12 -0
- data/test/template_language_test/templates/null_context_test.tpl +12 -0
- data/test/transformer_test.rb.bak +223 -0
- metadata +65 -48
- data/lib/rgen/environment.rb.bak +0 -42
@@ -6,52 +6,54 @@ module HouseMetamodel
|
|
6
6
|
|
7
7
|
SexEnum = Enum.new(:name => 'SexEnum', :literals =>[ :male, :female ])
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
class MeetingPlace < RGen::MetamodelBuilder::MMBase
|
10
|
+
annotation :source => "testmodel", :details => {'complexity' => '1', 'date_created' => '2006-07-12 08:40:46', 'date_modified' => '2006-07-12 08:44:02', 'ea_ntype' => '0', 'ea_stype' => 'Class', 'gentype' => 'Java', 'isSpecification' => 'false', 'package' => 'EAPK_A1B83D59_CAE1_422c_BA5F_D3624D7156AD', 'package_name' => 'HouseMetamodel', 'phase' => '1.0', 'status' => 'Proposed', 'style' => 'BackColor=-1;BorderColor=-1;BorderWidth=-1;FontColor=-1;VSwimLanes=0;HSwimLanes=0;BorderStyle=0;', 'tagged' => '0', 'version' => '1.0'}
|
11
|
+
end
|
12
12
|
|
13
|
+
class House < RGen::MetamodelBuilder::MMBase
|
14
|
+
annotation 'complexity' => '1', 'date_created' => '2005-09-16 19:52:18', 'date_modified' => '2006-02-28 08:29:19', 'ea_ntype' => '0', 'ea_stype' => 'Class', 'gentype' => 'Java', 'isSpecification' => 'false', 'package' => 'EAPK_A1B83D59_CAE1_422c_BA5F_D3624D7156AD', 'package_name' => 'HouseMetamodel', 'phase' => '1.0', 'status' => 'Proposed', 'stereotype' => 'dummy', 'style' => 'BackColor=-1;BorderColor=-1;BorderWidth=-1;FontColor=-1;VSwimLanes=0;HSwimLanes=0;BorderStyle=0;', 'tagged' => '0', 'version' => '1.0'
|
15
|
+
has_attr 'size', Integer
|
16
|
+
has_attr 'module', String
|
17
|
+
has_attr 'address', String, :changeable => false do
|
18
|
+
annotation 'collection' => 'false', 'containment' => 'Not Specified', 'derived' => '0', 'duplicates' => '0', 'ea_guid' => '{A8DF581B-9AC6-4f75-AB48-8FAEDFC6E068}', 'lowerBound' => '1', 'ordered' => '0', 'position' => '0', 'styleex' => 'volatile=0;', 'type' => 'String', 'upperBound' => '1'
|
19
|
+
end
|
13
20
|
end
|
14
21
|
|
15
|
-
|
22
|
+
class Person < RGen::MetamodelBuilder::MMBase
|
23
|
+
annotation 'complexity' => '1', 'date_created' => '2006-06-27 08:34:23', 'date_modified' => '2006-06-27 08:34:26', 'ea_ntype' => '0', 'ea_stype' => 'Class', 'gentype' => 'Java', 'isSpecification' => 'false', 'package' => 'EAPK_A1B83D59_CAE1_422c_BA5F_D3624D7156AD', 'package_name' => 'HouseMetamodel', 'phase' => '1.0', 'status' => 'Proposed', 'style' => 'BackColor=-1;BorderColor=-1;BorderWidth=-1;FontColor=-1;VSwimLanes=0;HSwimLanes=0;BorderStyle=0;', 'tagged' => '0', 'version' => '1.0'
|
24
|
+
has_attr 'sex', HouseMetamodel::SexEnum
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
module Rooms
|
16
29
|
extend RGen::MetamodelBuilder::ModuleExtension
|
17
30
|
include RGen::MetamodelBuilder::DataTypes
|
18
31
|
|
19
|
-
end
|
20
|
-
end
|
21
32
|
|
22
|
-
class
|
23
|
-
|
24
|
-
|
25
|
-
has_attr 'module', String
|
26
|
-
has_attr 'address', String, :changeable => false do
|
27
|
-
annotation 'collection' => 'false', 'containment' => 'Not Specified', 'derived' => '0', 'duplicates' => '0', 'ea_guid' => '{A8DF581B-9AC6-4f75-AB48-8FAEDFC6E068}', 'lowerBound' => '1', 'ordered' => '0', 'position' => '0', 'styleex' => 'volatile=0;', 'type' => 'String', 'upperBound' => '1'
|
28
|
-
end
|
29
|
-
end
|
33
|
+
class Room < RGen::MetamodelBuilder::MMBase
|
34
|
+
annotation 'complexity' => '1', 'date_created' => '2005-09-16 19:52:28', 'date_modified' => '2006-06-22 21:15:25', 'ea_ntype' => '0', 'ea_stype' => 'Class', 'gentype' => 'Java', 'isSpecification' => 'false', 'package' => 'EAPK_F9D8C6E3_4DAD_4aa2_AD47_D0ABA4E93E08', 'package_name' => 'Rooms', 'phase' => '1.0', 'status' => 'Proposed', 'style' => 'BackColor=-1;BorderColor=-1;BorderWidth=-1;FontColor=-1;VSwimLanes=0;HSwimLanes=0;BorderStyle=0;', 'tagged' => '0', 'version' => '1.0'
|
35
|
+
end
|
30
36
|
|
31
|
-
class
|
32
|
-
|
33
|
-
|
34
|
-
end
|
37
|
+
class Kitchen < RGen::MetamodelBuilder::MMMultiple(HouseMetamodel::MeetingPlace, Room)
|
38
|
+
annotation 'complexity' => '1', 'date_created' => '2005-11-30 19:26:13', 'date_modified' => '2006-06-22 21:15:34', 'ea_ntype' => '0', 'ea_stype' => 'Class', 'gentype' => 'Java', 'isSpecification' => 'false', 'package' => 'EAPK_F9D8C6E3_4DAD_4aa2_AD47_D0ABA4E93E08', 'package_name' => 'Rooms', 'phase' => '1.0', 'status' => 'Proposed', 'style' => 'BackColor=-1;BorderColor=-1;BorderWidth=-1;FontColor=-1;VSwimLanes=0;HSwimLanes=0;BorderStyle=0;', 'tagged' => '0', 'version' => '1.0'
|
39
|
+
end
|
35
40
|
|
36
|
-
class
|
37
|
-
|
38
|
-
end
|
41
|
+
class Bathroom < Room
|
42
|
+
annotation 'complexity' => '1', 'date_created' => '2006-06-27 08:32:25', 'date_modified' => '2006-06-27 08:34:23', 'ea_ntype' => '0', 'ea_stype' => 'Class', 'gentype' => 'Java', 'isSpecification' => 'false', 'package' => 'EAPK_F9D8C6E3_4DAD_4aa2_AD47_D0ABA4E93E08', 'package_name' => 'Rooms', 'phase' => '1.0', 'status' => 'Proposed', 'style' => 'BackColor=-1;BorderColor=-1;BorderWidth=-1;FontColor=-1;VSwimLanes=0;HSwimLanes=0;BorderStyle=0;', 'tagged' => '0', 'version' => '1.0'
|
43
|
+
end
|
39
44
|
|
40
|
-
|
41
|
-
annotation 'complexity' => '1', 'date_created' => '2005-09-16 19:52:28', 'date_modified' => '2006-06-22 21:15:25', 'ea_ntype' => '0', 'ea_stype' => 'Class', 'gentype' => 'Java', 'isSpecification' => 'false', 'package' => 'EAPK_F9D8C6E3_4DAD_4aa2_AD47_D0ABA4E93E08', 'package_name' => 'Rooms', 'phase' => '1.0', 'status' => 'Proposed', 'style' => 'BackColor=-1;BorderColor=-1;BorderWidth=-1;FontColor=-1;VSwimLanes=0;HSwimLanes=0;BorderStyle=0;', 'tagged' => '0', 'version' => '1.0'
|
42
|
-
end
|
45
|
+
end
|
43
46
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
+
module DependingOnRooms
|
48
|
+
extend RGen::MetamodelBuilder::ModuleExtension
|
49
|
+
include RGen::MetamodelBuilder::DataTypes
|
47
50
|
|
48
|
-
class HouseMetamodel::Rooms::Kitchen < RGen::MetamodelBuilder::MMMultiple(HouseMetamodel::MeetingPlace, HouseMetamodel::Rooms::Room)
|
49
|
-
annotation 'complexity' => '1', 'date_created' => '2005-11-30 19:26:13', 'date_modified' => '2006-06-22 21:15:34', 'ea_ntype' => '0', 'ea_stype' => 'Class', 'gentype' => 'Java', 'isSpecification' => 'false', 'package' => 'EAPK_F9D8C6E3_4DAD_4aa2_AD47_D0ABA4E93E08', 'package_name' => 'Rooms', 'phase' => '1.0', 'status' => 'Proposed', 'style' => 'BackColor=-1;BorderColor=-1;BorderWidth=-1;FontColor=-1;VSwimLanes=0;HSwimLanes=0;BorderStyle=0;', 'tagged' => '0', 'version' => '1.0'
|
50
|
-
end
|
51
51
|
|
52
|
-
class
|
53
|
-
end
|
52
|
+
class RoomSub < HouseMetamodel::Rooms::Room
|
53
|
+
end
|
54
54
|
|
55
|
+
end
|
56
|
+
end
|
55
57
|
|
56
58
|
HouseMetamodel::House.has_one 'bathroom', HouseMetamodel::Rooms::Bathroom, :transient => true, :lowerBound => 1
|
57
59
|
HouseMetamodel::House.one_to_one 'kitchen', HouseMetamodel::Rooms::Kitchen, 'house', :lowerBound => 1, :opposite_lowerBound => 1 do
|
@@ -1,4 +1,42 @@
|
|
1
1
|
<ecore:EPackage xmi:version="2.0" name="HouseMetamodel" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore">
|
2
|
+
<eClassifiers name="SexEnum" instanceClassName="HouseMetamodel::SexEnum" ePackage="#/" xsi:type="ecore:EEnum">
|
3
|
+
<eLiterals name="male" xsi:type="ecore:EEnumLiteral" eEnum="#//SexEnum">
|
4
|
+
</eLiterals>
|
5
|
+
<eLiterals name="female" xsi:type="ecore:EEnumLiteral" eEnum="#//SexEnum">
|
6
|
+
</eLiterals>
|
7
|
+
</eClassifiers>
|
8
|
+
<eClassifiers name="MeetingPlace" abstract="false" instanceClassName="HouseMetamodel::MeetingPlace" interface="false" ePackage="#/" xsi:type="ecore:EClass">
|
9
|
+
<eAnnotations eModelElement="#//MeetingPlace" xsi:type="ecore:EAnnotation" source="testmodel">
|
10
|
+
<details xsi:type="ecore:EStringToStringMapEntry" value="Proposed" key="status">
|
11
|
+
</details>
|
12
|
+
<details xsi:type="ecore:EStringToStringMapEntry" value="2006-07-12 08:40:46" key="date_created">
|
13
|
+
</details>
|
14
|
+
<details xsi:type="ecore:EStringToStringMapEntry" value="Class" key="ea_stype">
|
15
|
+
</details>
|
16
|
+
<details xsi:type="ecore:EStringToStringMapEntry" value="2006-07-12 08:44:02" key="date_modified">
|
17
|
+
</details>
|
18
|
+
<details xsi:type="ecore:EStringToStringMapEntry" value="0" key="tagged">
|
19
|
+
</details>
|
20
|
+
<details xsi:type="ecore:EStringToStringMapEntry" value="0" key="ea_ntype">
|
21
|
+
</details>
|
22
|
+
<details xsi:type="ecore:EStringToStringMapEntry" value="1.0" key="version">
|
23
|
+
</details>
|
24
|
+
<details xsi:type="ecore:EStringToStringMapEntry" value="EAPK_A1B83D59_CAE1_422c_BA5F_D3624D7156AD" key="package">
|
25
|
+
</details>
|
26
|
+
<details xsi:type="ecore:EStringToStringMapEntry" value="false" key="isSpecification">
|
27
|
+
</details>
|
28
|
+
<details xsi:type="ecore:EStringToStringMapEntry" value="HouseMetamodel" key="package_name">
|
29
|
+
</details>
|
30
|
+
<details xsi:type="ecore:EStringToStringMapEntry" value="1" key="complexity">
|
31
|
+
</details>
|
32
|
+
<details xsi:type="ecore:EStringToStringMapEntry" value="1.0" key="phase">
|
33
|
+
</details>
|
34
|
+
<details xsi:type="ecore:EStringToStringMapEntry" value="BackColor=-1;BorderColor=-1;BorderWidth=-1;FontColor=-1;VSwimLanes=0;HSwimLanes=0;BorderStyle=0;" key="style">
|
35
|
+
</details>
|
36
|
+
<details xsi:type="ecore:EStringToStringMapEntry" value="Java" key="gentype">
|
37
|
+
</details>
|
38
|
+
</eAnnotations>
|
39
|
+
</eClassifiers>
|
2
40
|
<eClassifiers name="House" abstract="false" instanceClassName="HouseMetamodel::House" interface="false" ePackage="#/" xsi:type="ecore:EClass">
|
3
41
|
<eStructuralFeatures name="size" derived="false" transient="false" changeable="true" eContainingClass="#//House" unsettable="false" iD="false" xsi:type="ecore:EAttribute" upperBound="1" ordered="true" volatile="false" lowerBound="0" unique="true">
|
4
42
|
</eStructuralFeatures>
|
@@ -113,54 +151,22 @@
|
|
113
151
|
</details>
|
114
152
|
</eAnnotations>
|
115
153
|
</eClassifiers>
|
116
|
-
<eClassifiers name="SexEnum" instanceClassName="HouseMetamodel::SexEnum" ePackage="#/" xsi:type="ecore:EEnum">
|
117
|
-
<eLiterals name="male" xsi:type="ecore:EEnumLiteral" eEnum="#//SexEnum">
|
118
|
-
</eLiterals>
|
119
|
-
<eLiterals name="female" xsi:type="ecore:EEnumLiteral" eEnum="#//SexEnum">
|
120
|
-
</eLiterals>
|
121
|
-
</eClassifiers>
|
122
|
-
<eClassifiers name="MeetingPlace" abstract="false" instanceClassName="HouseMetamodel::MeetingPlace" interface="false" ePackage="#/" xsi:type="ecore:EClass">
|
123
|
-
<eAnnotations eModelElement="#//MeetingPlace" xsi:type="ecore:EAnnotation" source="testmodel">
|
124
|
-
<details xsi:type="ecore:EStringToStringMapEntry" value="Proposed" key="status">
|
125
|
-
</details>
|
126
|
-
<details xsi:type="ecore:EStringToStringMapEntry" value="2006-07-12 08:40:46" key="date_created">
|
127
|
-
</details>
|
128
|
-
<details xsi:type="ecore:EStringToStringMapEntry" value="Class" key="ea_stype">
|
129
|
-
</details>
|
130
|
-
<details xsi:type="ecore:EStringToStringMapEntry" value="2006-07-12 08:44:02" key="date_modified">
|
131
|
-
</details>
|
132
|
-
<details xsi:type="ecore:EStringToStringMapEntry" value="0" key="tagged">
|
133
|
-
</details>
|
134
|
-
<details xsi:type="ecore:EStringToStringMapEntry" value="0" key="ea_ntype">
|
135
|
-
</details>
|
136
|
-
<details xsi:type="ecore:EStringToStringMapEntry" value="1.0" key="version">
|
137
|
-
</details>
|
138
|
-
<details xsi:type="ecore:EStringToStringMapEntry" value="EAPK_A1B83D59_CAE1_422c_BA5F_D3624D7156AD" key="package">
|
139
|
-
</details>
|
140
|
-
<details xsi:type="ecore:EStringToStringMapEntry" value="false" key="isSpecification">
|
141
|
-
</details>
|
142
|
-
<details xsi:type="ecore:EStringToStringMapEntry" value="HouseMetamodel" key="package_name">
|
143
|
-
</details>
|
144
|
-
<details xsi:type="ecore:EStringToStringMapEntry" value="1" key="complexity">
|
145
|
-
</details>
|
146
|
-
<details xsi:type="ecore:EStringToStringMapEntry" value="1.0" key="phase">
|
147
|
-
</details>
|
148
|
-
<details xsi:type="ecore:EStringToStringMapEntry" value="BackColor=-1;BorderColor=-1;BorderWidth=-1;FontColor=-1;VSwimLanes=0;HSwimLanes=0;BorderStyle=0;" key="style">
|
149
|
-
</details>
|
150
|
-
<details xsi:type="ecore:EStringToStringMapEntry" value="Java" key="gentype">
|
151
|
-
</details>
|
152
|
-
</eAnnotations>
|
153
|
-
</eClassifiers>
|
154
154
|
<eSubpackages name="Rooms" xsi:type="ecore:EPackage" eSuperPackage="#/">
|
155
|
-
<eClassifiers name="
|
156
|
-
<
|
155
|
+
<eClassifiers name="Room" abstract="false" instanceClassName="HouseMetamodel::Rooms::Room" interface="false" ePackage="#//Rooms" xsi:type="ecore:EClass">
|
156
|
+
<eStructuralFeatures name="house" derived="false" containment="false" transient="false" changeable="true" resolveProxies="true" eContainingClass="#//Rooms/Room" eOpposite="#//House/room" unsettable="false" xsi:type="ecore:EReference" upperBound="1" ordered="true" volatile="false" lowerBound="0" eType="#//House" unique="true">
|
157
|
+
<eAnnotations eModelElement="#//Rooms/Room/house" xsi:type="ecore:EAnnotation">
|
158
|
+
<details xsi:type="ecore:EStringToStringMapEntry" value="Unspecified" key="containment">
|
159
|
+
</details>
|
160
|
+
</eAnnotations>
|
161
|
+
</eStructuralFeatures>
|
162
|
+
<eAnnotations eModelElement="#//Rooms/Room" xsi:type="ecore:EAnnotation">
|
157
163
|
<details xsi:type="ecore:EStringToStringMapEntry" value="Proposed" key="status">
|
158
164
|
</details>
|
159
|
-
<details xsi:type="ecore:EStringToStringMapEntry" value="
|
165
|
+
<details xsi:type="ecore:EStringToStringMapEntry" value="2005-09-16 19:52:28" key="date_created">
|
160
166
|
</details>
|
161
167
|
<details xsi:type="ecore:EStringToStringMapEntry" value="Class" key="ea_stype">
|
162
168
|
</details>
|
163
|
-
<details xsi:type="ecore:EStringToStringMapEntry" value="2006-06-
|
169
|
+
<details xsi:type="ecore:EStringToStringMapEntry" value="2006-06-22 21:15:25" key="date_modified">
|
164
170
|
</details>
|
165
171
|
<details xsi:type="ecore:EStringToStringMapEntry" value="0" key="tagged">
|
166
172
|
</details>
|
@@ -184,21 +190,21 @@
|
|
184
190
|
</details>
|
185
191
|
</eAnnotations>
|
186
192
|
</eClassifiers>
|
187
|
-
<eClassifiers name="
|
188
|
-
<eStructuralFeatures name="house" derived="false" containment="false" transient="false" changeable="true" resolveProxies="true" eContainingClass="#//Rooms/
|
189
|
-
<eAnnotations eModelElement="#//Rooms/
|
193
|
+
<eClassifiers name="Kitchen" abstract="false" instanceClassName="HouseMetamodel::Rooms::Kitchen" interface="false" ePackage="#//Rooms" xsi:type="ecore:EClass" eSuperTypes="#//MeetingPlace #//Rooms/Room">
|
194
|
+
<eStructuralFeatures name="house" derived="false" containment="false" transient="false" changeable="true" resolveProxies="true" eContainingClass="#//Rooms/Kitchen" eOpposite="#//House/kitchen" unsettable="false" xsi:type="ecore:EReference" upperBound="1" ordered="true" volatile="false" lowerBound="1" eType="#//House" unique="true">
|
195
|
+
<eAnnotations eModelElement="#//Rooms/Kitchen/house" xsi:type="ecore:EAnnotation">
|
190
196
|
<details xsi:type="ecore:EStringToStringMapEntry" value="Unspecified" key="containment">
|
191
197
|
</details>
|
192
198
|
</eAnnotations>
|
193
199
|
</eStructuralFeatures>
|
194
|
-
<eAnnotations eModelElement="#//Rooms/
|
200
|
+
<eAnnotations eModelElement="#//Rooms/Kitchen" xsi:type="ecore:EAnnotation">
|
195
201
|
<details xsi:type="ecore:EStringToStringMapEntry" value="Proposed" key="status">
|
196
202
|
</details>
|
197
|
-
<details xsi:type="ecore:EStringToStringMapEntry" value="2005-
|
203
|
+
<details xsi:type="ecore:EStringToStringMapEntry" value="2005-11-30 19:26:13" key="date_created">
|
198
204
|
</details>
|
199
205
|
<details xsi:type="ecore:EStringToStringMapEntry" value="Class" key="ea_stype">
|
200
206
|
</details>
|
201
|
-
<details xsi:type="ecore:EStringToStringMapEntry" value="2006-06-22 21:15:
|
207
|
+
<details xsi:type="ecore:EStringToStringMapEntry" value="2006-06-22 21:15:34" key="date_modified">
|
202
208
|
</details>
|
203
209
|
<details xsi:type="ecore:EStringToStringMapEntry" value="0" key="tagged">
|
204
210
|
</details>
|
@@ -222,21 +228,15 @@
|
|
222
228
|
</details>
|
223
229
|
</eAnnotations>
|
224
230
|
</eClassifiers>
|
225
|
-
<eClassifiers name="
|
226
|
-
<
|
227
|
-
<eAnnotations eModelElement="#//Rooms/Kitchen/house" xsi:type="ecore:EAnnotation">
|
228
|
-
<details xsi:type="ecore:EStringToStringMapEntry" value="Unspecified" key="containment">
|
229
|
-
</details>
|
230
|
-
</eAnnotations>
|
231
|
-
</eStructuralFeatures>
|
232
|
-
<eAnnotations eModelElement="#//Rooms/Kitchen" xsi:type="ecore:EAnnotation">
|
231
|
+
<eClassifiers name="Bathroom" abstract="false" instanceClassName="HouseMetamodel::Rooms::Bathroom" interface="false" ePackage="#//Rooms" xsi:type="ecore:EClass" eSuperTypes="#//Rooms/Room">
|
232
|
+
<eAnnotations eModelElement="#//Rooms/Bathroom" xsi:type="ecore:EAnnotation">
|
233
233
|
<details xsi:type="ecore:EStringToStringMapEntry" value="Proposed" key="status">
|
234
234
|
</details>
|
235
|
-
<details xsi:type="ecore:EStringToStringMapEntry" value="
|
235
|
+
<details xsi:type="ecore:EStringToStringMapEntry" value="2006-06-27 08:32:25" key="date_created">
|
236
236
|
</details>
|
237
237
|
<details xsi:type="ecore:EStringToStringMapEntry" value="Class" key="ea_stype">
|
238
238
|
</details>
|
239
|
-
<details xsi:type="ecore:EStringToStringMapEntry" value="2006-06-
|
239
|
+
<details xsi:type="ecore:EStringToStringMapEntry" value="2006-06-27 08:34:23" key="date_modified">
|
240
240
|
</details>
|
241
241
|
<details xsi:type="ecore:EStringToStringMapEntry" value="0" key="tagged">
|
242
242
|
</details>
|
data/test/output_handler_test.rb
CHANGED
@@ -47,4 +47,12 @@ class MetamodelBuilderTest < Test::Unit::TestCase
|
|
47
47
|
h << line
|
48
48
|
end
|
49
49
|
end
|
50
|
+
def test_indent_string
|
51
|
+
h = RGen::TemplateLanguage::OutputHandler.new(1, "\t", :explicit)
|
52
|
+
h << "Start"
|
53
|
+
h << " \n "
|
54
|
+
h << "Test"
|
55
|
+
h << " \n \n Content"
|
56
|
+
assert_equal "\tStart\n\tTest\n\tContent", h.to_s
|
57
|
+
end
|
50
58
|
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__),"..","lib")
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'rgen/template_language/output_handler'
|
5
|
+
|
6
|
+
class MetamodelBuilderTest < Test::Unit::TestCase
|
7
|
+
def test_direct_nl
|
8
|
+
h = RGen::TemplateLanguage::OutputHandler.new
|
9
|
+
h.mode = :direct
|
10
|
+
h << "Test"
|
11
|
+
h.ignoreNextNL
|
12
|
+
h << "\nContent"
|
13
|
+
assert_equal "TestContent", h.to_s
|
14
|
+
end
|
15
|
+
def test_direct_ws
|
16
|
+
h = RGen::TemplateLanguage::OutputHandler.new
|
17
|
+
h.mode = :direct
|
18
|
+
h << "Test"
|
19
|
+
h.ignoreNextWS
|
20
|
+
h << " \n Content"
|
21
|
+
assert_equal "TestContent", h.to_s
|
22
|
+
end
|
23
|
+
def test_explicit_indent
|
24
|
+
h = RGen::TemplateLanguage::OutputHandler.new
|
25
|
+
h.mode = :explicit
|
26
|
+
h.indent = 1
|
27
|
+
h << "Start"
|
28
|
+
h << " \n "
|
29
|
+
h << "Test"
|
30
|
+
h << " \n \n Content"
|
31
|
+
assert_equal " Start\n Test\n Content", h.to_s
|
32
|
+
end
|
33
|
+
def test_explicit_endswithws
|
34
|
+
h = RGen::TemplateLanguage::OutputHandler.new
|
35
|
+
h.mode = :explicit
|
36
|
+
h.indent = 1
|
37
|
+
h << "Start \n\n"
|
38
|
+
assert_equal " Start\n", h.to_s
|
39
|
+
end
|
40
|
+
def test_performance
|
41
|
+
h = RGen::TemplateLanguage::OutputHandler.new
|
42
|
+
h.mode = :explicit
|
43
|
+
h.indent = 1
|
44
|
+
line = (1..50).collect{|w| "someword"}.join(" ")+"\n"
|
45
|
+
# repeat more often to make performance differences visible
|
46
|
+
20.times do
|
47
|
+
h << line
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -69,4 +69,27 @@ class TemplateContainerTest < Test::Unit::TestCase
|
|
69
69
|
assert_equal expected, result
|
70
70
|
end
|
71
71
|
|
72
|
+
def test_indent_string
|
73
|
+
tc = RGen::TemplateLanguage::DirectoryTemplateContainer.new([MyMM, CCodeMM], OUTPUT_DIR)
|
74
|
+
tc.load(TEMPLATES_DIR)
|
75
|
+
tc.indentString = " " # 2 spaces instead of 3 (default)
|
76
|
+
tc.expand('indent_string_test::IndentStringTest', :for => :dummy)
|
77
|
+
File.open(OUTPUT_DIR+"/indentStringTestDefaultIndent.out") do |f|
|
78
|
+
assert_equal " <- your default here\n", f.read
|
79
|
+
end
|
80
|
+
File.open(OUTPUT_DIR+"/indentStringTestTabIndent.out") do |f|
|
81
|
+
assert_equal "\t<- tab\n", f.read
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_null_context
|
86
|
+
tc = RGen::TemplateLanguage::DirectoryTemplateContainer.new([MyMM, CCodeMM], OUTPUT_DIR)
|
87
|
+
tc.load(TEMPLATES_DIR)
|
88
|
+
assert_raise StandardError do
|
89
|
+
tc.expand('null_context_test::NullContextTestBad', :for => :dummy)
|
90
|
+
end
|
91
|
+
assert_nothing_raised do
|
92
|
+
tc.expand('null_context_test::NullContextTestOk', :for => :dummy)
|
93
|
+
end
|
94
|
+
end
|
72
95
|
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__),"..","lib")
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'rgen/template_language'
|
5
|
+
require 'rgen/metamodel_builder'
|
6
|
+
|
7
|
+
class TemplateContainerTest < Test::Unit::TestCase
|
8
|
+
|
9
|
+
TEMPLATES_DIR = File.dirname(__FILE__)+"/template_language_test/templates"
|
10
|
+
OUTPUT_DIR = File.dirname(__FILE__)+"/template_language_test"
|
11
|
+
|
12
|
+
module MyMM
|
13
|
+
|
14
|
+
class Chapter
|
15
|
+
attr_reader :title
|
16
|
+
def initialize(title)
|
17
|
+
@title = title
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class Document
|
22
|
+
attr_reader :title, :authors, :chapters
|
23
|
+
attr_accessor :sampleArray
|
24
|
+
def initialize(title)
|
25
|
+
@title = title
|
26
|
+
@chapters = []
|
27
|
+
@authors = []
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
class Author
|
32
|
+
attr_reader :name, :email
|
33
|
+
def initialize(name, email)
|
34
|
+
@name, @email = name, email
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
module CCodeMM
|
41
|
+
class CArray < RGen::MetamodelBuilder::MMBase
|
42
|
+
has_attr 'name'
|
43
|
+
has_attr 'size', Integer
|
44
|
+
has_attr 'type'
|
45
|
+
end
|
46
|
+
class PrimitiveInitValue < RGen::MetamodelBuilder::MMBase
|
47
|
+
has_attr 'value', Integer
|
48
|
+
end
|
49
|
+
CArray.has_many 'initvalue', PrimitiveInitValue
|
50
|
+
end
|
51
|
+
|
52
|
+
TEST_MODEL = MyMM::Document.new("SomeDocument")
|
53
|
+
TEST_MODEL.authors << MyMM::Author.new("Martin", "martin@somewhe.re")
|
54
|
+
TEST_MODEL.authors << MyMM::Author.new("Otherguy", "other@somewhereel.se")
|
55
|
+
TEST_MODEL.chapters << MyMM::Chapter.new("Intro")
|
56
|
+
TEST_MODEL.chapters << MyMM::Chapter.new("MainPart")
|
57
|
+
TEST_MODEL.chapters << MyMM::Chapter.new("Summary")
|
58
|
+
TEST_MODEL.sampleArray = CCodeMM::CArray.new(:name => "myArray", :type => "int", :size => 5,
|
59
|
+
:initvalue => (1..5).collect { |v| CCodeMM::PrimitiveInitValue.new(:value => v) })
|
60
|
+
|
61
|
+
def test_with_model
|
62
|
+
tc = RGen::TemplateLanguage::DirectoryTemplateContainer.new([MyMM, CCodeMM], OUTPUT_DIR)
|
63
|
+
tc.load(TEMPLATES_DIR)
|
64
|
+
File.delete(OUTPUT_DIR+"/testout.txt") if File.exists? OUTPUT_DIR+"/testout.txt"
|
65
|
+
tc.expand('root::Root', :for => TEST_MODEL, :indent => 1)
|
66
|
+
result = expected = ""
|
67
|
+
File.open(OUTPUT_DIR+"/testout.txt") {|f| result = f.read}
|
68
|
+
File.open(OUTPUT_DIR+"/expected_result.txt") {|f| expected = f.read}
|
69
|
+
assert_equal expected, result
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
<- your default here
|
@@ -0,0 +1 @@
|
|
1
|
+
<- tab
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<% define 'IndentStringTest', :for => Object do %>
|
2
|
+
<% file 'indentStringTestDefaultIndent.out' do %>
|
3
|
+
<%iinc%>
|
4
|
+
<- your default here
|
5
|
+
<%idec%>
|
6
|
+
<% end %>
|
7
|
+
<% file 'indentStringTestTabIndent.out', "\t" do %>
|
8
|
+
<%iinc%>
|
9
|
+
<- tab
|
10
|
+
<%idec%>
|
11
|
+
<% end %>
|
12
|
+
<% end %>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<% define 'NullContextTestBad', :for => Object do %>
|
2
|
+
<%# this must raise an exception %>
|
3
|
+
<% expand 'Callee', :for => nil %>
|
4
|
+
<% end %>
|
5
|
+
|
6
|
+
<% define 'NullContextTestOk', :for => Object do %>
|
7
|
+
<%# however this is ok %>
|
8
|
+
<% expand 'Callee' %>
|
9
|
+
<% end %>
|
10
|
+
|
11
|
+
<% define 'Callee', :for => Object do %>
|
12
|
+
<% end %>
|