|
|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 Tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: B T
Length: 22750 (0x58de)
Types: TextFile
Names: »B«
└─⟦180fe333a⟧ Bits:30000405 8mm tape, Rational 1000, SW CATALOG, 10_20_0
└─⟦180fe333a⟧ Bits:30000537 8mm tape, Rational 1000, SW Catalog 10_20_0
└─⟦5cb1d1d7f⟧ »DATA«
└─⟦3b1ee7bd8⟧
└─⟦this⟧
with Io;
with Compilation;
with Unit_Test_Fragments;
separate (Test_Program_Generation)
procedure Generate_Unit_Test_Program
(In_Context : String; From_Data : Unit_Test_Data) is
Temp_File : Io.File_Type;
Subprogram_Iter : Subprogram_Map.Iterator;
One_Subprogram : Subprogram_Record;
Unique_Param_Iter : Parameter_Id_Set.Iterator;
Unique_Parameter : Parameter_Id;
Parameter_Iter : Parameter_List.Iterator;
A_Parameter : Parameter_Record;
Found_First_Out_Parameter : Boolean := False;
Package_Prefix : Ada_Name;
This_Package : constant String := Bounded.Image (From_Data.Package_Name);
Iter : String_Table.Iterator;
procedure Put_Line (Line : String) is
begin
Io.Put_Line (Temp_File, Line);
end Put_Line;
procedure Put (Line : String) is
begin
Io.Put (Temp_File, Line);
end Put;
package Add is new Unit_Test_Fragments (Put_Line, Put);
function Parameter_Image (Param : Parameter_Record) return String is
begin
if Param.Is_Predefined then
return Bounded.Image (Param.Id.Type_Name);
else
return Bounded.Image (Param.Id.Package_Name) &
"." & Bounded.Image (Param.Id.Type_Name);
end if;
end Parameter_Image;
begin
Io.Create (Temp_File, Io.Out_File, Temp_File_Name);
-- TEST PACKAGE SPEC
Add.Test_Package (This_Package, Spec => True);
Add.New_Line;
Add.Open_And_Close (Spec => True, Package_Name => "not necessary");
Add.New_Line;
Subprogram_Map.Init (Subprogram_Iter, From_Data.Map);
while not Subprogram_Map.Done (Subprogram_Iter) loop
One_Subprogram := Subprogram_Map.Eval
(From_Data.Map, Subprogram_Map.Value
(Subprogram_Iter));
Add.Test_Subprogram
(This_Package, Bounded.Image (One_Subprogram.Test_Name),
Spec => True,
Subunit => False);
Add.New_Line;
Subprogram_Map.Next (Subprogram_Iter);
end loop;
Add.End_Token;
-- TEST PACKAGE BODY
-- WITH CLAUSES
String_Table.Init (Iter, From_Data.Unique_Package_Refs);
while not String_Table.Done (Iter) loop
Add.With_Clause (String_Table.Image (String_Table.Value (Iter)));
String_Table.Next (Iter);
end loop;
Add.New_Line;
Add.With_Clause ("Debug_Tools");
Add.With_Clause ("Report");
if From_Data.String_Parameter_Found then
Add.With_Clause ("Unbounded_String");
end if;
-- BODY HEADER
Add.Test_Package (This_Package, Spec => False);
Add.New_Line;
-- EQUALITY RENAMES
if From_Data.String_Parameter_Found then
Add.Unbounded_Instantiation;
end if;
Add.New_Line;
Parameter_Id_Set.Init (Unique_Param_Iter, From_Data.Unique_Parameters);
while not Parameter_Id_Set.Done (Unique_Param_Iter) loop
Unique_Parameter := Parameter_Id_Set.Value (Unique_Param_Iter);
if Unique_Parameter.Kind = Other then
Add.Equality_Renames (Bounded.Image (Unique_Parameter.Package_Name),
Bounded.Image (Unique_Parameter.Type_Name));
Add.New_Line;
Add.New_Line;
end if;
Parameter_Id_Set.Next (Unique_Param_Iter);
end loop;
-- TYPE DECLS FOR PARAMETERS:
Subprogram_Map.Init (Subprogram_Iter, From_Data.Map);
while not Subprogram_Map.Done (Subprogram_Iter) loop
One_Subprogram := Subprogram_Map.Eval
(From_Data.Map, Subprogram_Map.Value
(Subprogram_Iter));
-- PARAMETER RECORD COMPONENTS
Add.Parameter_Record_Header (Bounded.Image (One_Subprogram.Test_Name));
Parameter_List.Init (Parameter_Iter, One_Subprogram.Parameters);
while not Parameter_List.Done (Parameter_Iter) loop
A_Parameter := Parameter_List.Value (Parameter_Iter);
case A_Parameter.Mode is
when In_Mode =>
Add.Component_Decl
(Add.Component_Name
(Bounded.Image (A_Parameter.Formal_Name), Add.Input,
Bounded.Image (A_Parameter.Id.Type_Name)),
Parameter_Image (A_Parameter), A_Parameter.Is_String,
Bounded.Image (A_Parameter.Initial_Expression));
when Out_Mode =>
Add.Component_Decl
(Add.Component_Name
(Bounded.Image (A_Parameter.Formal_Name),
Add.Expected,
Bounded.Image (A_Parameter.Id.Type_Name)),
Parameter_Image (A_Parameter), A_Parameter.Is_String,
Bounded.Image (A_Parameter.Initial_Expression));
when In_Out_Mode =>
Add.Component_Decl
(Add.Component_Name
(Bounded.Image (A_Parameter.Formal_Name), Add.Input,
Bounded.Image (A_Parameter.Id.Type_Name)),
Parameter_Image (A_Parameter), A_Parameter.Is_String,
Bounded.Image (A_Parameter.Initial_Expression));
Add.Component_Decl
(Add.Component_Name
(Bounded.Image (A_Parameter.Formal_Name),
Add.Expected,
Bounded.Image (A_Parameter.Id.Type_Name)),
Parameter_Image (A_Parameter), A_Parameter.Is_String,
Bounded.Image (A_Parameter.Initial_Expression));
end case;
Parameter_List.Next (Parameter_Iter);
end loop;
case One_Subprogram.Kind is
when A_Function =>
Add.Component_Decl
("Expected_Function_Return_Value",
Parameter_Image (One_Subprogram.Return_Type),
One_Subprogram.Return_Type.Is_String, "[expression]");
when A_Procedure =>
null;
end case;
Add.New_Line;
Add.End_Token (Add.A_Record);
Add.New_Line;
Subprogram_Map.Next (Subprogram_Iter);
end loop;
-- IMAGE FUNCTIONS
Parameter_Id_Set.Init (Unique_Param_Iter, From_Data.Unique_Parameters);
while not Parameter_Id_Set.Done (Unique_Param_Iter) loop
Unique_Parameter := Parameter_Id_Set.Value (Unique_Param_Iter);
if Unique_Parameter.Kind = Other then
Add.Images (Bounded.Image (Unique_Parameter.Package_Name),
Bounded.Image (Unique_Parameter.Type_Name));
Add.New_Line;
end if;
Parameter_Id_Set.Next (Unique_Param_Iter);
end loop;
-- OPEN AND CLOSE
Add.Open_And_Close (Spec => False,
Package_Name => Bounded.Image (From_Data.Package_Name));
Add.New_Line;
-- TEST SUBPROGRAMS
Subprogram_Map.Init (Subprogram_Iter, From_Data.Map);
while not Subprogram_Map.Done (Subprogram_Iter) loop
One_Subprogram := Subprogram_Map.Eval
(From_Data.Map, Subprogram_Map.Value
(Subprogram_Iter));
-- YIELD PROCEDURE
Add.Yield_Procedure (Bounded.Image (One_Subprogram.Test_Name));
Add.New_Line;
-- SUBPROGRAM STUB
Add.Test_Subprogram
(This_Package, Bounded.Image (One_Subprogram.Test_Name),
Spec => False,
Subunit => False);
Add.New_Line;
Subprogram_Map.Next (Subprogram_Iter);
end loop;
Add.End_Token;
-- DO ALL PROCEDURES AS SUBUNITS
Subprogram_Map.Init (Subprogram_Iter, From_Data.Map);
while not Subprogram_Map.Done (Subprogram_Iter) loop
One_Subprogram := Subprogram_Map.Eval
(From_Data.Map, Subprogram_Map.Value
(Subprogram_Iter));
Subprogram_Map.Next (Subprogram_Iter);
-- PROCEDURE HEADER
Add.Test_Subprogram
(This_Package, Bounded.Image (One_Subprogram.Test_Name),
Spec => False,
Subunit => True);
Add.New_Line;
Add.Local_Decls (Bounded.Image (One_Subprogram.Test_Name));
Add.New_Line;
case One_Subprogram.Kind is
when A_Function =>
Add.Function_Return_Value
(One_Subprogram.Return_Type.Is_String,
Parameter_Image (One_Subprogram.Return_Type));
when A_Procedure =>
Parameter_List.Init (Parameter_Iter, One_Subprogram.Parameters);
while not Parameter_List.Done (Parameter_Iter) loop
A_Parameter := Parameter_List.Value (Parameter_Iter);
case A_Parameter.Mode is
when Out_Mode =>
Add.Local_Output_Value
(Add.Component_Name
(Bounded.Image (A_Parameter.Formal_Name),
Add.Output,
Bounded.Image (A_Parameter.Id.Type_Name)),
Parameter_Image (A_Parameter),
A_Parameter.Is_String);
when In_Mode | In_Out_Mode =>
null;
end case;
Parameter_List.Next (Parameter_Iter);
end loop;
end case;
Add.New_Line;
Add.Begin_Token;
Add.New_Line;
Add.Begin_Execution (Naming.Unique_Full_Name
(One_Subprogram.Subprogram_Object));
Add.Report_New_Line;
Add.New_Line;
Add.While_Terminate_Loop_Header;
Add.New_Line;
Add.Report_Capture_Output;
Add.New_Line;
-- CALL YIELD FUNCTION
Add.Yield_Call;
Add.Report_New_Line;
Add.New_Line;
-- REPORT INPUT VALUES
Add.Report_Comments ("INPUTS:");
Add.Report_New_Line;
Add.New_Line;
Parameter_List.Init (Parameter_Iter, One_Subprogram.Parameters);
while not Parameter_List.Done (Parameter_Iter) loop
A_Parameter := Parameter_List.Value (Parameter_Iter);
case A_Parameter.Mode is
when In_Mode | In_Out_Mode =>
Add.Report_Value
(Bounded.Image (A_Parameter.Formal_Name),
Bounded.Image (One_Subprogram.Test_Name),
"Parameters." &
Add.Component_Name
(Bounded.Image (A_Parameter.Formal_Name),
Add.Input,
Bounded.Image (A_Parameter.Id.Type_Name)),
A_Parameter.Is_String, A_Parameter.Id.Kind = Other);
when Out_Mode =>
null;
end case;
Parameter_List.Next (Parameter_Iter);
end loop;
Add.New_Line;
Add.Report_New_Line;
Add.Report_New_Line;
Add.New_Line;
-- CALL TO SUBPROGRAM
case One_Subprogram.Kind is
when A_Function =>
Add.Function_Call (This_Package,
Bounded.Image (One_Subprogram.Simple_Name),
One_Subprogram.Return_Type.Is_String);
when A_Procedure =>
Add.Procedure_Call (This_Package,
Bounded.Image (One_Subprogram.Simple_Name));
end case;
Parameter_List.Init (Parameter_Iter, One_Subprogram.Parameters);
if Parameter_List.Done (Parameter_Iter) then
Add.Put_String (";");
else
Add.Put_String ("(");
end if;
while not Parameter_List.Done (Parameter_Iter) loop
A_Parameter := Parameter_List.Value (Parameter_Iter);
Parameter_List.Next (Parameter_Iter);
case A_Parameter.Mode is
when In_Mode | In_Out_Mode =>
Add.Actual_Parameter
(Bounded.Image (A_Parameter.Formal_Name),
Bounded.Image (One_Subprogram.Test_Name),
"Parameters." &
Add.Component_Name
(Bounded.Image (A_Parameter.Formal_Name),
Add.Input,
Bounded.Image (A_Parameter.Id.Type_Name)),
A_Parameter.Is_String,
Parameter_List.Done (Parameter_Iter),
One_Subprogram.Return_Type.Is_String);
when Out_Mode =>
Add.Actual_Parameter
(Bounded.Image (A_Parameter.Formal_Name),
Bounded.Image (One_Subprogram.Test_Name),
Add.Component_Name
(Bounded.Image (A_Parameter.Formal_Name), Add.Output,
Bounded.Image (A_Parameter.Id.Type_Name)),
A_Parameter.Is_String,
Parameter_List.Done (Parameter_Iter),
One_Subprogram.Return_Type.Is_String);
end case;
end loop;
Add.New_Line;
Add.Report_New_Line;
Add.New_Line;
-- REPORT OUTPUT VALUES
Parameter_List.Init (Parameter_Iter, One_Subprogram.Parameters);
while not Parameter_List.Done (Parameter_Iter) loop
A_Parameter := Parameter_List.Value (Parameter_Iter);
case A_Parameter.Mode is
when In_Out_Mode =>
Add.Report_Comments ("EXPECTED VALUE:");
Add.Report_New_Line;
Add.Report_Value
(Bounded.Image (A_Parameter.Formal_Name),
Bounded.Image (One_Subprogram.Test_Name),
"Parameters." &
Add.Component_Name
(Bounded.Image (A_Parameter.Formal_Name),
Add.Expected,
Bounded.Image (A_Parameter.Id.Type_Name)),
A_Parameter.Is_String, A_Parameter.Id.Kind = Other);
Add.New_Line;
Add.Report_Comments ("ACTUAL OUTPUTS:");
Add.Report_New_Line;
Add.Report_Value
(Bounded.Image (A_Parameter.Formal_Name),
Bounded.Image (One_Subprogram.Test_Name),
"Parameters." &
Add.Component_Name
(Bounded.Image (A_Parameter.Formal_Name),
Add.Input,
Bounded.Image (A_Parameter.Id.Type_Name)),
A_Parameter.Is_String, A_Parameter.Id.Kind = Other);
when Out_Mode =>
Add.Report_Comments ("EXPECTED VALUE:");
Add.Report_New_Line;
Add.New_Line;
Add.Report_Value
(Bounded.Image (A_Parameter.Formal_Name),
Bounded.Image (One_Subprogram.Test_Name),
"Parameters." &
Add.Component_Name
(Bounded.Image (A_Parameter.Formal_Name),
Add.Expected,
Bounded.Image (A_Parameter.Id.Type_Name)),
A_Parameter.Is_String, A_Parameter.Id.Kind = Other);
Add.Report_Comments ("ACTUAL OUTPUTS:");
Add.Report_New_Line;
Add.New_Line;
Add.Report_Value
(Bounded.Image (A_Parameter.Formal_Name),
Bounded.Image (One_Subprogram.Test_Name),
Add.Component_Name
(Bounded.Image (A_Parameter.Formal_Name), Add.Output,
Bounded.Image (A_Parameter.Id.Type_Name)),
A_Parameter.Is_String, A_Parameter.Id.Kind = Other);
when In_Mode =>
null;
end case;
Parameter_List.Next (Parameter_Iter);
end loop;
A_Parameter := One_Subprogram.Return_Type;
Add.New_Line;
Add.Report_New_Line;
Add.New_Line;
case One_Subprogram.Kind is
when A_Function =>
Add.New_Line;
Add.Report_Value ("EXPECTED RETURN VALUE", "",
"Parameters.expected_function_return_value",
A_Parameter.Is_String,
A_Parameter.Id.Kind = Other);
Add.New_Line;
Add.Report_Value ("ACTUAL RETURN VALUE", "",
"Function_Return_Value",
A_Parameter.Is_String,
A_Parameter.Id.Kind = Other);
when A_Procedure =>
null;
end case;
Add.New_Line;
Add.Report_New_Line;
Add.Report_New_Line;
Add.New_Line;
Add.Terminate_Execution;
Add.Report_New_Line;
Add.New_Line;
case One_Subprogram.Kind is
when A_Function =>
Add.If_Token;
Add.New_Line;
Add.Function_Return_Compare
(One_Subprogram.Return_Type.Is_String);
Add.Then_Token;
Add.Report_Passed;
Add.Else_Token;
Add.Report_Failed;
Add.End_Token (Add.An_If);
when A_Procedure =>
if One_Subprogram.Out_Parameters_Found then
Add.If_Token;
Add.New_Line;
Parameter_List.Init (Parameter_Iter,
One_Subprogram.Parameters);
while not Parameter_List.Done (Parameter_Iter) loop
A_Parameter := Parameter_List.Value (Parameter_Iter);
Parameter_List.Next (Parameter_Iter);
case A_Parameter.Mode is
when In_Out_Mode =>
if Found_First_Out_Parameter then
Add.New_Line;
Add.And_Token;
Add.New_Line;
else
Found_First_Out_Parameter := True;
end if;
Add.Comparison
("Parameters." &
Add.Component_Name
(Bounded.Image (A_Parameter.Formal_Name),
Add.Expected,
Bounded.Image
(A_Parameter.Id.Type_Name)),
"Parameters." &
Add.Component_Name
(Bounded.Image
(A_Parameter.Formal_Name),
Add.Input, Bounded.Image
(A_Parameter.Id.
Type_Name)),
A_Parameter.Is_String);
when Out_Mode =>
if Found_First_Out_Parameter then
Add.New_Line;
Add.And_Token;
Add.New_Line;
else
Found_First_Out_Parameter := True;
end if;
Add.Comparison
("Parameters." &
Add.Component_Name
(Bounded.Image (A_Parameter.Formal_Name),
Add.Expected,
Bounded.Image
(A_Parameter.Id.Type_Name)),
Add.Component_Name
(Bounded.Image (A_Parameter.Formal_Name),
Add.Output,
Bounded.Image
(A_Parameter.Id.Type_Name)),
A_Parameter.Is_String);
when In_Mode =>
null;
end case;
end loop;
Add.Then_Token;
Add.Report_Passed;
Add.Else_Token;
Add.Report_Failed;
Add.End_Token (Add.An_If);
end if;
end case;
Add.New_Line;
Add.Report_New_Line;
Add.Report_New_Line;
Add.End_Token (Add.A_Loop);
Add.Exception_Handler;
-- FINAL END
Add.End_Token;
end loop;
-- BUILD MAIN PROGRAM
Add.With_Clause (Unit => "Test_" & This_Package);
Add.Main_Program (This_Package);
Add.Begin_Token;
Add.Call_Test_Open (This_Package);
Subprogram_Map.Init (Subprogram_Iter, From_Data.Map);
while not Subprogram_Map.Done (Subprogram_Iter) loop
One_Subprogram := Subprogram_Map.Eval
(From_Data.Map, Subprogram_Map.Value
(Subprogram_Iter));
Subprogram_Map.Next (Subprogram_Iter);
Add.Call_Test_Subprogram (This_Package,
Bounded.Image (One_Subprogram.Test_Name));
Add.New_Line;
end loop;
Add.Call_Test_Close (This_Package);
Add.End_Token;
Add.Pragma_Main;
Io.Close (Temp_File);
Compilation.Parse (Temp_File_Name, In_Context);
if not Testing then
Io.Open (Temp_File, Io.In_File, Temp_File_Name);
Io.Delete (Temp_File);
end if;
end Generate_Unit_Test_Program;