| -- CA11A01.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 type extended in a public child inherits primitive |
| -- operations from its ancestor. |
| -- |
| -- 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. |
| -- |
| -- Add a public grandchild to the above package. Extend the extension of |
| -- the parent type with a record extension in the private part of the |
| -- specification. Declare a new primitive subprogram for this grandchild |
| -- extension. |
| -- |
| -- In the main program, "with" the grandchild. Access the primitive |
| -- operations from grandparent and parent package. |
| -- |
| -- TEST FILES: |
| -- This test depends on the following foundation code: |
| -- |
| -- FA11A00.A |
| -- |
| -- |
| -- CHANGE HISTORY: |
| -- 06 Dec 94 SAIC ACVC 2.0 |
| -- |
| --! |
| |
| package FA11A00.CA11A01_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 Widget. |
| -- Inherits procedure Set_Height from Widget. |
| |
| -- To be inherited by its derivatives. |
| procedure Set_Color (The_Widget : in out Color_Widget; |
| C : in Widget_Color_Enum); |
| |
| procedure Set_Color_Widget (The_Widget : in out Color_Widget; |
| The_Width : in Widget_Length; |
| The_Height : in Widget_Length; |
| The_Color : in Widget_Color_Enum); |
| |
| end FA11A00.CA11A01_0; -- Color_Widget_Pkg |
| |
| --=======================================================================-- |
| |
| package body FA11A00.CA11A01_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; |
| --------------------------------------------------------------- |
| procedure Set_Color_Widget (The_Widget : in out Color_Widget; |
| The_Width : in Widget_Length; |
| The_Height : in Widget_Length; |
| The_Color : in Widget_Color_Enum) is |
| begin |
| Set_Width (The_Widget, The_Width); -- Inherited from parent. |
| Set_Height (The_Widget, The_Height); -- Inherited from parent. |
| Set_Color (The_Widget, The_Color); |
| end Set_Color_Widget; |
| |
| end FA11A00.CA11A01_0; -- Color_Widget_Pkg |
| |
| --=======================================================================-- |
| |
| package FA11A00.CA11A01_0.CA11A01_1 is -- Label_Widget_Pkg |
| -- This public grandchild extends the extension from its parent. It |
| -- represents processing of widgets in a window system. |
| |
| -- Declaration used by private extension component. |
| subtype Widget_Label_Str is string (1 .. 10); |
| |
| type Label_Widget is new Color_Widget with private; |
| -- Record extension of parent tagged type. |
| |
| -- Inherits (inherited) procedure Set_Width from Color_Widget. |
| -- Inherits (inherited) procedure Set_Height from Color_Widget. |
| -- Inherits procedure Set_Color from Color_Widget. |
| -- Inherits procedure Set_Color_Widget from Color_Widget. |
| |
| procedure Set_Label_Widget (The_Widget : in out Label_Widget; |
| The_Width : in Widget_Length; |
| The_Height : in Widget_Length; |
| The_Color : in Widget_Color_Enum; |
| The_Label : in Widget_Label_Str); |
| |
| -- The following function is needed to verify the value of the |
| -- extension's private component. |
| |
| function Verify_Label (The_Widget : in Label_Widget; |
| The_Label : in Widget_Label_Str) return Boolean; |
| |
| private |
| type Label_Widget is new Color_Widget with |
| record |
| Label : Widget_Label_Str; |
| end record; |
| |
| end FA11A00.CA11A01_0.CA11A01_1; -- Label_Widget_Pkg |
| |
| --=======================================================================-- |
| |
| package body FA11A00.CA11A01_0.CA11A01_1 is -- Label_Widget_Pkg |
| |
| procedure Set_Label (The_Widget : in out Label_Widget; |
| L : in Widget_Label_Str) is |
| begin |
| The_Widget.Label := L; |
| end Set_Label; |
| -------------------------------------------------------------- |
| procedure Set_Label_Widget (The_Widget : in out Label_Widget; |
| The_Width : in Widget_Length; |
| The_Height : in Widget_Length; |
| The_Color : in Widget_Color_Enum; |
| The_Label : in Widget_Label_Str) is |
| begin |
| Set_Width (The_Widget, The_Width); -- Twice inherited. |
| Set_Height (The_Widget, The_Height); -- Twice inherited. |
| Set_Color (The_Widget, The_Color); -- Inherited from parent. |
| Set_Label (The_Widget, The_Label); |
| end Set_Label_Widget; |
| -------------------------------------------------------------- |
| function Verify_Label (The_Widget : in Label_Widget; |
| The_Label : in Widget_Label_Str) return Boolean is |
| begin |
| return (The_Widget.Label = The_Label); |
| end Verify_Label; |
| |
| end FA11A00.CA11A01_0.CA11A01_1; -- Label_Widget_Pkg |
| |
| --=======================================================================-- |
| |
| with FA11A00.CA11A01_0.CA11A01_1; -- Label_Widget_Pkg, |
| -- implicitly with Widget_Pkg, |
| -- implicitly with Color_Widget_Pkg |
| with Report; |
| |
| procedure CA11A01 is |
| |
| package Widget_Pkg renames FA11A00; |
| package Color_Widget_Pkg renames FA11A00.CA11A01_0; |
| package Label_Widget_Pkg renames FA11A00.CA11A01_0.CA11A01_1; |
| |
| use Widget_Pkg; -- All user-defined operators directly visible. |
| |
| Mail_Label : Label_Widget_Pkg.Widget_Label_Str := "Quick_Mail"; |
| |
| Default_Widget : Widget; |
| Black_Widget : Color_Widget_Pkg.Color_Widget; |
| Mail_Widget : Label_Widget_Pkg.Label_Widget; |
| |
| begin |
| |
| Report.Test ("CA11A01", "Check that type extended in a public " & |
| "child inherits primitive operations from its " & |
| "ancestor"); |
| |
| Set_Width (Default_Widget, 9); -- Call from parent. |
| Set_Height (Default_Widget, 10); -- Call from parent. |
| |
| If Default_Widget.Width /= Widget_Length (Report.Ident_Int (9)) or |
| Default_Widget.Height /= Widget_Length (Report.Ident_Int (10)) then |
| Report.Failed ("Incorrect result for Default_Widget"); |
| end if; |
| |
| Color_Widget_Pkg.Set_Color_Widget |
| (Black_Widget, 17, 18, Color_Widget_Pkg.Black); -- Explicitly declared. |
| |
| If Black_Widget.Width /= Widget_Length (Report.Ident_Int (17)) or |
| Black_Widget.Height /= Widget_Length (Report.Ident_Int (18)) or |
| Color_Widget_Pkg."/=" (Black_Widget.Color, Color_Widget_Pkg.Black) then |
| Report.Failed ("Incorrect result for Black_Widget"); |
| end if; |
| |
| Label_Widget_Pkg.Set_Label_Widget |
| (Mail_Widget, 15, 21, Color_Widget_Pkg.White, |
| "Quick_Mail"); -- Explicitly declared. |
| |
| If Mail_Widget.Width /= Widget_Length (Report.Ident_Int (15)) or |
| Mail_Widget.Height /= Widget_Length (Report.Ident_Int (21)) or |
| Color_Widget_Pkg."/=" (Mail_Widget.Color, Color_Widget_Pkg.White) or |
| not Label_Widget_Pkg.Verify_Label (Mail_Widget, Mail_Label) then |
| Report.Failed ("Incorrect result for Mail_Widget"); |
| end if; |
| |
| Report.Result; |
| |
| end CA11A01; |