rgen 0.4.2 → 0.4.3
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.
- 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 %>
         |