| 
									
										
										
										
											2023-01-05 13:25:55 +01:00
										 |  |  | /**************************************************************************/ | 
					
						
							|  |  |  | /*  test_file_access.h                                                    */ | 
					
						
							|  |  |  | /**************************************************************************/ | 
					
						
							|  |  |  | /*                         This file is part of:                          */ | 
					
						
							|  |  |  | /*                             GODOT ENGINE                               */ | 
					
						
							|  |  |  | /*                        https://godotengine.org                         */ | 
					
						
							|  |  |  | /**************************************************************************/ | 
					
						
							|  |  |  | /* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */ | 
					
						
							|  |  |  | /* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur.                  */ | 
					
						
							|  |  |  | /*                                                                        */ | 
					
						
							|  |  |  | /* Permission is hereby granted, free of charge, to any person obtaining  */ | 
					
						
							|  |  |  | /* a copy of this software and associated documentation files (the        */ | 
					
						
							|  |  |  | /* "Software"), to deal in the Software without restriction, including    */ | 
					
						
							|  |  |  | /* without limitation the rights to use, copy, modify, merge, publish,    */ | 
					
						
							|  |  |  | /* distribute, sublicense, and/or sell copies of the Software, and to     */ | 
					
						
							|  |  |  | /* permit persons to whom the Software is furnished to do so, subject to  */ | 
					
						
							|  |  |  | /* the following conditions:                                              */ | 
					
						
							|  |  |  | /*                                                                        */ | 
					
						
							|  |  |  | /* The above copyright notice and this permission notice shall be         */ | 
					
						
							|  |  |  | /* included in all copies or substantial portions of the Software.        */ | 
					
						
							|  |  |  | /*                                                                        */ | 
					
						
							|  |  |  | /* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,        */ | 
					
						
							|  |  |  | /* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF     */ | 
					
						
							|  |  |  | /* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */ | 
					
						
							|  |  |  | /* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY   */ | 
					
						
							|  |  |  | /* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,   */ | 
					
						
							|  |  |  | /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE      */ | 
					
						
							|  |  |  | /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.                 */ | 
					
						
							|  |  |  | /**************************************************************************/ | 
					
						
							| 
									
										
										
										
											2020-12-11 15:47:45 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | #ifndef TEST_FILE_ACCESS_H
 | 
					
						
							|  |  |  | #define TEST_FILE_ACCESS_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-11 14:51:48 +02:00
										 |  |  | #include "core/io/file_access.h"
 | 
					
						
							| 
									
										
										
										
											2021-11-06 16:05:33 -05:00
										 |  |  | #include "tests/test_macros.h"
 | 
					
						
							|  |  |  | #include "tests/test_utils.h"
 | 
					
						
							| 
									
										
										
										
											2020-12-11 15:47:45 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | namespace TestFileAccess { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEST_CASE("[FileAccess] CSV read") { | 
					
						
							| 
									
										
										
										
											2022-03-23 11:08:58 +02:00
										 |  |  | 	Ref<FileAccess> f = FileAccess::open(TestUtils::get_data_path("translations.csv"), FileAccess::READ); | 
					
						
							| 
									
										
										
										
											2020-12-11 15:47:45 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-04 11:20:36 +02:00
										 |  |  | 	Vector<String> header = f->get_csv_line(); // Default delimiter: ",".
 | 
					
						
							| 
									
										
										
										
											2020-12-11 15:47:45 +02:00
										 |  |  | 	REQUIRE(header.size() == 3); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-04 11:20:36 +02:00
										 |  |  | 	Vector<String> row1 = f->get_csv_line(","); // Explicit delimiter, should be the same.
 | 
					
						
							| 
									
										
										
										
											2020-12-11 15:47:45 +02:00
										 |  |  | 	REQUIRE(row1.size() == 3); | 
					
						
							|  |  |  | 	CHECK(row1[0] == "GOOD_MORNING"); | 
					
						
							|  |  |  | 	CHECK(row1[1] == "Good Morning"); | 
					
						
							|  |  |  | 	CHECK(row1[2] == "Guten Morgen"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	Vector<String> row2 = f->get_csv_line(); | 
					
						
							|  |  |  | 	REQUIRE(row2.size() == 3); | 
					
						
							|  |  |  | 	CHECK(row2[0] == "GOOD_EVENING"); | 
					
						
							|  |  |  | 	CHECK(row2[1] == "Good Evening"); | 
					
						
							| 
									
										
										
										
											2021-12-09 03:42:46 -06:00
										 |  |  | 	CHECK(row2[2].is_empty()); // Use case: not yet translated!
 | 
					
						
							| 
									
										
										
										
											2020-12-11 15:47:45 +02:00
										 |  |  | 	// https://github.com/godotengine/godot/issues/44269
 | 
					
						
							|  |  |  | 	CHECK_MESSAGE(row2[2] != "\"", "Should not parse empty string as a single double quote."); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-04 11:20:36 +02:00
										 |  |  | 	Vector<String> row3 = f->get_csv_line(); | 
					
						
							|  |  |  | 	REQUIRE(row3.size() == 6); | 
					
						
							|  |  |  | 	CHECK(row3[0] == "Without quotes"); | 
					
						
							|  |  |  | 	CHECK(row3[1] == "With, comma"); | 
					
						
							|  |  |  | 	CHECK(row3[2] == "With \"inner\" quotes"); | 
					
						
							|  |  |  | 	CHECK(row3[3] == "With \"inner\", quotes\",\" and comma"); | 
					
						
							|  |  |  | 	CHECK(row3[4] == "With \"inner\nsplit\" quotes and\nline breaks"); | 
					
						
							|  |  |  | 	CHECK(row3[5] == "With \\nnewline chars"); // Escaped, not an actual newline.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	Vector<String> row4 = f->get_csv_line("~"); // Custom delimiter, makes inline commas easier.
 | 
					
						
							|  |  |  | 	REQUIRE(row4.size() == 3); | 
					
						
							|  |  |  | 	CHECK(row4[0] == "Some other"); | 
					
						
							|  |  |  | 	CHECK(row4[1] == "delimiter"); | 
					
						
							|  |  |  | 	CHECK(row4[2] == "should still work, shouldn't it?"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	Vector<String> row5 = f->get_csv_line("\t"); // Tab separated variables.
 | 
					
						
							|  |  |  | 	REQUIRE(row5.size() == 3); | 
					
						
							|  |  |  | 	CHECK(row5[0] == "What about"); | 
					
						
							|  |  |  | 	CHECK(row5[1] == "tab separated"); | 
					
						
							|  |  |  | 	CHECK(row5[2] == "lines, good?"); | 
					
						
							| 
									
										
										
										
											2020-12-11 15:47:45 +02:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2022-07-31 18:46:53 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | TEST_CASE("[FileAccess] Get as UTF-8 String") { | 
					
						
							|  |  |  | 	Ref<FileAccess> f_lf = FileAccess::open(TestUtils::get_data_path("line_endings_lf.test.txt"), FileAccess::READ); | 
					
						
							|  |  |  | 	String s_lf = f_lf->get_as_utf8_string(); | 
					
						
							|  |  |  | 	f_lf->seek(0); | 
					
						
							|  |  |  | 	String s_lf_nocr = f_lf->get_as_utf8_string(true); | 
					
						
							|  |  |  | 	CHECK(s_lf == "Hello darkness\nMy old friend\nI've come to talk\nWith you again\n"); | 
					
						
							|  |  |  | 	CHECK(s_lf_nocr == "Hello darkness\nMy old friend\nI've come to talk\nWith you again\n"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	Ref<FileAccess> f_crlf = FileAccess::open(TestUtils::get_data_path("line_endings_crlf.test.txt"), FileAccess::READ); | 
					
						
							|  |  |  | 	String s_crlf = f_crlf->get_as_utf8_string(); | 
					
						
							|  |  |  | 	f_crlf->seek(0); | 
					
						
							|  |  |  | 	String s_crlf_nocr = f_crlf->get_as_utf8_string(true); | 
					
						
							|  |  |  | 	CHECK(s_crlf == "Hello darkness\r\nMy old friend\r\nI've come to talk\r\nWith you again\r\n"); | 
					
						
							|  |  |  | 	CHECK(s_crlf_nocr == "Hello darkness\nMy old friend\nI've come to talk\nWith you again\n"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	Ref<FileAccess> f_cr = FileAccess::open(TestUtils::get_data_path("line_endings_cr.test.txt"), FileAccess::READ); | 
					
						
							|  |  |  | 	String s_cr = f_cr->get_as_utf8_string(); | 
					
						
							|  |  |  | 	f_cr->seek(0); | 
					
						
							|  |  |  | 	String s_cr_nocr = f_cr->get_as_utf8_string(true); | 
					
						
							|  |  |  | 	CHECK(s_cr == "Hello darkness\rMy old friend\rI've come to talk\rWith you again\r"); | 
					
						
							|  |  |  | 	CHECK(s_cr_nocr == "Hello darknessMy old friendI've come to talkWith you again"); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2020-12-11 15:47:45 +02:00
										 |  |  | } // namespace TestFileAccess
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif // TEST_FILE_ACCESS_H
 |