-- C392D03.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, for an inherited dispatching operation that is overridden,
--      the body executed is the body of the overriding subprogram, even if
--      the overriding occurs in a private part.
--
--      Check for the case where the overriding operation is declared in a
--      separate (non-child) package from that declaring the parent type, and
--      the descendant type is a record extension.
--
--      Check for both dispatching and nondispatching calls.
--
-- TEST DESCRIPTION:
--      Consider:
--
--      package P is
--         type Root is tagged ...
--         procedure Op (A: Root);
--      end P;
--
--      with P;
--      package Q is
--         type Derived1 is new P.Root with record...
--         -- Implicit procedure Op (A: Derived1) declared here.
--         type Derived2 is new P.Root with private...
--         -- Implicit procedure Op (A: Derived2) declared here.
--         type New_Derived is new Derived1 with private...
--         -- Implicit procedure Op (A: New_Derived) declared here.
--      private
--         procedure Op (A: Derived1);  -- Overrides parent's Op.
--         type Derived2 is new P.Root with record...
--         procedure Op (A: Derived2);  -- Overrides parent's Op.
--         type New_Derived is new Derived1 with record...
--         ...
--      end Q;
--
--      Both type Derived1 and Derived2 inherit Op from the parent type Root. 
--      Type New_Derived inherits (inherited) Op from Derived1.  The inherited 
--      operation is implicitly declared immediately after the type extension.  
--      The inherited operation is overridden by an explicit declaration in 
--      the private part. Even though the overriding operation is private, 
--      calls to Op with an operand of tag Derived1, Derived2, or New_Derived
--      will execute the body of the overriding operation.
--
-- TEST FILES:
--      The following files comprise this test:
--
--         F392D00.A
--         C392D03.A
--
--
-- CHANGE HISTORY:
--      06 Dec 94   SAIC    ACVC 2.0
--
--!

with F392D00;
package C392D03_0 is

   type Aperture is (Eight, Sixteen);     

   type Auto_Focus is new F392D00.Remote_Camera with record
      -- ...
      FStop : Aperture;
   end record;

   -- Implicit procedure Focus (C     : in out Auto_Focus;
   --                           Depth : in     Depth_Of_Field) declared here.

   type Auto_Flashing is new F392D00.Remote_Camera with private;

   -- Implicit procedure Focus (C     : in out Auto_Flashing;
   --                           Depth : in     Depth_Of_Field) declared here.

   type Special_Focus is new Auto_Focus with private;

   -- Implicit procedure Focus (C     : in out Special_Focus;
   --                           Depth : in     Depth_Of_Field) declared here.

   -- ...Other operations.

private

   procedure Focus (C     : in out Auto_Focus;              -- Overrides
                    Depth : in     F392D00.Depth_Of_Field); -- parent's op.

   -- For the improved remote camera, focus is set automatically, so it is
   -- declared as a private operation.

   type Auto_Flashing is new F392D00.Remote_Camera with null record;

   procedure Focus (C     : in out Auto_Flashing;           -- Overrides
                    Depth : in     F392D00.Depth_Of_Field); -- parent's op.

   type Special_Focus is new Auto_Focus with null record;

end C392D03_0;


     --==================================================================--


package body C392D03_0 is

   procedure Focus (C     : in out Auto_Focus;
                    Depth : in     F392D00.Depth_Of_Field) is
   begin
      -- Artificial for testing purposes.
      C.DOF := 52;
   end Focus;

   -----------------------------------------------------------
   procedure Focus (C     : in out Auto_Flashing;
                    Depth : in     F392D00.Depth_Of_Field) is
   begin
      -- Artificial for testing purposes.
      C.DOF := 91;
   end Focus;

end C392D03_0;


     --==================================================================--


with F392D00;
with C392D03_0;

with Report;

procedure C392D03 is

   type Focus_Ptr is access procedure 
     (P1 : in out C392D03_0.Auto_Focus;
      P2 : in F392D00.Depth_Of_Field);

   Basic_Camera   : F392D00.Remote_Camera;
   Auto_Camera1   : C392D03_0.Auto_Focus;
   Auto_Camera2   : C392D03_0.Auto_Focus;
   Flash_Camera1  : C392D03_0.Auto_Flashing;
   Flash_Camera2  : C392D03_0.Auto_Flashing;
   Special_Camera : C392D03_0.Special_Focus;
   Auto_Depth     : F392D00.Depth_Of_Field := 78;

   TC_Expected_Basic_Depth : constant F392D00.Depth_Of_Field := 46;
   TC_Expected_Auto_Depth  : constant F392D00.Depth_Of_Field := 52;
   TC_Expected_Depth       : constant F392D00.Depth_Of_Field := 91;

   FP : Focus_Ptr := C392D03_0.Focus'Access;

   use type F392D00.Depth_Of_Field;

begin
   Report.Test ("C392D03", "Dispatching for overridden primitive " &
                "subprograms: record extension declared in non-child " &
                "package, parent is tagged record");


-- Call the class-wide operation for Remote_Camera'Class, which itself makes
-- a dispatching call to Focus:

   -- For an object of type Remote_Camera, the dispatching call should
   -- dispatch to the body declared for the root type:
     
   F392D00.Self_Test(Basic_Camera);

   if Basic_Camera.DOF /= TC_Expected_Basic_Depth then
      Report.Failed ("Call dispatched incorrectly for root type");
   end if;


   -- For an object of type Auto_Focus, the dispatching call should
   -- dispatch to the body declared for the derived type:
     
   F392D00.Self_Test(Auto_Camera1);

   if Auto_Camera1.DOF /= TC_Expected_Auto_Depth then
      Report.Failed ("Call dispatched incorrectly for Auto_Focus type");
   end if;


   -- For an object of type Auto_Flash, the dispatching call should
   -- also dispatch to the body declared for the derived type:

   F392D00.Self_Test(Flash_Camera1);

   if Flash_Camera1.DOF /= TC_Expected_Depth then
      Report.Failed ("Call dispatched incorrectly for Auto_Flash type");
   end if;

   -- For an object of Auto_Flash type, a non-dispatching call to Focus should 
   -- execute the body declared for the derived type (even through it is 
   -- declared in the private part).

   C392D03_0.Focus (Flash_Camera2, Auto_Depth);

   if Flash_Camera2.DOF /= TC_Expected_Depth then
      Report.Failed ("Non-dispatching call to privately overriding " &
                     "subprogram executed the wrong body");
   end if;

   -- For an object of Auto_Focus type, a non-dispatching call to Focus should 
   -- execute the body declared for the derived type (even through it is 
   -- declared in the private part).

   FP.all (Auto_Camera2, Auto_Depth);

   if Auto_Camera2.DOF /= TC_Expected_Auto_Depth then
      Report.Failed ("Non-dispatching call by using access to overriding " &
                     "subprogram executed the wrong body");
   end if;

   -- For an object of type Special_Camera, the dispatching call should
   -- also dispatch to the body declared for the derived type:

   F392D00.Self_Test(Special_Camera);

   if Special_Camera.DOF /= TC_Expected_Auto_Depth then
      Report.Failed ("Call dispatched incorrectly for Special_Camera type");
   end if;

   Report.Result;

end C392D03;
