fpc/tests/test/tenumerators1.pp
Jonas Maebe a48a37d38b * fixed extended syntax checking {$x-} by moving it from the typecheck pass
to the parser, so that it only looks at what the programmer wrote rather
    than at all statements that the compiler may generate internally
    (mantis #11619)
  + several tests for {$x-} mode
  * modified tenumerators1 so it compiles without extended syntax enabled
    (to check for..in with {$x-})

git-svn-id: trunk@15075 -
2010-03-27 12:51:27 +00:00

172 lines
3.2 KiB
ObjectPascal

program tenumerators1;
{$ifdef fpc}
{$mode objfpc}{$H+}
{$endif}
{$apptype console}
{$x-}
uses
Classes;
{$ifndef fpc}
type
PtrInt = integer;
{$endif}
{$ifdef fpc}
procedure CheckFPListEnumerator;
var
Item: Pointer;
List: TFPList;
Enumerator: TFPListEnumerator;
i: integer;
begin
// check TFPList enumerator
List := TFPList.Create;
i:=List.Add(Pointer(1));
i:=List.Add(Pointer(2));
i:=List.Add(Pointer(3));
Enumerator := List.GetEnumerator;
while Enumerator.MoveNext do
begin
Item := Enumerator.Current;
WriteLn(PtrInt(Item));
end;
Enumerator.Free;
List.Free;
end;
{$endif}
procedure CheckListEnumerator;
var
Item: Pointer;
List: TList;
Enumerator: TListEnumerator;
i: integer;
begin
// check TList enumerator
List := TList.Create;
i:=List.Add(Pointer(1));
i:=List.Add(Pointer(2));
i:=List.Add(Pointer(3));
Enumerator := List.GetEnumerator;
while Enumerator.MoveNext do
begin
Item := Enumerator.Current;
WriteLn(PtrInt(Item));
end;
Enumerator.Free;
List.Free;
end;
procedure CheckCollectionEnumerator;
var
Item: TCollectionItem;
Collection: TCollection;
Enumerator: TCollectionEnumerator;
begin
// check TCollection enumerator
Collection := TCollection.Create(TCollectionItem);
item:=Collection.Add;
item:=Collection.Add;
item:=Collection.Add;
Enumerator := Collection.GetEnumerator;
while Enumerator.MoveNext do
begin
Item := Enumerator.Current;
WriteLn(PtrInt(Item));
end;
Enumerator.Free;
Collection.Free;
end;
procedure CheckStringsEnumerator;
var
Item: String;
Strings: TStrings;
Enumerator: TStringsEnumerator;
i: integer;
begin
// check TStrings enumerator
Strings := TStringList.Create;
i:=Strings.Add('1');
i:=Strings.Add('2');
i:=Strings.Add('3');
Enumerator := Strings.GetEnumerator;
while Enumerator.MoveNext do
begin
Item := Enumerator.Current;
WriteLn(Item);
end;
Enumerator.Free;
Strings.Free;
end;
procedure CheckComponentEnumerator;
var
Item: TComponent;
Component: TComponent;
Enumerator: TComponentEnumerator;
begin
// check TComponent enumerator
Component := TComponent.Create(nil);
item:=TComponent.Create(Component);
item:=TComponent.Create(Component);
item:=TComponent.Create(Component);
Enumerator := Component.GetEnumerator;
while Enumerator.MoveNext do
begin
Item := Enumerator.Current;
WriteLn(PtrInt(Item));
end;
Enumerator.Free;
Component.Free;
end;
procedure CheckInterfaceListEnumerator;
var
Item: IUnknown;
List: TInterfaceList;
Enumerator: TInterfaceListEnumerator;
i: integer;
begin
// check TInterfaceList enumerator
List := TInterfaceList.Create;
Item := TInterfacedObject.Create;
i:=List.Add(Item);
Item := TInterfacedObject.Create;
i:=List.Add(Item);
Item := TInterfacedObject.Create;
i:=List.Add(Item);
Enumerator := List.GetEnumerator;
while Enumerator.MoveNext do
begin
Item := Enumerator.Current;
WriteLn(PtrInt(Item));
end;
Enumerator.Free;
Item := nil;
List.Free;
end;
begin
{$ifdef fpc}
WriteLn('Testing FPC');
CheckFPListEnumerator;
{$else}
WriteLn('Testing Delphi');
{$endif}
CheckListEnumerator;
CheckCollectionEnumerator;
CheckStringsEnumerator;
CheckComponentEnumerator;
CheckInterfaceListEnumerator;
end.