| 
     
      
      
      From: <na...@us...> - 2009-08-06 20:58:34
      
     
   | 
Revision: 818
          http://instantobjects.svn.sourceforge.net/instantobjects/revision/?rev=818&view=rev
Author:   nandod
Date:     2009-08-06 20:58:27 +0000 (Thu, 06 Aug 2009)
Log Message:
-----------
* D2009: Fixed problem with I/O of memo fields in InstantPresentation. TInstantBlob and TInstantMemo are now explicitly Ansi. TInstantWideMemo (and TInstantWideString) should be added for handling of unicode text.
+ PrimerExternal_D2009.dproj.
+ A test for TInstantCodeModel.
Modified Paths:
--------------
    trunk/Source/Core/InstantPersistence.pas
    trunk/Tests/TestIO.dpr
    trunk/Tests/TestIO.dproj
    trunk/Tests/TestIO_D2009.dpr
    trunk/Tests/TestIO_D2009.dproj
Added Paths:
-----------
    trunk/Demos/PrimerCross/PrimerExternal_D2009.dpr
    trunk/Demos/PrimerCross/PrimerExternal_D2009.dproj
    trunk/Demos/PrimerCross/PrimerExternal_D2009.mdr
    trunk/Demos/PrimerCross/PrimerExternal_D2009.res
    trunk/Tests/TestInstantCode.pas
Added: trunk/Demos/PrimerCross/PrimerExternal_D2009.dpr
===================================================================
--- trunk/Demos/PrimerCross/PrimerExternal_D2009.dpr	                        (rev 0)
+++ trunk/Demos/PrimerCross/PrimerExternal_D2009.dpr	2009-08-06 20:58:27 UTC (rev 818)
@@ -0,0 +1,79 @@
+(*
+ *   InstantObjects
+ *   Primer Demo - with "external storage" of Part and Parts
+ *   Model.pas unit is located in ModelExternal folder
+ *)
+
+(* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is: Seleqt InstantObjects
+ *
+ * The Initial Developer of the Original Code is: Seleqt
+ *
+ * Portions created by the Initial Developer are Copyright (C) 2001-2003
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Carlo Barazzetta, Nando Dessena
+ * 
+ * ***** END LICENSE BLOCK ***** *)
+
+program PrimerExternal_D2009;
+
+{$IFDEF LINUX}
+{$I '../../Source/InstantDefines.inc'}
+{$ELSE}
+{$I '..\..\Source\InstantDefines.inc'}
+{$ENDIF}
+
+
+uses
+  Forms,
+  Main in 'Main.pas' {MainForm},
+  Model in 'ModelExternal\Model.pas',
+  ContactView in 'ContactView.pas' {ContactViewForm: TFrame},
+  BasicView in 'BasicView.pas' {BasicViewForm: TFrame},
+  BasicEdit in 'BasicEdit.pas' {BasicEditForm},
+  ContactEdit in 'ContactEdit.pas' {ContactEditForm},
+  PersonEdit in 'PersonEdit.pas' {PersonEditForm},
+  CompanyEdit in 'CompanyEdit.pas' {CompanyEditForm},
+  DemoData in 'DemoData.pas',
+  ContactFilterEdit in 'ContactFilterEdit.pas' {ContactFilterEditForm},
+  MainData in 'MainData.pas' {MainDataModule: TDataModule},
+  ContactBrowse in 'ContactBrowse.pas' {ContactBrowseForm},
+  CompanyBrowse in 'CompanyBrowse.pas' {CompanyBrowseForm},
+  PerformanceView in 'PerformanceView.pas' {PerformanceViewForm: TFrame},
+  Welcome in 'Welcome.pas' {WelcomeForm},
+  PersonBrowse in 'PersonBrowse.pas' {PersonBrowseForm},
+  BasicBrowse in 'BasicBrowse.pas' {BasicBrowseForm},
+  CountryBrowse in 'CountryBrowse.pas' {CountryBrowseForm},
+  DemoDataRequest in 'DemoDataRequest.pas' {DemoDataRequestForm},
+  ContactSort in 'ContactSort.pas' {ContactSortForm},
+  CategoryBrowse in 'CategoryBrowse.pas' {CategoryBrowseForm},
+  HelpView in 'HelpView.pas' {HelpViewForm: TFrame},
+  RandomData in 'RandomData.pas',
+  Stopwatch in 'Stopwatch.pas',
+  Utility in 'Utility.pas',
+  QueryView in 'QueryView.pas' {QueryViewForm: TFrame};
+
+{$R *.res}
+{$R *.mdr} {Model}
+
+begin
+  Application.Initialize;
+  Application.Title := 'InstantObjects Primer Demo with "external storage" of Part and Parts';
+  Application.CreateForm(TMainForm, MainForm);
+  Application.CreateForm(TMainDataModule, MainDataModule);
+  Application.Run;
+end.
Property changes on: trunk/Demos/PrimerCross/PrimerExternal_D2009.dpr
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:eol-style
   + native
Added: trunk/Demos/PrimerCross/PrimerExternal_D2009.dproj
===================================================================
--- trunk/Demos/PrimerCross/PrimerExternal_D2009.dproj	                        (rev 0)
+++ trunk/Demos/PrimerCross/PrimerExternal_D2009.dproj	2009-08-06 20:58:27 UTC (rev 818)
@@ -0,0 +1,187 @@
+	<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+		<PropertyGroup>
+			<ProjectGuid>{0d607f9b-9c2b-445d-84fd-7072bc53deff}</ProjectGuid>
+			<MainSource>PrimerExternal_D2009.dpr</MainSource>
+			<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+			<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+			<DCC_DCCCompiler>DCC32</DCC_DCCCompiler>
+			<DCC_DependencyCheckOutputName>PrimerExternal.exe</DCC_DependencyCheckOutputName>
+			<ProjectVersion>12.0</ProjectVersion>
+			<Config Condition="'$(Config)'==''">Debug</Config>
+		</PropertyGroup>
+		<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
+			<Base>true</Base>
+		</PropertyGroup>
+		<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_1)'!=''">
+			<Cfg_1>true</Cfg_1>
+			<CfgParent>Base</CfgParent>
+			<Base>true</Base>
+		</PropertyGroup>
+		<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_2)'!=''">
+			<Cfg_2>true</Cfg_2>
+			<CfgParent>Base</CfgParent>
+			<Base>true</Base>
+		</PropertyGroup>
+		<PropertyGroup Condition="'$(Base)'!=''">
+			<DCC_DependencyCheckOutputName>PrimerExternal_D2009.exe</DCC_DependencyCheckOutputName>
+		</PropertyGroup>
+		<PropertyGroup Condition="'$(Cfg_1)'!=''">
+			<Version>7.0</Version>
+			<DCC_DebugInformation>False</DCC_DebugInformation>
+			<DCC_LocalDebugSymbols>False</DCC_LocalDebugSymbols>
+			<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
+			<DCC_Define>RELEASE;IO_STATEMENT_LOGGING;$(DCC_Define)</DCC_Define>
+			<DCC_UnitSearchPath>..\..\Source\Core;..\..\Source\Brokers\ADO;..\..\Source\Brokers\BDE;..\..\Source\Brokers\DBX;..\..\Source\Brokers\IBX;..\..\Source\Brokers\XML;..\..\Source\Catalogs\IBFb;..\..\Source\Catalogs\MSSql;..\..\Source\Catalogs\MySql;$(DCC_UnitSearchPath)</DCC_UnitSearchPath>
+			<DCC_ResourcePath>..\..\Source\Core;..\..\Source\Brokers\ADO;..\..\Source\Brokers\BDE;..\..\Source\Brokers\DBX;..\..\Source\Brokers\IBX;..\..\Source\Brokers\XML;..\..\Source\Catalogs\IBFb;..\..\Source\Catalogs\MSSql;..\..\Source\Catalogs\MySql;$(DCC_ResourcePath)</DCC_ResourcePath>
+			<DCC_ObjPath>..\..\Source\Core;..\..\Source\Brokers\ADO;..\..\Source\Brokers\BDE;..\..\Source\Brokers\DBX;..\..\Source\Brokers\IBX;..\..\Source\Brokers\XML;..\..\Source\Catalogs\IBFb;..\..\Source\Catalogs\MSSql;..\..\Source\Catalogs\MySql;$(DCC_ObjPath)</DCC_ObjPath>
+			<DCC_IncludePath>..\..\Source\Core;..\..\Source\Brokers\ADO;..\..\Source\Brokers\BDE;..\..\Source\Brokers\DBX;..\..\Source\Brokers\IBX;..\..\Source\Brokers\XML;..\..\Source\Catalogs\IBFb;..\..\Source\Catalogs\MSSql;..\..\Source\Catalogs\MySql;$(DCC_IncludePath)</DCC_IncludePath>
+		</PropertyGroup>
+		<PropertyGroup Condition="'$(Cfg_2)'!=''">
+			<DCC_DebugDCUs>true</DCC_DebugDCUs>
+			<Version>7.0</Version>
+			<DCC_Define>DEBUG;IO_STATEMENT_LOGGING;$(DCC_Define)</DCC_Define>
+			<DCC_UnitSearchPath>..\..\Source\Core;..\..\Source\Brokers\ADO;..\..\Source\Brokers\BDE;..\..\Source\Brokers\DBX;..\..\Source\Brokers\IBX;..\..\Source\Brokers\XML;..\..\Source\Catalogs\IBFb;..\..\Source\Catalogs\MSSql;..\..\Source\Catalogs\MySql;$(DCC_UnitSearchPath)</DCC_UnitSearchPath>
+			<DCC_ResourcePath>..\..\Source\Core;..\..\Source\Brokers\ADO;..\..\Source\Brokers\BDE;..\..\Source\Brokers\DBX;..\..\Source\Brokers\IBX;..\..\Source\Brokers\XML;..\..\Source\Catalogs\IBFb;..\..\Source\Catalogs\MSSql;..\..\Source\Catalogs\MySql;$(DCC_ResourcePath)</DCC_ResourcePath>
+			<DCC_ObjPath>..\..\Source\Core;..\..\Source\Brokers\ADO;..\..\Source\Brokers\BDE;..\..\Source\Brokers\DBX;..\..\Source\Brokers\IBX;..\..\Source\Brokers\XML;..\..\Source\Catalogs\IBFb;..\..\Source\Catalogs\MSSql;..\..\Source\Catalogs\MySql;$(DCC_ObjPath)</DCC_ObjPath>
+			<DCC_IncludePath>..\..\Source\Core;..\..\Source\Brokers\ADO;..\..\Source\Brokers\BDE;..\..\Source\Brokers\DBX;..\..\Source\Brokers\IBX;..\..\Source\Brokers\XML;..\..\Source\Catalogs\IBFb;..\..\Source\Catalogs\MSSql;..\..\Source\Catalogs\MySql;$(DCC_IncludePath)</DCC_IncludePath>
+		</PropertyGroup>
+		<ProjectExtensions>
+			<Borland.Personality>Delphi.Personality.12</Borland.Personality>
+			<Borland.ProjectType>VCLApplication</Borland.ProjectType>
+			<BorlandProject>
+				<Delphi.Personality>
+					<Compiler>
+						<Compiler Name="UsePackages">False</Compiler>
+						<Compiler Name="Packages"/>
+					</Compiler>
+					<Parameters>
+						<Parameters Name="UseLauncher">False</Parameters>
+						<Parameters Name="LoadAllSymbols">True</Parameters>
+						<Parameters Name="LoadUnspecifiedSymbols">False</Parameters>
+					</Parameters>
+					<VersionInfo>
+						<VersionInfo Name="IncludeVerInfo">True</VersionInfo>
+						<VersionInfo Name="AutoIncBuild">False</VersionInfo>
+						<VersionInfo Name="MajorVer">2</VersionInfo>
+						<VersionInfo Name="MinorVer">0</VersionInfo>
+						<VersionInfo Name="Release">0</VersionInfo>
+						<VersionInfo Name="Build">0</VersionInfo>
+						<VersionInfo Name="Debug">False</VersionInfo>
+						<VersionInfo Name="PreRelease">False</VersionInfo>
+						<VersionInfo Name="Special">False</VersionInfo>
+						<VersionInfo Name="Private">False</VersionInfo>
+						<VersionInfo Name="DLL">False</VersionInfo>
+						<VersionInfo Name="Locale">1030</VersionInfo>
+						<VersionInfo Name="CodePage">1252</VersionInfo>
+					</VersionInfo>
+					<VersionInfoKeys>
+						<VersionInfoKeys Name="CompanyName">InstantObjects.org</VersionInfoKeys>
+						<VersionInfoKeys Name="FileDescription">Primer Demo</VersionInfoKeys>
+						<VersionInfoKeys Name="FileVersion">2.0.0.0</VersionInfoKeys>
+						<VersionInfoKeys Name="InternalName"/>
+						<VersionInfoKeys Name="LegalCopyright">MPL public license</VersionInfoKeys>
+						<VersionInfoKeys Name="LegalTrademarks"/>
+						<VersionInfoKeys Name="OriginalFilename"/>
+						<VersionInfoKeys Name="ProductName"/>
+						<VersionInfoKeys Name="ProductVersion">2.0</VersionInfoKeys>
+						<VersionInfoKeys Name="Comments"/>
+					</VersionInfoKeys>
+					<Source>
+						<Source Name="MainSource">PrimerExternal_D2009.dpr</Source>
+					</Source>
+				</Delphi.Personality>
+			</BorlandProject>
+			<ProjectFileVersion>12</ProjectFileVersion>
+		</ProjectExtensions>
+		<ItemGroup>
+			<DelphiCompile Include="PrimerExternal_D2009.dpr">
+				<MainSource>MainSource</MainSource>
+			</DelphiCompile>
+			<DCCReference Include="Main.pas">
+				<Form>MainForm</Form>
+			</DCCReference>
+			<DCCReference Include="ModelExternal\Model.pas"/>
+			<DCCReference Include="ContactView.pas">
+				<Form>ContactViewForm</Form>
+				<DesignClass>TFrame</DesignClass>
+			</DCCReference>
+			<DCCReference Include="BasicView.pas">
+				<Form>BasicViewForm</Form>
+				<DesignClass>TFrame</DesignClass>
+			</DCCReference>
+			<DCCReference Include="BasicEdit.pas">
+				<Form>BasicEditForm</Form>
+			</DCCReference>
+			<DCCReference Include="ContactEdit.pas">
+				<Form>ContactEditForm</Form>
+			</DCCReference>
+			<DCCReference Include="PersonEdit.pas">
+				<Form>PersonEditForm</Form>
+			</DCCReference>
+			<DCCReference Include="CompanyEdit.pas">
+				<Form>CompanyEditForm</Form>
+			</DCCReference>
+			<DCCReference Include="DemoData.pas"/>
+			<DCCReference Include="ContactFilterEdit.pas">
+				<Form>ContactFilterEditForm</Form>
+			</DCCReference>
+			<DCCReference Include="MainData.pas">
+				<Form>MainDataModule</Form>
+				<DesignClass>TDataModule</DesignClass>
+			</DCCReference>
+			<DCCReference Include="ContactBrowse.pas">
+				<Form>ContactBrowseForm</Form>
+			</DCCReference>
+			<DCCReference Include="CompanyBrowse.pas">
+				<Form>CompanyBrowseForm</Form>
+			</DCCReference>
+			<DCCReference Include="PerformanceView.pas">
+				<Form>PerformanceViewForm</Form>
+				<DesignClass>TFrame</DesignClass>
+			</DCCReference>
+			<DCCReference Include="Welcome.pas">
+				<Form>WelcomeForm</Form>
+			</DCCReference>
+			<DCCReference Include="PersonBrowse.pas">
+				<Form>PersonBrowseForm</Form>
+			</DCCReference>
+			<DCCReference Include="BasicBrowse.pas">
+				<Form>BasicBrowseForm</Form>
+			</DCCReference>
+			<DCCReference Include="CountryBrowse.pas">
+				<Form>CountryBrowseForm</Form>
+			</DCCReference>
+			<DCCReference Include="DemoDataRequest.pas">
+				<Form>DemoDataRequestForm</Form>
+			</DCCReference>
+			<DCCReference Include="ContactSort.pas">
+				<Form>ContactSortForm</Form>
+			</DCCReference>
+			<DCCReference Include="CategoryBrowse.pas">
+				<Form>CategoryBrowseForm</Form>
+			</DCCReference>
+			<DCCReference Include="HelpView.pas">
+				<Form>HelpViewForm</Form>
+				<DesignClass>TFrame</DesignClass>
+			</DCCReference>
+			<DCCReference Include="RandomData.pas"/>
+			<DCCReference Include="Stopwatch.pas"/>
+			<DCCReference Include="Utility.pas"/>
+			<DCCReference Include="QueryView.pas">
+				<Form>QueryViewForm</Form>
+				<DesignClass>TFrame</DesignClass>
+			</DCCReference>
+			<BuildConfiguration Include="Base">
+				<Key>Base</Key>
+			</BuildConfiguration>
+			<BuildConfiguration Include="Debug">
+				<Key>Cfg_2</Key>
+				<CfgParent>Base</CfgParent>
+			</BuildConfiguration>
+			<BuildConfiguration Include="Release">
+				<Key>Cfg_1</Key>
+				<CfgParent>Base</CfgParent>
+			</BuildConfiguration>
+		</ItemGroup>
+		<Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/>
+	</Project>
Property changes on: trunk/Demos/PrimerCross/PrimerExternal_D2009.dproj
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:eol-style
   + native
Added: trunk/Demos/PrimerCross/PrimerExternal_D2009.mdr
===================================================================
(Binary files differ)
Property changes on: trunk/Demos/PrimerCross/PrimerExternal_D2009.mdr
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream
Added: trunk/Demos/PrimerCross/PrimerExternal_D2009.res
===================================================================
(Binary files differ)
Property changes on: trunk/Demos/PrimerCross/PrimerExternal_D2009.res
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream
Modified: trunk/Source/Core/InstantPersistence.pas
===================================================================
--- trunk/Source/Core/InstantPersistence.pas	2009-08-06 17:14:40 UTC (rev 817)
+++ trunk/Source/Core/InstantPersistence.pas	2009-08-06 20:58:27 UTC (rev 818)
@@ -444,10 +444,10 @@
     FStream: TMemoryStream;
     function GetSize: Integer;
     function GetStream: TMemoryStream;
-    function GetValue: string;
-    procedure SetValue(const AValue: string);
     property Stream: TMemoryStream read GetStream;
   protected
+    function GetValue: AnsiString; virtual;
+    procedure SetValue(const AValue: AnsiString); virtual;
     class function AttributeType: TInstantAttributeType; override;
     function GetAsString: string; override;
     function GetAsVariant: Variant; override;
@@ -472,7 +472,7 @@
     function WriteBuffer(const Buffer; Position, Count: Integer): Integer;
     property Size: Integer read GetSize;
   published
-    property Value: string read GetValue write SetValue;
+    property Value: AnsiString read GetValue write SetValue;
   end;
 
   TInstantMemo = class(TInstantBlob)
@@ -3485,13 +3485,14 @@
   Result := FStream;
 end;
 
-function TInstantBlob.GetValue: string;
+function TInstantBlob.GetValue: AnsiString;
 begin
   if Size > 0 then
   begin
-    SetLength(Result, Size div SizeOf(Char));
+    SetLength(Result, Size div SizeOf(AnsiChar));
     Read(Result[1], 0, Size);
-  end else
+  end
+  else
     Result := '';
 end;
 
@@ -3567,17 +3568,18 @@
   end;
 end;
 
-procedure TInstantBlob.SetValue(const AValue: string);
+procedure TInstantBlob.SetValue(const AValue: AnsiString);
 var
   L: Integer;
 begin
-  L := Length(AValue) * SizeOf(Char);
+  L := Length(AValue) * SizeOf(AnsiChar);
   if L > 0 then
   begin
     Stream.Clear;
     WriteBuffer(AValue[1], 0, L);
     Stream.Size := L;
-  end else
+  end
+  else
     Clear;
 end;
 
Modified: trunk/Tests/TestIO.dpr
===================================================================
--- trunk/Tests/TestIO.dpr	2009-08-06 17:14:40 UTC (rev 817)
+++ trunk/Tests/TestIO.dpr	2009-08-06 20:58:27 UTC (rev 818)
@@ -58,7 +58,8 @@
   TestInstantCircularReferences in 'TestInstantCircularReferences.pas',
   TestInstantObjectReference in 'TestInstantObjectReference.pas',
   MinimalModel in 'MinimalModel.pas',
-  TestXMLBroker in 'TestXMLBroker.pas';
+  TestXMLBroker in 'TestXMLBroker.pas',
+  TestInstantCode in 'TestInstantCode.pas';
 
 {$R *.res}
 {$R *.mdr} {TestModel}
Modified: trunk/Tests/TestIO.dproj
===================================================================
--- trunk/Tests/TestIO.dproj	2009-08-06 17:14:40 UTC (rev 817)
+++ trunk/Tests/TestIO.dproj	2009-08-06 20:58:27 UTC (rev 818)
@@ -55,6 +55,7 @@
     <DCCReference Include="TestInstantCircularReferences.pas" />
     <DCCReference Include="TestInstantClasses.pas" />
     <DCCReference Include="TestInstantClassMetadata.pas" />
+    <DCCReference Include="TestInstantCode.pas" />
     <DCCReference Include="TestInstantComplex.pas" />
     <DCCReference Include="TestInstantCurrency.pas" />
     <DCCReference Include="TestInstantDate.pas" />
Modified: trunk/Tests/TestIO_D2009.dpr
===================================================================
--- trunk/Tests/TestIO_D2009.dpr	2009-08-06 17:14:40 UTC (rev 817)
+++ trunk/Tests/TestIO_D2009.dpr	2009-08-06 20:58:27 UTC (rev 818)
@@ -52,7 +52,8 @@
   TestInstantCircularReferences in 'TestInstantCircularReferences.pas',
   TestInstantObjectReference in 'TestInstantObjectReference.pas',
   MinimalModel in 'MinimalModel.pas',
-  TestXMLBroker in 'TestXMLBroker.pas';
+  TestXMLBroker in 'TestXMLBroker.pas',
+  TestInstantCode in 'TestInstantCode.pas';
 
 {$R *.res}
 {$R *.mdr} {TestModel}
Modified: trunk/Tests/TestIO_D2009.dproj
===================================================================
--- trunk/Tests/TestIO_D2009.dproj	2009-08-06 17:14:40 UTC (rev 817)
+++ trunk/Tests/TestIO_D2009.dproj	2009-08-06 20:58:27 UTC (rev 818)
@@ -93,6 +93,7 @@
 			<DCCReference Include="TestInstantObjectReference.pas"/>
 			<DCCReference Include="MinimalModel.pas"/>
 			<DCCReference Include="TestXMLBroker.pas"/>
+			<DCCReference Include="TestInstantCode.pas"/>
 			<BuildConfiguration Include="Base">
 				<Key>Base</Key>
 			</BuildConfiguration>
Added: trunk/Tests/TestInstantCode.pas
===================================================================
--- trunk/Tests/TestInstantCode.pas	                        (rev 0)
+++ trunk/Tests/TestInstantCode.pas	2009-08-06 20:58:27 UTC (rev 818)
@@ -0,0 +1,128 @@
+(*
+ *   InstantObjects Test Suite
+ *   TestMockBroker
+ *)
+
+(* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is: InstantObjects Test Suite/TestMockBroker
+ *
+ * The Initial Developer of the Original Code is: Uberto Barbini
+ *
+ * Portions created by the Initial Developer are Copyright (C) 2005
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Nando Dessena
+ *
+ * ***** END LICENSE BLOCK ***** *)
+
+unit TestInstantCode;
+
+{$IFDEF LINUX}
+{$I '../InstantDefines.inc'}
+{$ELSE}
+{$I '..\InstantDefines.inc'}
+{$ENDIF}
+
+interface
+
+uses
+  InstantCode, fpcunit, InstantMock, TestModel;
+
+type
+  TTestInstantCodeModel = class(TTestCase)
+  published
+    {
+      This test uses TInstantCodeModel to: read the actual TestModel.pas unit
+      from disk; parse it; rename class TCategory to TCategory2, and checks
+      that the rename succeeded. The modified source code is not saved back to
+      disk.
+    }
+    procedure TestRenameModelClass;
+  end;
+
+implementation
+
+uses
+  SysUtils, Classes, testregistry;
+
+{ TTestInstantCodeModel }
+
+procedure TTestInstantCodeModel.TestRenameModelClass;
+var
+  LCodeModel: TInstantCodeModel;
+  LFile: TStream;
+  LSource: TStringStream;
+  LClass: TInstantCodeClass;
+  LChangeInfo: TInstantCodeClassChangeInfo;
+  LSourceCode: string;
+  LChangedAttrs: TStringList;
+  LNewAttrs: TList;
+begin
+  LCodeModel := TInstantCodeModel.Create;
+  try
+    LFile := TFileStream.Create(ExtractFilePath(ParamStr(0)) + 'TestModel.pas', fmOpenRead);
+    try
+      LSource := TStringStream.Create('');
+      try
+        LSource.CopyFrom(LFile, LFile.Size);
+        LCodeModel.LoadModule(LSource.DataString);
+
+        AssertNotNull(LCodeModel.FindModule('TestModel'));
+        AssertNotNull(LCodeModel.FindClass('TCategory'));
+
+        LClass := LCodeModel.FindClass('TCategory');
+
+        LChangedAttrs := TStringList.Create;
+        try
+          LNewAttrs := TList.Create;
+          try
+            LClass.Name := 'TCategory2';
+            LChangeInfo := TInstantCodeClassChangeInfo.Create(LClass, ctEdit,
+              'TCategory', LChangedAttrs, LNewAttrs);
+            try
+              LSourceCode := LSource.DataString;
+              LClass.ApplyToSource(LSourceCode, LChangeInfo);
+
+              LCodeModel.Clear;
+              LCodeModel.LoadModule(LSourceCode);
+
+              AssertNotNull('Renamed class not found', LCodeModel.FindClass('TCategory2'));
+              AssertNull('Old class is still there', LCodeModel.FindClass('TCategory'));
+            finally
+              LChangeInfo.Free;
+            end;
+          finally
+            LNewAttrs.Free;
+          end;
+        finally
+          LChangedAttrs.Free;
+        end;
+      finally
+        LSource.Free;
+      end;
+    finally
+      LFile.Free;
+    end;
+  finally
+    LCodeModel.Free;
+  end;
+end;
+
+initialization
+{$IFNDEF CURR_TESTS}
+  RegisterTests([TTestInstantCodeModel]);
+{$ENDIF}
+end.
Property changes on: trunk/Tests/TestInstantCode.pas
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:eol-style
   + native
 |