WITH REPORT;
USE REPORT;
WITH TEXT_IO;
USE TEXT_IO;
PROCEDURE CE3905C IS
INCOMPLETE : EXCEPTION;
BEGIN
TEST ("CE3905C", "CHECK THAT GET FOR ENUMERATION TYPES RAISES " &
"DATA_ERROR WHEN THE ELEMENT RETRIEVED IS NOT " &
"OF THE TYPE EXPECTED OR IS OUT OF THE RANGE " &
"OF A SUBTYPE. ALSO CHECK THAT " &
"CONSTRAINT_ERROR IS RAISED IF THE VALUE READ " &
"IS OUT OF RANGE OF THE ITEM PARAMETER, BUT " &
"WITHIN THE RANGE OF THE INSTANTIATED TYPE");
DECLARE
FT : FILE_TYPE;
TYPE COLOR IS (RED, BLUE, YELLOW, WHITE, ORANGE, GREEN,
PURPLE, BLACK);
SUBTYPE P_COLOR IS COLOR RANGE RED .. YELLOW;
CRAYON : COLOR := BLACK;
PAINT : P_COLOR := BLUE;
ST : STRING (1 .. 2);
PACKAGE COLOR_IO IS NEW ENUMERATION_IO (COLOR);
USE COLOR_IO;
BEGIN
BEGIN
CREATE (FT, OUT_FILE, LEGAL_FILE_NAME);
EXCEPTION
WHEN USE_ERROR =>
NOT_APPLICABLE ("USE_ERROR RAISED; TEXT CREATE " &
"WITH OUT_FILE MODE");
RAISE INCOMPLETE;
WHEN NAME_ERROR =>
NOT_APPLICABLE ("NAME_ERROR RAISED; TEXT CREATE " &
"WITH OUT_FILE MODE");
RAISE INCOMPLETE;
END;
PUT (FT, "BROWN");
NEW_LINE (FT);
PUT (FT, "ORANGE");
NEW_LINE (FT);
PUT (FT, "GREEN");
NEW_LINE (FT);
PUT (FT, "WHITE");
NEW_LINE (FT);
PUT (FT, "WHI");
NEW_LINE (FT);
PUT (FT, "TE");
NEW_LINE (FT);
PUT (FT, "RED");
CLOSE (FT);
BEGIN
OPEN (FT, IN_FILE, LEGAL_FILE_NAME);
EXCEPTION
WHEN USE_ERROR =>
NOT_APPLICABLE ("USE_ERROR RAISED; OPEN WITH " &
"IN_FILE MODE");
RAISE INCOMPLETE;
END;
BEGIN
GET (FT, CRAYON); FAILED ("DATA_ERROR NOT RAISED - 1");
EXCEPTION
WHEN DATA_ERROR =>
IF CRAYON /= BLACK THEN
FAILED ("ITEM CRAYON AFFECTED - 1");
END IF;
WHEN OTHERS =>
FAILED ("WRONG EXCEPTION RAISED - 1");
END;
BEGIN
GET (FT, PAINT); FAILED ("CONSTRAINT_ERROR NOT RAISED");
EXCEPTION
WHEN CONSTRAINT_ERROR =>
IF PAINT /= BLUE THEN
FAILED ("ITEM PAINT AFFECTED - 2");
END IF;
WHEN DATA_ERROR =>
FAILED ("DATA_ERROR RAISED FOR ITEM SUBTYPE");
WHEN OTHERS =>
FAILED ("WRONG EXCEPTION RAISED - 2");
END;
DECLARE
PACKAGE P_COLOR_IO IS NEW ENUMERATION_IO (P_COLOR);
USE P_COLOR_IO;
BEGIN
BEGIN
P_COLOR_IO.GET (FT, PAINT); FAILED ("DATA_ERROR NOT RAISED - 3");
EXCEPTION
WHEN DATA_ERROR =>
IF PAINT /= BLUE THEN
FAILED ("ITEM PAINT AFFECTED - 3");
END IF;
WHEN OTHERS =>
FAILED ("WRONG EXCEPTION RAISED - 3");
END;
BEGIN
P_COLOR_IO.GET (FT, PAINT); FAILED ("DATA_ERROR NOT RAISED - 3A");
EXCEPTION
WHEN DATA_ERROR =>
NULL;
WHEN OTHERS =>
FAILED ("WRONG EXCEPTION RAISED - 3A");
END;
END;
BEGIN
GET (FT, CRAYON); FAILED ("DATA_ERROR NOT RAISED - 4");
EXCEPTION
WHEN DATA_ERROR =>
NULL;
WHEN OTHERS =>
FAILED ("WRONG EXCEPTION RAISED - 4");
END;
GET (FT, ST);
GET (FT, CRAYON); IF CRAYON /= RED THEN
FAILED ("READING NOT CONTINUED CORRECTLY AFTER" &
"DATA_ERROR EXCEPTION");
END IF;
BEGIN
DELETE (FT);
EXCEPTION
WHEN USE_ERROR =>
NULL;
END;
EXCEPTION
WHEN INCOMPLETE =>
NULL;
END;
RESULT;
END CE3905C;