mirror of
https://github.com/AdaCore/VSS.git
synced 2026-02-12 13:06:25 -08:00
165 lines
4.9 KiB
Ada
165 lines
4.9 KiB
Ada
--
|
|
-- Copyright (C) 2022-2023, AdaCore
|
|
--
|
|
-- SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
--
|
|
|
|
with Ada.Streams.Stream_IO;
|
|
|
|
with VSS.Application;
|
|
with VSS.Stream_Element_Vectors.Conversions;
|
|
with VSS.Strings.Converters.Decoders;
|
|
with VSS.Strings.Conversions;
|
|
|
|
with Test_Support;
|
|
|
|
procedure Test_String_Decoder is
|
|
|
|
use type VSS.Strings.Virtual_String;
|
|
|
|
function Load
|
|
(File_Name : VSS.Strings.Virtual_String)
|
|
return VSS.Stream_Element_Vectors.Stream_Element_Vector;
|
|
|
|
procedure Run_Decoder_Block_Mode
|
|
(Encoding : VSS.Strings.Virtual_String;
|
|
Has_Error : Boolean;
|
|
Encoded : VSS.Stream_Element_Vectors.Stream_Element_Vector;
|
|
Decoded : VSS.Strings.Virtual_String);
|
|
|
|
procedure Run_Decoder_Incremental_Mode
|
|
(Encoding : VSS.Strings.Virtual_String;
|
|
Has_Error : Boolean;
|
|
Encoded : VSS.Stream_Element_Vectors.Stream_Element_Vector;
|
|
Decoded : VSS.Strings.Virtual_String);
|
|
|
|
----------
|
|
-- Load --
|
|
----------
|
|
|
|
function Load
|
|
(File_Name : VSS.Strings.Virtual_String)
|
|
return VSS.Stream_Element_Vectors.Stream_Element_Vector
|
|
is
|
|
use type Ada.Streams.Stream_Element_Offset;
|
|
|
|
File : Ada.Streams.Stream_IO.File_Type;
|
|
Buffer : Ada.Streams.Stream_Element_Array (1 .. 1024);
|
|
Last : Ada.Streams.Stream_Element_Offset;
|
|
|
|
begin
|
|
return Result : VSS.Stream_Element_Vectors.Stream_Element_Vector do
|
|
Ada.Streams.Stream_IO.Open
|
|
(File,
|
|
Ada.Streams.Stream_IO.In_File,
|
|
VSS.Strings.Conversions.To_UTF_8_String (File_Name));
|
|
|
|
loop
|
|
Ada.Streams.Stream_IO.Read (File, Buffer, Last);
|
|
|
|
exit when Last < Buffer'First;
|
|
|
|
Result.Append
|
|
(VSS.Stream_Element_Vectors.Conversions.To_Stream_Element_Vector
|
|
(Buffer (Buffer'First .. Last)));
|
|
end loop;
|
|
|
|
Ada.Streams.Stream_IO.Close (File);
|
|
end return;
|
|
end Load;
|
|
|
|
----------------------------
|
|
-- Run_Decoder_Block_Mode --
|
|
----------------------------
|
|
|
|
procedure Run_Decoder_Block_Mode
|
|
(Encoding : VSS.Strings.Virtual_String;
|
|
Has_Error : Boolean;
|
|
Encoded : VSS.Stream_Element_Vectors.Stream_Element_Vector;
|
|
Decoded : VSS.Strings.Virtual_String)
|
|
is
|
|
Decoder : VSS.Strings.Converters.Decoders.Virtual_String_Decoder;
|
|
Result : VSS.Strings.Virtual_String;
|
|
|
|
begin
|
|
Decoder.Initialize (Encoding);
|
|
|
|
Test_Support.Assert (Decoder.Is_Valid);
|
|
|
|
Result := Decoder.Decode (Encoded);
|
|
|
|
Test_Support.Assert (Result = Decoded);
|
|
Test_Support.Assert (Decoder.Has_Error = Has_Error);
|
|
|
|
if Has_Error then
|
|
Test_Support.Assert (not Decoder.Error_Message.Is_Empty);
|
|
|
|
else
|
|
Test_Support.Assert (Decoder.Error_Message.Is_Empty);
|
|
end if;
|
|
end Run_Decoder_Block_Mode;
|
|
|
|
----------------------------------
|
|
-- Run_Decoder_Incremental_Mode --
|
|
----------------------------------
|
|
|
|
procedure Run_Decoder_Incremental_Mode
|
|
(Encoding : VSS.Strings.Virtual_String;
|
|
Has_Error : Boolean;
|
|
Encoded : VSS.Stream_Element_Vectors.Stream_Element_Vector;
|
|
Decoded : VSS.Strings.Virtual_String)
|
|
is
|
|
use type Ada.Streams.Stream_Element_Offset;
|
|
|
|
Decoder : VSS.Strings.Converters.Decoders.Virtual_String_Decoder;
|
|
Result : VSS.Strings.Virtual_String;
|
|
|
|
begin
|
|
Decoder.Initialize (Encoding);
|
|
|
|
Test_Support.Assert (Decoder.Is_Valid);
|
|
|
|
for J in 1 .. Encoded.Length loop
|
|
Result.Append
|
|
(Decoder.Decode
|
|
(VSS.Stream_Element_Vectors.Conversions
|
|
.To_Stream_Element_Vector ([1 => Encoded (J)]),
|
|
J = Encoded.Length));
|
|
end loop;
|
|
|
|
Test_Support.Assert (Result = Decoded);
|
|
Test_Support.Assert (Decoder.Has_Error = Has_Error);
|
|
|
|
if Has_Error then
|
|
Test_Support.Assert (not Decoder.Error_Message.Is_Empty);
|
|
|
|
else
|
|
Test_Support.Assert (Decoder.Error_Message.Is_Empty);
|
|
end if;
|
|
end Run_Decoder_Incremental_Mode;
|
|
|
|
begin
|
|
declare
|
|
Encoding : constant VSS.Strings.Virtual_String :=
|
|
VSS.Application.Arguments.Element (1);
|
|
Has_Error : constant Boolean :=
|
|
Boolean'Wide_Wide_Value
|
|
(VSS.Strings.Conversions.To_Wide_Wide_String
|
|
(VSS.Application.Arguments.Element (2)));
|
|
Encoded : constant VSS.Stream_Element_Vectors.Stream_Element_Vector :=
|
|
Load (VSS.Application.Arguments.Element (3));
|
|
Decoded : constant VSS.Strings.Virtual_String :=
|
|
VSS.Strings.Conversions.To_Virtual_String
|
|
(VSS.Stream_Element_Vectors.Conversions.Unchecked_To_String
|
|
(Load (VSS.Application.Arguments.Element (4))));
|
|
|
|
begin
|
|
Test_Support.Assert (not Encoding.Is_Empty);
|
|
Test_Support.Assert (not Encoded.Is_Empty);
|
|
Test_Support.Assert (not Decoded.Is_Empty);
|
|
|
|
Run_Decoder_Block_Mode (Encoding, Has_Error, Encoded, Decoded);
|
|
Run_Decoder_Incremental_Mode (Encoding, Has_Error, Encoded, Decoded);
|
|
end;
|
|
end Test_String_Decoder;
|