-- 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;