@@ -53,3 +53,68 @@ fn extsort_csvmode() {
53
53
54
54
assert_eq ! ( dos2unix( & sorted_output) , dos2unix( & expected_csv) ) ;
55
55
}
56
+
57
+ #[ test]
58
+ fn extsort_issue_2391 ( ) {
59
+ let wrk = Workdir :: new ( "extsort_issue_2391" ) . flexible ( true ) ;
60
+ wrk. clear_contents ( ) . unwrap ( ) ;
61
+
62
+ let unsorted_csv = wrk. load_test_resource ( "issue2391-test_ids.csv" ) ;
63
+ wrk. create_from_string ( "issue2391-test_ids.csv" , & unsorted_csv) ;
64
+ // create index
65
+ let mut cmd_wrk = wrk. command ( "index" ) ;
66
+ cmd_wrk. arg ( "issue2391-test_ids.csv" ) ;
67
+
68
+ wrk. assert_success ( & mut cmd_wrk) ;
69
+
70
+ // as git mangles line endings, we need to convert manually to CRLF as per issue 2391
71
+ // see https://github.com/dathere/qsv/issues/2391
72
+ // convert LF to CRLF in test file to ensure consistent line endings
73
+ #[ cfg( target_os = "windows" ) ]
74
+ {
75
+ let mut cmd = wrk. command ( "cmd" ) ;
76
+ cmd. args ( [
77
+ "/C" ,
78
+ "type issue2391-test_ids.csv > issue2391-test_ids.tmp.csv && move /Y \
79
+ issue2391-test_ids.tmp.csv issue2391-test_ids.csv",
80
+ ] ) ;
81
+ wrk. output ( & mut cmd) ;
82
+ }
83
+ #[ cfg( not( target_os = "windows" ) ) ]
84
+ {
85
+ let mut cmd = wrk. command ( "sh" ) ;
86
+ cmd. args ( [
87
+ "-c" ,
88
+ "sed 's/$/\r /' issue2391-test_ids.csv > issue2391-test_ids.tmp.csv && mv \
89
+ issue2391-test_ids.tmp.csv issue2391-test_ids.csv",
90
+ ] ) ;
91
+ wrk. output ( & mut cmd) ;
92
+ }
93
+
94
+ let mut cmd = wrk. command ( "extsort" ) ;
95
+ cmd. arg ( "issue2391-test_ids.csv" )
96
+ . args ( [ "--select" , "tc_id,pnm,pc_id" ] ) ;
97
+
98
+ wrk. assert_success ( & mut cmd) ;
99
+ let got: Vec < Vec < String > > = wrk. read_stdout ( & mut cmd) ;
100
+ let expected = vec ! [
101
+ svec![ "pnm" , "tc_id" , "pc_id" ] ,
102
+ svec![ "405" , "139280" , "9730000630075" ] ,
103
+ svec![ "405" , "139281" , "9730000630075" ] ,
104
+ svec![ "252" , "139282" , "9730000630075" ] ,
105
+ svec![ "131" , "139282862" , "9730065908379" ] ,
106
+ svec![ "138" , "139282863" , "9730065908379" ] ,
107
+ svec![ "138" , "139282864" , "9730065908379" ] ,
108
+ svec![ "405" , "139282865" , "9730065908379" ] ,
109
+ svec![ "138" , "139282866" , "9730065908379" ] ,
110
+ svec![ "138" , "139282867" , "9730065908379" ] ,
111
+ svec![ "138" , "139282868" , "9730065908379" ] ,
112
+ svec![ "138" , "139282869" , "9730065908379" ] ,
113
+ svec![ "138" , "139282870" , "9730065908379" ] ,
114
+ svec![ "138" , "139282871" , "9730065908379" ] ,
115
+ svec![ "241" , "139283" , "9730000630075" ] ,
116
+ svec![ "272" , "139284" , "9730000630075" ] ,
117
+ svec![ "273" , "139285" , "9730000630075" ] ,
118
+ ] ;
119
+ assert_eq ! ( got, expected) ;
120
+ }
0 commit comments