2009-02-09 19:11:42 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								USING:  io.streams.string  csv  tools.test  kernel  strings  
						 
					
						
							
								
									
										
										
										
											2016-03-19 12:50:01 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								io.pathnames io.files.temp io.files.unique io.encodings.utf8
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								io.files io.directories ;
 
							 
						 
					
						
							
								
									
										
										
										
											2008-04-30 00:15:50 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								IN:  csv.tests  
						 
					
						
							
								
									
										
										
										
											2008-04-17 16:29:04 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								! I like to name my unit tests  
						 
					
						
							
								
									
										
										
										
											2014-09-25 11:06:01 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								:  named-unit-test  (  name  output  input  --  )
  
						 
					
						
							
								
									
										
										
										
											2013-07-24 17:52:09 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    unit-test drop  ;  inline
 
							 
						 
					
						
							
								
									
										
										
										
											2008-04-17 16:29:04 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								"Fields are separated by commas"  
						 
					
						
							
								
									
										
										
										
											2014-09-25 11:06:01 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								[ { { "1997"  "Ford"  "E350"  } } ]
							 
						 
					
						
							
								
									
										
										
										
											2013-03-15 00:21:20 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								[ "1997,Ford,E350"  string>csv ] named-unit-test
							 
						 
					
						
							
								
									
										
										
										
											2008-04-17 16:29:04 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								"ignores whitespace before and after elements. n.b.specifically prohibited by RFC 4180, which states, 'Spaces are considered part of a field and should not be ignored.'"  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								[ { { "1997"  "Ford"  "E350"  } } ]
							 
						 
					
						
							
								
									
										
										
										
											2013-03-15 00:21:20 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								[ "1997,   Ford   , E350"  string>csv ] named-unit-test
							 
						 
					
						
							
								
									
										
										
										
											2008-04-17 16:29:04 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								"keeps spaces in quotes"  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								[ { { "1997"  "Ford"  "E350"  "Super, luxurious truck"  } } ]
							 
						 
					
						
							
								
									
										
										
										
											2013-03-15 00:21:20 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								[ "1997,Ford,E350,\"Super, luxurious truck\""  string>csv ] named-unit-test
							 
						 
					
						
							
								
									
										
										
										
											2008-04-17 16:29:04 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								"double quotes mean escaped in quotes"  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								[ { { "1997"  "Ford"  "E350"  "Super \"luxurious\" truck"  } } ]
							 
						 
					
						
							
								
									
										
										
										
											2014-09-25 11:06:01 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								[ "1997,Ford,E350,\"Super \"\"luxurious\"\" truck\"" 
							 
						 
					
						
							
								
									
										
										
										
											2013-07-24 17:52:09 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    string>csv ] named-unit-test
							 
						 
					
						
							
								
									
										
										
										
											2008-04-17 16:29:04 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								"Fields with embedded line breaks must be delimited by double-quote characters."  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								[ { { "1997"  "Ford"  "E350"  "Go get one now\nthey are going fast"  } } ]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								[ "1997,Ford,E350,\"Go get one now\nthey are going fast\"" 
							 
						 
					
						
							
								
									
										
										
										
											2013-07-24 17:52:09 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    string>csv ] named-unit-test
							 
						 
					
						
							
								
									
										
										
										
											2008-04-17 16:29:04 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								"Fields with leading or trailing spaces must be delimited by double-quote characters. (See comment about leading and trailing spaces above)"  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								[ { { "1997"  "Ford"  "E350"  "  Super luxurious truck    "  } } ]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								[ "1997,Ford,E350,\"  Super luxurious truck    \"" 
							 
						 
					
						
							
								
									
										
										
										
											2013-07-24 17:52:09 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    string>csv ] named-unit-test
							 
						 
					
						
							
								
									
										
										
										
											2008-04-17 16:29:04 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								"Fields may always be delimited by double-quote characters, whether necessary or not."  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								[ { { "1997"  "Ford"  "E350"  } } ]
							 
						 
					
						
							
								
									
										
										
										
											2013-03-15 00:21:20 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								[ "\"1997\",\"Ford\",\"E350\""  string>csv ] named-unit-test
							 
						 
					
						
							
								
									
										
										
										
											2008-04-17 16:29:04 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								"The first record in a csv file may contain column names in each of the fields."  
						 
					
						
							
								
									
										
										
										
											2014-09-25 11:06:01 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								[ { { "Year"  "Make"  "Model"  }
							 
						 
					
						
							
								
									
										
										
										
											2008-04-17 16:29:04 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    { "1997"  "Ford"  "E350"  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { "2000"  "Mercury"  "Cougar"  } } ]
							 
						 
					
						
							
								
									
										
										
										
											2014-09-25 11:06:01 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								[ "Year,Make,Model\n1997,Ford,E350\n2000,Mercury,Cougar" 
							 
						 
					
						
							
								
									
										
										
										
											2013-07-24 17:52:09 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    string>csv ] named-unit-test
							 
						 
					
						
							
								
									
										
										
										
											2008-04-17 16:29:04 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								! !!!!!!!!  other tests  
						 
					
						
							
								
									
										
										
										
											2012-07-18 15:24:24 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-07-02 20:28:17 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{ { { "Phil Dawes"  } } }
							 
						 
					
						
							
								
									
										
										
										
											2013-03-15 00:21:20 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								[ "\"Phil Dawes\""  string>csv ] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2008-04-17 16:29:04 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-07-02 20:28:17 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{ { { "1"  "2"  "3"  } { "4"  "5"  "6"  } } }
							 
						 
					
						
							
								
									
										
										
										
											2013-03-15 00:21:20 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								[ "1,2,3\n4,5,6\n"  string>csv ] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2008-04-17 16:29:04 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								"trims leading and trailing whitespace - n.b. this isn't really conformant, but lots of csv seems to assume this"  
						 
					
						
							
								
									
										
										
										
											2013-03-15 00:21:20 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								[ { { "foo yeah"  "bah"  "baz"  } } ]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								[ "  foo yeah  , bah ,baz\n"  string>csv ] named-unit-test
							 
						 
					
						
							
								
									
										
										
										
											2008-04-30 12:50:40 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								"allows setting of delimiting character"  
						 
					
						
							
								
									
										
										
										
											2013-03-15 00:21:20 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								[ { { "foo"  "bah"  "baz"  } } ]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								[ "foo\tbah\tbaz\n"  CHAR: \t  [ string>csv ] with-delimiter ] named-unit-test
							 
						 
					
						
							
								
									
										
										
										
											2008-05-01 06:54:09 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								"Quoted field followed immediately by newline"  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								[ { { "foo"  "bar"  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { "1"    "2"  } } ]
							 
						 
					
						
							
								
									
										
										
										
											2013-03-15 00:21:20 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								[ "foo,\"bar\"\n1,2"  string>csv ] named-unit-test
							 
						 
					
						
							
								
									
										
										
										
											2008-07-25 17:02:07 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								"can write csv too!"  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								[ "foo1,bar1\nfoo2,bar2\n"  ]
							 
						 
					
						
							
								
									
										
										
										
											2013-03-15 00:21:20 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								[ { { "foo1"  "bar1"  } { "foo2"  "bar2"  } } csv>string ] named-unit-test
							 
						 
					
						
							
								
									
										
										
										
											2009-11-05 18:03:24 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-07-25 17:02:07 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								"escapes quotes commas and newlines when writing"  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								[ "\"fo\"\"o1\",bar1\n\"fo\no2\",\"b,ar2\"\n"  ]
							 
						 
					
						
							
								
									
										
										
										
											2013-03-15 00:21:20 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								[ { { "fo\"o1"  "bar1"  } { "fo\no2"  "b,ar2"  } } csv>string ] named-unit-test ! " 
							 
						 
					
						
							
								
									
										
										
										
											2009-01-30 20:23:04 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-07-02 20:28:17 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{ { { "writing"  "some"  "csv"  "tests"  } } }
							 
						 
					
						
							
								
									
										
										
										
											2009-01-30 20:23:04 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								[
							 
						 
					
						
							
								
									
										
										
										
											2016-03-18 13:57:54 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    [
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        "writing,some,csv,tests" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        "csv-test1-"  ".csv"  unique-file utf8
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        [ set-file-contents ] [ file>csv ] [ drop  delete-file ] 2tri
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ] with-temp-directory
							 
						 
					
						
							
								
									
										
										
										
											2009-01-30 20:23:04 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-07-02 20:28:17 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{ t  } [
							 
						 
					
						
							
								
									
										
										
										
											2016-03-18 13:57:54 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    [
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        { { "writing,some,csv,tests"  } } dup
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        "csv-test2-"  ".csv"  unique-file utf8
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        [ csv>file ] [ file>csv ] 2bi  =
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ] with-temp-directory
							 
						 
					
						
							
								
									
										
										
										
											2009-01-30 20:23:04 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2009-02-12 02:32:06 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-07-02 20:28:17 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{ { { "hello"  ""  ""  ""  "goodbye"  ""  } } }
							 
						 
					
						
							
								
									
										
										
										
											2013-03-15 00:21:20 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								[ "hello,,\"\",,goodbye,"  string>csv ] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2012-07-18 15:24:24 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ { { "asd\"f\""  "asdf"  } } } [ "asd\"f\",asdf"  string>csv ] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ { { "a\"sdf"  "asdf"  } } } [ "a\"sdf,asdf"  string>csv ] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ { { "as\"df"  "asdf"  } } } [ "    as\"df,asdf"  string>csv ] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ { { "asd"  "f"  "asdf"  } } } [ "\"as\"d,f,asdf"  string>csv ] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ { { "as,df"  "asdf"  } } } [ "\"as,\"df,asdf"  string>csv ] unit-test
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								! FIXME: { { { "as,df" "asdf" } } } [ "\"as,\"df  ,asdf" string>csv ] unit-test  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								! FIXME: { { { "asd\"f\"" "asdf" } } } [ "\"asd\"\"\"f\",asdf" string>csv ] unit-test  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{ { { "as,d\"f"  "asdf"  } } } [ "\"as,\"d\"\"\"\"f,asdf"  string>csv ] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2014-02-19 04:07:28 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-07-02 20:28:17 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{ { } } [ ""  string>csv ] unit-test
							 
						 
					
						
							
								
									
										
										
										
											2014-09-25 11:06:01 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-07-02 20:28:17 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{
							 
						 
					
						
							
								
									
										
										
										
											2014-09-25 11:06:01 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { { "Year"  "Make"  "Model"  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      { "1997"  "Ford"  "E350"  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
									
										
										
										
											2015-07-02 20:28:17 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}
							 
						 
					
						
							
								
									
										
										
										
											2014-09-25 11:06:01 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								[ "Year,Make,\"Model\"\r\n1997,Ford,E350"  string>csv ] unit-test