linux 重定向 不换行,Ada:重定向到stdout时省略换行符(测试Put)

我正在尝试用简单的方法编写测试Ada.Text_IO.Put.为简单起见,这是一个我想测试的组合方法:

procedure Say_Something is

begin

Put("Something.");

end Say_Something;

在我的AUnit测试中,我有:

procedure Test_Put (T : in out Test) is

pragma Unreferenced (T);

use Ada.Text_IO;

Stdout : constant File_Type := Standard_Output;

Put_File_Name : constant String := "say_something_test.txt";

Put_File : File_Type;

Expected : constant String := "Something.";

begin

-- Create the output file and redirect output

Create (Put_File, Append_File, Put_File_Name);

Set_Output (Put_File);

Say_Something;

-- Redirect output to stdout and close the file

Set_Output (Stdout);

Close (Put_File);

-- Read file

declare

File_Size : constant Natural :=

Natural (Ada.Directories.Size (Put_File_Name));

Actual : String (1 .. File_Size);

begin

Actual := Read_File (Put_File_Name, File_Size);

Ada.Directories.Delete_File (Put_File_Name);

Assert (Expected = Actual,

"Expected " & '"' & Expected & '"' & ", " &

"Got " & '"' & Actual & '"');

end;

end Test_Put;

function Read_File (File_Name : String; File_Size : Natural)

return String is

subtype File_String is String (1 .. File_Size);

package File_String_IO is new Ada.Direct_IO (File_String);

File : File_String_IO.File_Type;

Contents : File_String;

begin

File_String_IO.Open (File, File_String_IO.In_File, File_Name);

File_String_IO.Read (File, Contents);

File_String_IO.Close (File);

return Contents;

end Read_File;

不幸的是,结果是:

FAIL Test Vectors.Put

Expected "Something.", Got "Something.

"

似乎Ada自动在文件末尾添加换行符.我意识到我可以添加一个(CR)LF到我期望的字符串,如下所示:

Expected : constant String := "Something.";

& Ada.Characters.Latin_1.CR

& Ada.Characters.Latin_1.LF;

但是a)改变我期望的字符串感觉不对,并且b)这将在Windows机器上运行,但在Unix/Linux/Mac上我将不得不放弃"CR".换句话说,我的测试运行的成功与平台有关,而我的代码则不然,这很糟糕.

所以我的问题是:如何在不附加换行符的情况下写入文件?关于如何测试输出的其他建议也非常受欢迎.

我已经看到了这个相关的问题,但除了我可能会尝试Append_File而Out_File不是解决我的问题的模式之外,我无法从中推断出任何有用的信息.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值