parse_args_0.9.0_635f9e4f/tests/src/parse_args-testable.ads

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
-- parse_args-testable.ads
-- A testable version of the Argument_Parser type

-- Copyright (c) 2016, James Humphry
--
-- Permission to use, copy, modify, and/or distribute this software for any
-- purpose with or without fee is hereby granted, provided that the above
-- copyright notice and this permission notice appear in all copies.
--
-- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
-- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
-- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
-- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-- PERFORMANCE OF THIS SOFTWARE.

pragma Profile(No_Implementation_Extensions);

with Ada.Containers.Vectors;
with Ada.Strings;
with Ada.Strings.Unbounded;

package Parse_Args.Testable is

   subtype Unbounded_String is Ada.Strings.Unbounded.Unbounded_String;

   function "+"(Source : in String) return Ada.Strings.Unbounded.Unbounded_String
                renames Ada.Strings.Unbounded.To_Unbounded_String;

   type Unbounded_String_Array is array (Integer range <>)
     of Ada.Strings.Unbounded.Unbounded_String;

   -- The package Unbounded_String_Vector and the actual record extension for
   -- Testable_Argument_Parser should be in the private part of this package.
   -- However GNAT GPL 2015 chokes if this is the case, so they have to be left
   -- public. As this is package is only used for testing, we can live with
   -- this.

   package Unbounded_String_Vector is
     new Ada.Containers.Vectors(Index_Type   => Positive,
                                Element_Type => Unbounded_String,
                               "="           => Ada.Strings.Unbounded."=");

   type Testable_Argument_Parser is new Argument_Parser with
      record
         Command_Name_Override : Unbounded_String
           :=  Ada.Strings.Unbounded.Null_Unbounded_String;
         Input_Arguments : Unbounded_String_Vector.Vector
           := Unbounded_String_Vector.Empty_Vector;
      end record;

   overriding function Command_Name(A : in Testable_Argument_Parser) return String;
   overriding function Argument_Count(A : in Testable_Argument_Parser)
                                      return Natural;
   overriding function Argument(A : in Testable_Argument_Parser;
                                Number : in Positive)
                     return String;
   not overriding procedure Clear_Arguments(A : in out Testable_Argument_Parser);
   not overriding procedure Append_Argument(A : in out Testable_Argument_Parser;
                                            S : in String);
   not overriding procedure Append_Arguments(A : in out Testable_Argument_Parser;
                                             S : in Unbounded_String_Array);
   not overriding procedure Set_Command_Name(A : in out Testable_Argument_Parser;
                                             S : in String);

private

end Parse_Args.Testable;