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不是解決我的問題的模式之外,我無法從中推斷出任何有用的信息.
總結
以上是生活随笔為你收集整理的linux 重定向 不换行,Ada:重定向到stdout时省略换行符(测试Put)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java spring入门小程序_spr
- 下一篇: js在div中追加html,JS把内容动