#!/bin/sh global test_description := ''git p4 handling of UTF-16 files without BOM'' source ./lib-git-p4.sh global UTF16 := '"\227\000\227\000'" test_expect_success 'start p4d' ' start_p4d ' test_expect_success 'init depot with UTF-16 encoded file and artificially remove BOM' ' ( cd "$cli" && printf "$UTF16" >file1 && p4 add -t utf16 file1 && p4 submit -d "file1" ) && ( cd db && p4d -jc && # P4D automatically adds a BOM. Remove it here to make the file invalid. sed -e "\$d" depot/file1,v >depot/file1,v.new && mv depot/file1,v.new depot/file1,v && printf "@$UTF16@" >>depot/file1,v && p4d -jrF checkpoint.1 ) ' test_expect_success 'clone depot with invalid UTF-16 file in verbose mode' ' git p4 clone --dest="$git" --verbose //depot && test_when_finished cleanup_git && ( cd "$git" && printf "$UTF16" >expect && test_cmp_bin expect file1 ) ' test_expect_failure 'clone depot with invalid UTF-16 file in non-verbose mode' ' git p4 clone --dest="$git" //depot ' test_expect_success 'kill p4d' ' kill_p4d ' test_done (CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:test_description) op: Equal rhs: {(SQ <"git p4 handling of UTF-16 files without BOM">)} spids: [4] ) ] spids: [4] ) (C {(.)} {(./lib-git-p4.sh)}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:UTF16) op: Equal rhs: { (DQ (EscapedLiteralPart token:) (27) (EscapedLiteralPart token:) (00) (EscapedLiteralPart token:) (27) (EscapedLiteralPart token:) (00) ) } spids: [15] ) ] spids: [15] ) (C {(test_expect_success)} {(SQ <"start p4d">)} {(SQ <"\n"> <"\tstart_p4d\n">)}) (C {(test_expect_success)} {(SQ <"init depot with UTF-16 encoded file and artificially remove BOM">)} { (SQ <"\n"> <"\t(\n"> <"\t\tcd \"$cli\" &&\n"> <"\t\tprintf \"$UTF16\" >file1 &&\n"> <"\t\tp4 add -t utf16 file1 &&\n"> <"\t\tp4 submit -d \"file1\"\n"> <"\t) &&\n"> <"\n"> <"\t(\n"> <"\t\tcd db &&\n"> <"\t\tp4d -jc &&\n"> <"\t\t# P4D automatically adds a BOM. Remove it here to make the file invalid.\n"> <"\t\tsed -e \"\\$d\" depot/file1,v >depot/file1,v.new &&\n"> <"\t\tmv depot/file1,v.new depot/file1,v &&\n"> <"\t\tprintf \"@$UTF16@\" >>depot/file1,v &&\n"> <"\t\tp4d -jrF checkpoint.1\n"> <"\t)\n"> ) } ) (C {(test_expect_success)} {(SQ <"clone depot with invalid UTF-16 file in verbose mode">)} { (SQ <"\n"> <"\tgit p4 clone --dest=\"$git\" --verbose //depot &&\n"> <"\ttest_when_finished cleanup_git &&\n"> <"\t(\n"> <"\t\tcd \"$git\" &&\n"> <"\t\tprintf \"$UTF16\" >expect &&\n"> <"\t\ttest_cmp_bin expect file1\n"> <"\t)\n"> ) } ) (C {(test_expect_failure)} {(SQ <"clone depot with invalid UTF-16 file in non-verbose mode">)} {(SQ <"\n"> <"\tgit p4 clone --dest=\"$git\" //depot\n">)} ) (C {(test_expect_success)} {(SQ <"kill p4d">)} {(SQ <"\n"> <"\tkill_p4d\n">)}) (C {(test_done)}) ] )