view gcc/testsuite/ada/acats/tests/cxa/cxaf001.a @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children
line wrap: on
line source

-- CXAF001.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 an implementation supports the functionality defined
--      in Package Ada.Command_Line.
--
-- TEST DESCRIPTION:
--      This test verifies that an implementation supports the subprograms
--      contained in package Ada.Command_Line.  Each of the subprograms
--      is exercised in a general sense, to ensure that it is available,
--      and that it provides the prescribed results in a known test 
--      environment.  Function Argument_Count must return zero, or the 
--      number of arguments passed to the program calling it.  Function
--      Argument is called with a parameter value one greater than the
--      actual number of arguments passed to the executing program, which
--      must result in Constraint_Error being raised.  Function Command_Name
--      should return the name of the executing program that called it
--      (specifically, this test name).  Function Set_Exit_Status is called
--      with two different parameter values, the constants Failure and 
--      Success defined in package Ada.Command_Line.
--
--      The setting of the variable TC_Verbose allows for some additional
--      output to be displayed during the running of the test as an aid in
--      tracing the processing flow of the test.
--
-- APPLICABILITY CRITERIA: 
--      This test is applicable to implementations that support the 
--      declaration of package Command_Line as defined in the Ada Reference 
--      manual. 
--      An alternative declaration is allowed for package Command_Line if 
--      different functionality is appropriate for the external execution
--      environment.
--
--       
-- CHANGE HISTORY:
--      10 Jul 95   SAIC    Initial prerelease version.
--      02 May 96   SAIC    Incorporated reviewer comments for ACVC 2.1.
--      05 AUG 98   EDS     Allow Null string result to be returned from
--                          Function Command
--!

with Ada.Command_Line;
with Ada.Exceptions;
with Report;

procedure CXAF001 is
begin

   Report.Test ("CXAF001", "Check that an implementation supports the " &
                           "functionality defined in Package "          &
                           "Ada.Command_Line");

   Test_Block:
   declare

      use Ada.Exceptions;

      type String_Access is access all String;

      TC_Verbose           : Boolean := False;
      Number_Of_Arguments  : Natural := Natural'Last;
      Name_Of_Command      : String_Access;

   begin

      -- Check the result of function Argument_Count.
      -- Note: If the external environment does not support passing arguments
      --       to the program invoking the function, the function result
      --       will be zero.

      Number_Of_Arguments := Ada.Command_Line.Argument_Count;
      if Number_Of_Arguments = Natural'Last then
         Report.Failed("Argument_Count did not provide a return result");
      end if;
      if TC_Verbose then
         Report.Comment
           ("Argument_Count = " & Integer'Image(Number_Of_Arguments));
      end if;


      -- Check that the result of Function Argument is Constraint_Error
      -- when the Number argument is outside the range of 1..Argument_Count.

      Test_Function_Argument_1 :
      begin
         declare

            -- Define a value that will be outside the range of 
            -- 1..Argument_Count. 
            -- Note: If the external execution environment does not support
            --       passing arguments to a program, then Argument(N) for 
            --       any N will raise Constraint_Error, since 
            --       Argument_Count = 0;

            Arguments_Plus_One : Positive := 
              Ada.Command_Line.Argument_Count + 1;

            -- Using the above value in a call to Argument must result in
            -- the raising of Constraint_Error.

            Argument_String    : constant String := 
              Ada.Command_Line.Argument(Arguments_Plus_One);

         begin
            Report.Failed("Constraint_Error not raised by Function "  &
                          "Argument when provided a Number argument " &
                          "out of range");
         end;
      exception
         when Constraint_Error => null;  -- OK, expected exception.
            if TC_Verbose then
              Report.Comment ("Argument_Count raised Constraint_Error");
            end if;
         when others => 
            Report.Failed ("Unexpected exception raised by Argument " &
                           "in Test_Function_Argument_1 block");
      end Test_Function_Argument_1;


      -- Check that Function Argument returns a string result.

      Test_Function_Argument_2 :
      begin
         if Ada.Command_Line.Argument_Count > 0 then
            Report.Comment
              ("Last argument is: " &
               Ada.Command_Line.Argument(Ada.Command_Line.Argument_Count));
         elsif TC_Verbose then
            Report.Comment("Argument_Count is zero, no test of Function " &
                           "Argument for string result");
         end if;
      exception
         when others => 
            Report.Failed ("Unexpected exception raised by Argument " &
                           "in Test_Function_Argument_2 block");
      end Test_Function_Argument_2;


      -- Check the result of Function Command_Name.

      Name_Of_Command := new String'(Ada.Command_Line.Command_Name);

      if Name_Of_Command = null  then
         Report.Failed("Null string pointer returned from Function Command");
      elsif Name_Of_Command.all = "" then
         Report.Comment("Null string result returned from Function Command");
      elsif TC_Verbose then
         Report.Comment("Invoking command is " & Name_Of_Command.all);
      end if;


      -- Check that procedure Set_Exit_Status is available.
      -- Note: If the external execution environment does not support
      --       returning an exit value from a program, then Set_Exit_Status
      --       does nothing.
      
      Ada.Command_Line.Set_Exit_Status(Ada.Command_Line.Failure);
      if TC_Verbose then
         Report.Comment("Exit status set to Failure");
      end if;

      Ada.Command_Line.Set_Exit_Status(Ada.Command_Line.Success);
      if TC_Verbose then
         Report.Comment("Exit status set to Success");
      end if;


   exception
      when The_Error : others => 
         Report.Failed ("The following exception was raised in the " &
                        "Test_Block: " & Exception_Name(The_Error));
   end Test_Block;

   Report.Result;

end CXAF001;