-- CA11A02.A -- -- Grant of Unlimited Rights -- -- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687 and -- F08630-91-C-0015, 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 a type extended in a client of a public child inherits -- primitive operations from parent. -- -- TEST DESCRIPTION: -- Declare a root tagged type in a package specification. Declare two -- primitive subprograms for the type (foundation code). -- -- Add a public child to the above package. Extend the root type with -- a record extension in the specification. Declare a new primitive -- subprogram to write to the child extension. -- -- In the main program, "with" the child. Declare an extension of -- the child extension. Access the primitive operations from both -- parent and child packages. -- -- TEST FILES: -- This test depends on the following foundation code: -- -- FA11A00.A -- -- -- CHANGE HISTORY: -- 06 Dec 94 SAIC ACVC 2.0 -- 20 Dec 94 SAIC Moved declaration of Label_Widget to library level -- --! package FA11A00.CA11A02_0 is -- Color_Widget_Pkg -- This public child declares an extension from its parent. It -- represents processing of widgets in a window system. type Widget_Color_Enum is (Black, Green, White); type Color_Widget is new Widget with -- Record extension of record -- parent tagged type. Color : Widget_Color_Enum; end record; -- Inherits procedure Set_Width from parent. -- Inherits procedure Set_Height from parent. -- To be inherited by its derivatives. procedure Set_Color (The_Widget : in out Color_Widget; C : in Widget_Color_Enum); end FA11A00.CA11A02_0; -- Color_Widget_Pkg --=======================================================================-- package body FA11A00.CA11A02_0 is -- Color_Widget_Pkg procedure Set_Color (The_Widget : in out Color_Widget; C : in Widget_Color_Enum) is begin The_Widget.Color := C; end Set_Color; end FA11A00.CA11A02_0; -- Color_Widget_Pkg --=======================================================================-- with FA11A00.CA11A02_0; -- Color_Widget_Pkg. package CA11A02_1 is type Label_Widget (Str_Disc : Integer) is new FA11A00.CA11A02_0.Color_Widget with record Label : String (1 .. Str_Disc); end record; -- Inherits (inherited) procedure Set_Width from Color_Widget. -- Inherits (inherited) procedure Set_Height from Color_Widget. -- Inherits procedure Set_Color from Color_Widget. end CA11A02_1; --=======================================================================-- with FA11A00.CA11A02_0; -- Color_Widget_Pkg, -- implicitly with Widget_Pkg with CA11A02_1; with Report; procedure CA11A02 is package Widget_Pkg renames FA11A00; package Color_Widget_Pkg renames FA11A00.CA11A02_0; use Widget_Pkg; -- All user-defined operators directly visible. procedure Set_Label (The_Widget : in out CA11A02_1.Label_Widget; L : in String) is begin The_Widget.Label := L; end Set_Label; --------------------------------------------------------- procedure Set_Widget (The_Widget : in out CA11A02_1.Label_Widget; The_Width : in Widget_Length; The_Height : in Widget_Length; The_Color : in Color_Widget_Pkg.Widget_Color_Enum; The_Label : in String) is begin CA11A02_1.Set_Width (The_Widget, The_Width); -- Twice inherited. CA11A02_1.Set_Height (The_Widget, The_Height); -- Twice inherited. CA11A02_1.Set_Color (The_Widget, The_Color); -- Inherited. Set_Label (The_Widget, The_Label); -- Explicitly declared. end Set_Widget; White_Widget : CA11A02_1.Label_Widget (11); begin Report.Test ("CA11A02", "Check that a type extended in a client of " & "a public child inherits primitive operations from parent"); Set_Widget (White_Widget, 15, 21, Color_Widget_Pkg.White, "Alarm_Clock"); If White_Widget.Width /= Widget_Length (Report.Ident_Int (15)) or White_Widget.Height /= Widget_Length (Report.Ident_Int (21)) or Color_Widget_Pkg."/=" (White_Widget.Color, Color_Widget_Pkg.White) or White_Widget.Label /= "Alarm_Clock" then Report.Failed ("Incorrect result for White_Widget"); end if; Report.Result; end CA11A02;