mirror of
				https://github.com/zulip/zulip.git
				synced 2025-10-31 12:03:46 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			86 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			86 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env python3
 | |
| import argparse
 | |
| import difflib
 | |
| import filecmp
 | |
| import os
 | |
| import subprocess
 | |
| import shutil
 | |
| 
 | |
| TOOLS_DIR = os.path.abspath(os.path.dirname(__file__))
 | |
| TMP_DIR = "/var/tmp"
 | |
| 
 | |
| def generate_files(source_file: str) -> None:
 | |
|     # Copy the source CSV file to out temporary test directory.
 | |
|     input_file_path = source_file
 | |
|     output_file_path = os.path.join(TMP_DIR, "CSV_A")
 | |
|     shutil.copyfile(input_file_path, output_file_path)
 | |
| 
 | |
|     # Generate the name map file in the temporary directory.
 | |
|     input_file_path = output_file_path
 | |
|     output_file_path = os.path.join(TMP_DIR, 'NAME_MAP_A')
 | |
|     subprocess.check_call([os.path.join(TOOLS_DIR, 'setup', 'emoji', 'import_emoji_names_from_csv'),
 | |
|                            '--input-file', input_file_path, '--output-file', output_file_path],
 | |
|                           stdout=subprocess.DEVNULL)
 | |
| 
 | |
|     # Regenerate the CSV file from name map.
 | |
|     input_file_path = output_file_path
 | |
|     output_file_path = os.path.join(TMP_DIR, 'CSV_B')
 | |
|     subprocess.check_call([os.path.join(TOOLS_DIR, 'setup', 'emoji', 'export_emoji_names_to_csv'),
 | |
|                            '--input-file', input_file_path, '--output-file', output_file_path],
 | |
|                           stdout=subprocess.DEVNULL)
 | |
| 
 | |
|     # Regenerate the name map file from the regenerated CSV file.
 | |
|     input_file_path = output_file_path
 | |
|     output_file_path = os.path.join(TMP_DIR, 'NAME_MAP_B')
 | |
|     subprocess.check_call([os.path.join(TOOLS_DIR, 'setup', 'emoji', 'import_emoji_names_from_csv'),
 | |
|                            '--input-file', input_file_path, '--output-file', output_file_path],
 | |
|                           stdout=subprocess.DEVNULL)
 | |
| 
 | |
| def print_diff(path_file1, path_file2):
 | |
|     # type: (str, str) -> None
 | |
|     with open(path_file1) as file1:
 | |
|         with open(path_file2) as file2:
 | |
|             diff = difflib.unified_diff(
 | |
|                 file1.readlines(),
 | |
|                 file2.readlines(),
 | |
|                 fromfile=path_file1,
 | |
|                 tofile=path_file2,
 | |
|             )
 | |
|     for line in diff:
 | |
|         print(line)
 | |
| 
 | |
| def compare_files(first_file: str, second_file: str) -> None:
 | |
|     same = True
 | |
|     same = same and filecmp.cmp(first_file, second_file, shallow=False)
 | |
|     if not same:
 | |
|         print_diff(first_file, second_file)
 | |
|         raise Exception("Round trip conversion failed!!")
 | |
| 
 | |
| def check_files() -> None:
 | |
|     # Compare the original and regenerated CSV files.
 | |
|     first_file = os.path.join(TMP_DIR, 'CSV_A')
 | |
|     second_file = os.path.join(TMP_DIR, 'CSV_B')
 | |
|     compare_files(first_file, second_file)
 | |
| 
 | |
|     # Compare the name map files.
 | |
|     first_file = os.path.join(TMP_DIR, 'NAME_MAP_A')
 | |
|     second_file = os.path.join(TMP_DIR, 'NAME_MAP_B')
 | |
|     compare_files(first_file, second_file)
 | |
| 
 | |
| def main() -> None:
 | |
|     description = ("This tool is used test the emoji tooling that we use to import/export "
 | |
|                    "naming related data. This works by doing a round-trip conversion of "
 | |
|                    "and then verifying that no changes were made in the process.")
 | |
|     parser = argparse.ArgumentParser(description=description)
 | |
|     parser.add_argument(
 | |
|         "--input-file", dest="input_file_path", type=str, metavar="<path>",
 | |
|         default=os.path.join(TOOLS_DIR, "setup", "emoji", "emoji_names.csv"),
 | |
|         help="Path to the CSV file to be used for round-trip conversion.")
 | |
| 
 | |
|     args = parser.parse_args()
 | |
|     generate_files(args.input_file_path)
 | |
|     check_files()
 | |
| 
 | |
| if __name__ == "__main__":
 | |
|     main()
 |