summaryrefslogtreecommitdiff
path: root/gcc/testsuite/ada/acats/tests/cxa/cxaa005.a
diff options
context:
space:
mode:
authorupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
committerupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
commit554fd8c5195424bdbcabf5de30fdc183aba391bd (patch)
tree976dc5ab7fddf506dadce60ae936f43f58787092 /gcc/testsuite/ada/acats/tests/cxa/cxaa005.a
downloadcbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.bz2
cbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.xz
obtained gcc-4.6.4.tar.bz2 from upstream website;upstream
verified gcc-4.6.4.tar.bz2.sig; imported gcc-4.6.4 source tree from verified upstream tarball. downloading a git-generated archive based on the 'upstream' tag should provide you with a source tree that is binary identical to the one extracted from the above tarball. if you have obtained the source via the command 'git clone', however, do note that line-endings of files in your working directory might differ from line-endings of the respective files in the upstream repository.
Diffstat (limited to 'gcc/testsuite/ada/acats/tests/cxa/cxaa005.a')
-rw-r--r--gcc/testsuite/ada/acats/tests/cxa/cxaa005.a292
1 files changed, 292 insertions, 0 deletions
diff --git a/gcc/testsuite/ada/acats/tests/cxa/cxaa005.a b/gcc/testsuite/ada/acats/tests/cxa/cxaa005.a
new file mode 100644
index 000000000..7b2a0bc39
--- /dev/null
+++ b/gcc/testsuite/ada/acats/tests/cxa/cxaa005.a
@@ -0,0 +1,292 @@
+-- CXAA005.A
+--
+-- Grant of Unlimited Rights
+--
+-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687,
+-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained
+-- unlimited rights in the software and documentation contained herein.
+-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making
+-- this public release, the Government intends to confer upon all
+-- recipients unlimited rights equal to those held by the Government.
+-- These rights include rights to use, duplicate, release or disclose the
+-- released technical data and computer software in whole or in part, in
+-- any manner and for any purpose whatsoever, and to have or permit others
+-- to do so.
+--
+-- DISCLAIMER
+--
+-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR
+-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED
+-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE
+-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE
+-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A
+-- PARTICULAR PURPOSE OF SAID MATERIAL.
+--*
+--
+-- OBJECTIVE:
+-- Check that the procedure Put, when called with string parameters, does
+-- not update the line number of a text file of mode Append_File, when
+-- the line length is unbounded (i.e., only the column number is
+-- updated).
+-- Check that a call to the procedure Put with a null string argument
+-- has no measurable effect on a text file of mode Append_File.
+--
+-- TEST DESCRIPTION:
+-- This test is designed to ensure that when a string is appended to an
+-- unbounded text file, it is placed following the last element currently
+-- in the file. For an unbounded text file written with Put procedures
+-- only (not Put_Line), the line number should not be incremented by
+-- subsequent calls to Put in Append_File mode. Only the column number
+-- should be incremented based on the length of the string parameter
+-- placed in the file. If a call to Put with a null string argument is
+-- made, no change to the line or column number should occur, and no
+-- element(s) should be added to the file, so that there would be no
+-- measurable change to the file.
+--
+-- APPLICABILITY CRITERIA:
+-- This test is applicable to all implementations that support Text_IO
+-- processing and external files.
+--
+--
+-- CHANGE HISTORY:
+-- 06 Dec 94 SAIC ACVC 2.0
+-- 24 Feb 97 CTA.PWB Allowed for non-support of some IO operations.
+--!
+
+with Ada.Text_IO;
+with Report;
+
+procedure CXAA005 is
+ An_Unbounded_File : Ada.Text_IO.File_Type;
+ Unbounded_File_Name : constant String :=
+ Report.Legal_File_Name ( Nam => "CXAA005" );
+ Incomplete : exception;
+
+begin
+
+ Report.Test ("CXAA005", "Check that the procedure Put does not " &
+ "increment line numbers when used with " &
+ "unbounded text files of mode Append_File");
+
+ Test_for_Text_IO_Support:
+ begin
+
+ -- An application creates a text file in mode Out_File, with the intention
+ -- of entering string data packets into the file as appropriate. In the
+ -- event that the particular environment where the application is running
+ -- does not support Text_IO, Use_Error will be raised on calls to Text_IO
+ -- operations.
+ -- This exception will be handled to produce a Not_Applicable result.
+
+ Ada.Text_IO.Create (File => An_Unbounded_File,
+ Mode => Ada.Text_IO.Out_File,
+ Name => Unbounded_File_Name);
+ exception
+ when Ada.Text_IO.Use_Error | Ada.Text_IO.Name_Error =>
+ Report.Not_Applicable
+ ( "Files not supported - Create for Text_IO" );
+ raise Incomplete;
+ end Test_For_Text_IO_Support;
+
+ Operational_Test_Block:
+ declare
+ subtype String_Sequence_Type is string (1 .. 20);
+ type String_Pointer_Type is access String_Sequence_Type;
+
+-- During the course of processing, the application creates a variety of data
+-- pointers that refer to particular data items. The possibility of having
+-- null data values in this environment exists.
+
+ Data_Packet_1 : String_Pointer_Type :=
+ new String_Sequence_Type'("One Data Sequence 01");
+
+ Data_Packet_2 : String_Pointer_Type :=
+ new String_Sequence_Type'("New Data Sequence 02");
+
+ Blank_Data_Packet : String_Pointer_Type :=
+ new String_Sequence_Type'(" ");
+
+ Null_Data_Packet : constant String := "";
+
+ TC_Line, TC_Col : Natural := 0;
+
+ function TC_Mode_Selection (Selector : Integer)
+ return Ada.Text_IO.File_Mode is
+ begin
+ case Selector is
+ when 1 => return Ada.Text_IO.In_File;
+ when 2 => return Ada.Text_IO.Out_File;
+ when others => return Ada.Text_IO.Append_File;
+ end case;
+ end TC_Mode_Selection;
+
+ begin
+
+-- The application places some data into the file, using the Put subroutine.
+-- This operation can occur one-to-many times.
+
+ Ada.Text_IO.Put (An_Unbounded_File, Data_Packet_1.all);
+
+ -- Test control code.
+ if (Integer(Ada.Text_IO.Col (An_Unbounded_File)) /=
+ Report.Ident_Int(21)) or
+ (Integer(Ada.Text_IO.Line (An_Unbounded_File)) /=
+ Report.Ident_Int(1)) then
+ Report.Failed ("Incorrect Col position after 1st Put");
+ end if;
+
+-- The application may close the file at some point following its initial
+-- entry of data.
+
+ Ada.Text_IO.Close (An_Unbounded_File);
+
+-- At some later point in the processing, more data needs to be added to the
+-- file, so the application opens the file in Append_File mode.
+
+ Ada.Text_IO.Open (File => An_Unbounded_File,
+ Mode => Ada.Text_IO.Append_File,
+ Name => Unbounded_File_Name);
+
+ -- Test control code.
+ -- Store line/column number for later comparison.
+ TC_Line := Natural(Ada.Text_IO.Line(An_Unbounded_File));
+ TC_Col := Natural(Ada.Text_IO.Col(An_Unbounded_File));
+
+-- Additional data items can then be appended to the file.
+
+ Ada.Text_IO.Put (An_Unbounded_File, Blank_Data_Packet.all);
+
+ -- Test control code.
+ if (Natural(Ada.Text_IO.Col (An_Unbounded_File)) /=
+ (TC_Col + 20)) or
+ (Natural(Ada.Text_IO.Line (An_Unbounded_File)) /=
+ TC_Line) then
+ Report.Failed ("Incorrect Col position after 2nd Put");
+ end if;
+
+-- In order to accommodate various scenarios, the application may have changed
+-- the mode of the data file to In_File in order to retrieve/verify some of
+-- the data contained there. However, with the need to place more data into
+-- the file, the file can be reset to Append_File mode.
+
+ Reset1:
+ begin
+ Ada.Text_IO.Reset (An_Unbounded_File,
+ TC_Mode_Selection (Report.Ident_Int(3)));
+ exception
+ when Ada.Text_IO.Use_Error =>
+ Report.Not_Applicable
+ ( "Reset to Append_File not supported for Text_IO" );
+ raise Incomplete;
+ end Reset1;
+
+ -- Test control code.
+ -- Store line/column number for later comparison.
+ TC_Line := Natural(Ada.Text_IO.Line(An_Unbounded_File));
+ TC_Col := Natural(Ada.Text_IO.Col(An_Unbounded_File));
+
+-- Additional data can then be appended to the file. On some occasions, an
+-- attempt to enter a null string value into the file may occur. This should
+-- have no effect on the file, leaving it unchanged.
+
+ -- No measurable effect from Put with null string.
+ Ada.Text_IO.Put (An_Unbounded_File, Null_Data_Packet);
+
+ -- Test control code.
+ -- There should be no change following the Put above.
+ if (Natural(Ada.Text_IO.Col (An_Unbounded_File)) /=
+ TC_Col) or
+ (Natural(Ada.Text_IO.Line (An_Unbounded_File)) /=
+ TC_Line) then
+ Report.Failed ("Incorrect Col position after 3rd Put");
+ end if;
+
+-- Additional data can be appended to the file.
+
+ Ada.Text_IO.Put (An_Unbounded_File, Data_Packet_2.all);
+
+ -- Test control code.
+ if (Natural(Ada.Text_IO.Col (An_Unbounded_File)) /=
+ (TC_Col + 20)) or
+ (Integer(Ada.Text_IO.Line (An_Unbounded_File)) /=
+ TC_Line) then
+ Report.Failed ("Incorrect Col position after 4th Put");
+ end if;
+
+ Test_Verification_Block:
+ declare
+ File_Data : String (1 .. 80);
+ TC_Width : Natural;
+ begin
+
+-- The application has the capability to reset the file to In_File mode to
+-- verify some of the data that is contained there.
+
+ Reset2:
+ begin
+ Ada.Text_IO.Reset (An_Unbounded_File, Ada.Text_IO.In_File);
+ exception
+ when Ada.Text_IO.Use_Error =>
+ Report.Not_Applicable
+ ( "Reset to In_File not supported - Text_IO" );
+ raise Incomplete;
+ end Reset2;
+
+ Ada.Text_IO.Get_Line (An_Unbounded_File,
+ File_Data,
+ TC_Width);
+
+ -- Test control code.
+ -- Since it is implementation defined whether a page
+ -- terminator separates preexisting text from new text
+ -- following an open in append mode (as occurred above),
+ -- verify only that the first data item written to the
+ -- file was not overwritten by any subsequent call to Put.
+
+ if (File_Data (File_Data'First) /= 'O') or
+ (File_Data (20) /= '1') then
+ Report.Failed ("Data placed incorrectly in file");
+ end if;
+
+ exception
+ when Incomplete =>
+ raise;
+ when others =>
+ Report.Failed ("Error raised during data verification");
+ end Test_Verification_Block;
+
+ exception
+ when Incomplete =>
+ raise;
+ when others =>
+ Report.Failed ("Exception in Text_IO processing");
+ end Operational_Test_Block;
+
+ Final_Block:
+ begin
+ -- Delete the external file.
+ if Ada.Text_IO.Is_Open(An_Unbounded_File) then
+ Ada.Text_IO.Delete (An_Unbounded_File);
+ else
+ Ada.Text_IO.Open(An_Unbounded_File,
+ Ada.Text_IO.In_File,
+ Unbounded_File_Name);
+ Ada.Text_IO.Delete (An_Unbounded_File);
+ end if;
+ exception
+ when others =>
+ Report.Failed
+ ( "Delete not properly implemented -- Text_IO" );
+ end Final_Block;
+
+ Report.Result;
+
+exception
+
+ when Incomplete =>
+ Report.Result;
+ when others =>
+ Report.Failed ( "Unexpected exception" );
+ Report.Result;
+
+end CXAA005;