|
|
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: 10840 (0x2a58)
Types: TextFile
Names: »B«
└─⟦85b835f43⟧ Bits:30000549 8mm tape, Rational 1000, Xlib rev 6.00
└─⟦0c20f784e⟧ »DATA«
└─⟦1abbe589f⟧
└─⟦49e7f20b9⟧
└─⟦this⟧
with Test_Io;
with Rm_Test_Utilities;
with Xlbt_Display3;
use Xlbt_Display3;
with Xlbt_Rm3;
use Xlbt_Rm3;
with Xlbt_String;
use Xlbt_String;
with Xlbp_Rm;
use Xlbp_Rm;
procedure Rm_060 is
------------------------------------------------------------------------------
-- Tests for Xlbp_Rm - Precedence order tests.
------------------------------------------------------------------------------
-- *****************************************************************************
-- * Date - /Name/ Comment
-- *
-- * 29-OCT-90 - /DRK/ Created.
-- * 19-NOV-90 - /GEB/ New RM error returns.
-- *****************************************************************************
---------------
-- Utilities --
---------------
procedure Check (Condition : Boolean; Message : String; Section : String) is
-- Check a condition. If it doesn't hold, print error messages.
begin
if not Condition then
Test_Io.Put_Line (Message);
Test_Io.Put_Error ("Section " & Section & " test failed.");
end if;
end Check;
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
procedure Check (Error : X_Rm_Status; Section : String) is
-- Check that no errors were reported.
begin
Check (Error = Rm_Successful, "RM error", Section);
end Check;
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
procedure Add (Db : in out X_Rm_Database;
Line : X_String;
Section : String) is
-- Add an entry to a database.
Error : X_Rm_Status;
begin
Test_Io.Put_Line ("Adding """ & To_String (Line) & '"');
X_Rm_Add_Resource (Db, Line, Error);
Check (Error, Section);
end Add;
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
procedure Get (Db : X_Rm_Database;
Names : X_String;
Classes : X_String;
Expect : X_String := "";
Section : String) is
-- Lookup an entry in the database.
Rep : X_Rm_Representation;
Val : X_Rm_Value;
begin
Test_Io.Putx ("(""" & Names & """, """ & Classes & """) => ");
X_Rm_Get_Resource (Db, Names, Classes, Rep, Val);
Test_Io.Put_Line (Rm_Test_Utilities.Image (Val));
if (Expect = "") then
Check (Val = None_X_Rm_Value, "Expected: no entry", Section);
else
Check (Val /= None_X_Rm_Value and then
Val.Kind = Is_X_String_Pointer and then
Val.V_X_String_Pointer.all = Expect,
"Expected: """ & To_String (Expect) & '"', Section);
end if;
end Get;
----------------------------------------------------------------------
-------------------------
-- Major test sections --
-------------------------
procedure Test_Rule_1 is
Section : constant String := "Rule_1";
Db : X_Rm_Database := None_X_Rm_Database;
begin
Test_Io.Section (Section & ": " &
"The attribute of the name and class must match.");
Add (Db, "rule_1.foo: true", Section);
Get (Db, ".rule_1.bar", ".Rule_1.Bar", "", Section);
Free_X_Rm_Database (Db);
Test_Io.New_Line;
exception
when others =>
Check (False, "Unhandled exception", Section);
raise;
end Test_Rule_1;
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
procedure Test_Rule_2 is
Section : constant String := "Rule_2";
Db : X_Rm_Database := None_X_Rm_Database;
begin
Test_Io.Section (Section & ": " &
"Tight bindings override loose bindings.");
Add (Db, "rule_2.-2-: tight", Section);
Add (Db, "rule_2*-2-: loose", Section);
Add (Db, "*-2-: very_loose", Section);
Get (Db, "rule_2.-2-", "Rule_2.-2-", "tight", Section);
Free_X_Rm_Database (Db);
Test_Io.New_Line;
exception
when others =>
Check (False, "Unhandled exception", Section);
raise;
end Test_Rule_2;
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
procedure Test_Rule_3 is
Section : constant String := "Rule_3";
Db : X_Rm_Database := None_X_Rm_Database;
begin
Test_Io.Section (Section & ": " & "Names override classes.");
Add (Db, "*rule_3.foo: name", Section);
Add (Db, "*Rule_3.Foo: class", Section);
Get (Db, "rule_3.foo", "Rule_3.Foo", "name", Section);
Free_X_Rm_Database (Db);
Test_Io.New_Line;
exception
when others =>
Check (False, "Unhandled exception", Section);
raise;
end Test_Rule_3;
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
procedure Test_Rule_4 is
Section : constant String := "Rule_4";
Db : X_Rm_Database := None_X_Rm_Database;
begin
Test_Io.Section (Section & ": " &
"Explicit attributes override implicit ones.");
Add (Db, "rule_4*foo*bar: qualified", Section);
Add (Db, "rule_4*bar: unqualified", Section);
Get (Db, "rule_4.foo.bar", "Rule_4.Foo.Bar", "qualified", Section);
Free_X_Rm_Database (Db);
Test_Io.New_Line;
exception
when others =>
Check (False, "Unhandled exception", Section);
raise;
end Test_Rule_4;
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
procedure Test_Rule_5 is
Section : constant String := "Rule_5";
Db : X_Rm_Database := None_X_Rm_Database;
begin
Test_Io.Section (Section & ": " &
"Left components override right components.");
Add (Db, "*foo*rule_5: foo", Section);
Add (Db, "*bar*rule_5: bar", Section);
Get (Db, ".foo.bar.rule_5", "Foo.Bar.Rule_5", "foo", Section);
Free_X_Rm_Database (Db);
Test_Io.New_Line;
exception
when others =>
Check (False, "Unhandled exception", Section);
raise;
end Test_Rule_5;
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
procedure Test_Rule_6 is
Section : constant String := "Rule_6";
Db : X_Rm_Database := None_X_Rm_Database;
begin
Test_Io.Section (Section & ": " &
"Tight binding is implicit for the first component.");
Add (Db, "rule_6: foo", Section);
Add (Db, "*rule_6: bar", Section);
Get (Db, ".rule_6", ".Rule_6", "foo", Section);
Free_X_Rm_Database (Db);
Test_Io.New_Line;
exception
when others =>
Check (False, "Unhandled exception", Section);
raise;
end Test_Rule_6;
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
procedure Test_Mixed_Attributes is
Section : constant String := "Mixed_Attributes";
Db : X_Rm_Database := None_X_Rm_Database;
begin
Test_Io.Section (Section & ": " & "Names and classes may be mixed.");
Add (Db, "xmh*bg: red", Section);
Add (Db, "*cmd.font: 8x13", Section);
Add (Db, "*cmd.bg: blue", Section);
Add (Db, "*Cmd.Fg: green", Section);
Add (Db, "xmh.toc*Cmd.aFg: black", Section);
Get (Db, ".xmh.toc.msgf.incl.aFg",
".Xmh.VPaned.Box.Cmd.Fg", "black", Section);
Free_X_Rm_Database (Db);
Test_Io.New_Line;
exception
when others =>
Check (False, "Unhandled exception", Section);
raise;
end Test_Mixed_Attributes;
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
procedure Test_Precedence is
Section : constant String := "Precedence";
Db : X_Rm_Database := None_X_Rm_Database;
begin
Test_Io.Section (Section & ": " &
"The lowest numbered rule wins conflicts.");
-- Rule 1 vs. everything.
-- We'll take this for granted.
-- Rule 2 vs. 3.
Add (Db, ".a.B: Rule 2 vs. 3", Section);
Add (Db, "*a.b: Rule 3 vs. 2", Section);
Get (Db, ".a.b", ".A.B", "Rule 2 vs. 3", Section);
Test_Io.New_Line;
-- Rule 2 vs. 4.
Free_X_Rm_Database (Db);
Add (Db, ".a*c: Rule 2 vs. 4", Section);
Add (Db, "*a.b.c: Rule 4 vs. 2", Section);
Get (Db, ".a.b.c", ".A.B.C", "Rule 2 vs. 4", Section);
Test_Io.New_Line;
-- Rule 2 vs. 5.
Free_X_Rm_Database (Db);
Add (Db, ".a*c*d: Rule 2 vs. 5", Section);
Add (Db, "*a*b*d: Rule 5 vs. 2", Section);
Get (Db, ".a.b.c.d", ".A.B.C.D", "Rule 2 vs. 5", Section);
Test_Io.New_Line;
-- Rule 2 vs. 6.
-- How can this be tested? Rule 6 is a really a parsing rule,
-- not a precedence rule.
-- Rule 3 vs. 4.
Free_X_Rm_Database (Db);
Add (Db, "a*c: Rule 3 vs. 4", Section);
Add (Db, "A.B.C: Rule 4 vs. 3", Section);
Get (Db, ".a.b.c", ".A.B.C", "Rule 3 vs. 4", Section);
Test_Io.New_Line;
-- Rule 3 vs. 5.
Free_X_Rm_Database (Db);
Add (Db, "a*c*d: Rule 3 vs. 5", Section);
Add (Db, "A*b*d: Rule 5 vs. 3", Section);
Get (Db, ".a.b.c.d", ".A.B.C.D", "Rule 3 vs. 5", Section);
Test_Io.New_Line;
-- Rule 3 vs. 6: see 2 vs. 3 above.
-- Rule 4 vs. 5.
Free_X_Rm_Database (Db);
Add (Db, "a*c*d: Rule 4 vs. 5", Section);
Add (Db, "*b*d: Rule 5 vs. 4", Section);
Get (Db, ".a.b.c.d", ".A.B.C.D", "Rule 4 vs. 5", Section);
Test_Io.New_Line;
-- Rule 4 vs. 6: see 2 vs. 4 above.
-- Rule 5 vs. 6: see 2 vs. 5 above.
Free_X_Rm_Database (Db);
exception
when others =>
Check (False, "Unhandled exception", Section);
raise;
end Test_Precedence;
begin
-- Simple rule tests
Test_Rule_1;
Test_Rule_2;
Test_Rule_3;
Test_Rule_4;
Test_Rule_5;
Test_Rule_6;
-- Slightly more complex tests
Test_Mixed_Attributes;
Test_Precedence;
end Rm_060;