]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/DEVEL/pxp/netstring/tests/test_mimestring.ml
Initial revision
[helm.git] / helm / DEVEL / pxp / netstring / tests / test_mimestring.ml
diff --git a/helm/DEVEL/pxp/netstring/tests/test_mimestring.ml b/helm/DEVEL/pxp/netstring/tests/test_mimestring.ml
new file mode 100644 (file)
index 0000000..db5eac9
--- /dev/null
@@ -0,0 +1,589 @@
+#require "str";;
+#directory "..";;
+#load "netstring.cma";;
+
+open Mimestring;;
+
+(**********************************************************************)
+(* scan_structured_value                                              *)
+(**********************************************************************)
+
+let t001() =
+  let r = scan_structured_value "user@domain.com" [ '@'; '.' ] [] in
+  r = [ Atom "user"; Special '@'; Atom "domain"; Special '.'; Atom "com" ]
+;;
+
+
+let t002() =
+  let r = scan_structured_value "user @ domain . com" [ '@'; '.' ]  [] in
+  r = [ Atom "user"; Special '@'; Atom "domain"; Special '.'; Atom "com" ]
+;;
+
+
+let t003() =
+  let r = scan_structured_value "user(Do you know him?)@domain.com" [ '@'; '.' ]
+ []  in
+  r = [ Atom "user"; Special '@'; Atom "domain"; Special '.'; Atom "com" ]
+;;
+
+
+let t004() =
+  let r = scan_structured_value "user @ domain . com" [ '@'; '.'; ' ' ] []  in
+  r = [ Atom "user"; Special ' '; Special '@'; Special ' '; Atom "domain";
+       Special ' '; Special '.'; Special ' '; Atom "com" ]
+;;
+
+
+let t005() =
+  let r = scan_structured_value "user(Do you know him?)@domain.com"
+                               ['@'; '.'; '(']  [] in
+  r = [ Atom "user"; Special '('; Atom "Do"; Atom "you"; Atom "know";
+       Atom "him?)"; Special '@'; Atom "domain"; Special '.'; Atom "com" ]
+;;
+
+
+let t006() =
+  let r = scan_structured_value "\"My.name\"@domain.com" [ '@'; '.' ]  [] in
+  r = [ QString "My.name"; Special '@'; Atom "domain"; Special '.';
+       Atom "com" ]
+;;
+
+
+let t007() =
+  let r = scan_structured_value "\"\\\"()@. \"@domain.com" [ '@'; '.' ]  [] in
+  r = [ QString "\"()@. "; Special '@'; Atom "domain"; Special '.';
+       Atom "com" ]
+;;
+
+
+let t008() =
+  let r = scan_structured_value "a(b(c(d)e)f)g" [] [] in
+  r = [ Atom "a"; Atom "g" ]
+;;
+
+
+let t009() =
+  let r = scan_structured_value "a(b(c(d)e)f" [] [] in
+  r = [ Atom "a" ]
+;;
+
+
+let t010() =
+  let r = scan_structured_value "a(b\\(c\\(d\\)e)f" [] [] in
+  r = [ Atom "a"; Atom "f" ]
+;;
+
+
+let t011() =
+  let r = scan_structured_value "a(b(c(d)e)f\\" [] [] in
+  r = [ Atom "a" ]
+;;
+
+
+let t012() =
+  let r = scan_structured_value "\"abc" [] [] in
+  r = [ QString "abc" ]
+;;
+
+
+let t013() =
+  let r = scan_structured_value "\"abc\\" [] [] in
+  r = [ QString "abc\\" ]
+;;
+
+
+(* New tests for netstring-0.9: *)
+
+let t020() =
+  let r = scan_structured_value "user(Do you know him?)@domain.com" 
+           [ '@'; '.' ] [ Return_comments ] in
+  r = [ Atom "user"; Comment; Special '@'; Atom "domain"; Special '.'; 
+       Atom "com" ]
+;;
+
+let t021() =
+  let r = scan_structured_value "user (Do you know him?) @ domain . com"
+           [ '@'; '.'; ' ' ] [] in
+  r = [ Atom "user"; Special ' '; Special ' '; Special ' '; Special '@';
+       Special ' '; Atom "domain";
+       Special ' '; Special '.'; Special ' '; Atom "com" ]
+;;
+
+let t022() =
+  let r = scan_structured_value "user (Do you know him?) @ domain . com"
+           [ '@'; '.'; ' ' ] [ Return_comments ] in
+  r = [ Atom "user"; Special ' '; Comment; Special ' '; Special '@'; 
+       Special ' '; Atom "domain";
+       Special ' '; Special '.'; Special ' '; Atom "com" ]
+;;
+
+let t023() =
+  let r = scan_structured_value "=?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?=" 
+           [] [] in
+  r = [ Atom "=?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?=" ]
+;;
+
+let t024() =
+  let r = scan_structured_value "=?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?=" 
+           [ ] [ Recognize_encoded_words ] in
+  r = [ EncodedWord("ISO-8859-1", "Q", "Keld_J=F8rn_Simonsen") ]
+;;
+
+let t025() =
+  let r = scan_structured_value 
+           "=?ISO-8859-1?B?SWYgeW91IGNhbiByZWFkIHRoaXMgeW8=?= =?ISO-8859-2?B?dSB1bmRlcnN0YW5kIHRoZSBleGFtcGxlLg==?="
+           []
+           [ Recognize_encoded_words ] in
+  r = [ EncodedWord
+         ("ISO-8859-1", "B", "SWYgeW91IGNhbiByZWFkIHRoaXMgeW8=");
+       EncodedWord
+         ("ISO-8859-2", "B", "dSB1bmRlcnN0YW5kIHRoZSBleGFtcGxlLg==")
+      ]
+;;
+
+(**********************************************************************)
+(* s_extended_token                                                   *)
+(**********************************************************************)
+
+let scan specials options str =
+  let scn = create_mime_scanner specials options str in
+  scan_token_list scn;;
+
+let t100() =
+  let r = scan [] [] "Two atoms" in
+  match r with
+      [ a1, Atom "Two"; a2, Atom "atoms" ] ->
+
+       (get_pos a1 = 0) &&
+       (get_line a1 = 1) &&
+       (get_column a1 = 0) &&
+       (get_length a1 = 3) &&
+       (separates_adjacent_encoded_words a1 = false) &&
+
+       (get_pos a2 = 4) &&
+       (get_line a2 = 1) &&
+       (get_column a2 = 4) &&
+       (get_length a2 = 5) &&
+       (separates_adjacent_encoded_words a2 = false)
+
+    | _ ->
+       false
+;;
+
+
+let t101() =
+  let r = scan [] [] "  Two  atoms  " in
+  match r with
+      [ a1, Atom "Two"; a2, Atom "atoms" ] ->
+
+       (get_pos a1 = 2) &&
+       (get_line a1 = 1) &&
+       (get_column a1 = 2) &&
+       (get_length a1 = 3) &&
+       (separates_adjacent_encoded_words a1 = false) &&
+
+       (get_pos a2 = 7) &&
+       (get_line a2 = 1) &&
+       (get_column a2 = 7) &&
+       (get_length a2 = 5) &&
+       (separates_adjacent_encoded_words a2 = false)
+
+    | _ ->
+       false
+;;
+
+
+let t102() =
+  let r = scan [] [] "  Two\n atoms  " in
+  match r with
+      [ a1, Atom "Two"; a2, Atom "atoms" ] ->
+
+       (get_pos a1 = 2) &&
+       (get_line a1 = 1) &&
+       (get_column a1 = 2) &&
+       (get_length a1 = 3) &&
+       (separates_adjacent_encoded_words a1 = false) &&
+
+       (get_pos a2 = 7) &&
+       (get_line a2 = 2) &&
+       (get_column a2 = 1) &&
+       (get_length a2 = 5) &&
+       (separates_adjacent_encoded_words a2 = false)
+
+    | _ ->
+       false
+;;
+
+let t110() =
+  let r = scan [] [] "\"Two\" \"qstrings\"" in
+  match r with
+      [ a1, QString "Two"; a2, QString "qstrings" ] ->
+
+       (get_pos a1 = 0) &&
+       (get_line a1 = 1) &&
+       (get_column a1 = 0) &&
+       (get_length a1 = 5) &&
+       (separates_adjacent_encoded_words a1 = false) &&
+
+       (get_pos a2 = 6) &&
+       (get_line a2 = 1) &&
+       (get_column a2 = 6) &&
+       (get_length a2 = 10) &&
+       (separates_adjacent_encoded_words a2 = false)
+
+    | _ ->
+       false
+;;
+
+let t111() =
+  let r = scan [] [] "  \"Two\"  \"qstrings\"  " in
+  match r with
+      [ a1, QString "Two"; a2, QString "qstrings" ] ->
+
+       (get_pos a1 = 2) &&
+       (get_line a1 = 1) &&
+       (get_column a1 = 2) &&
+       (get_length a1 = 5) &&
+       (separates_adjacent_encoded_words a1 = false) &&
+
+       (get_pos a2 = 9) &&
+       (get_line a2 = 1) &&
+       (get_column a2 = 9) &&
+       (get_length a2 = 10) &&
+       (separates_adjacent_encoded_words a2 = false)
+
+    | _ ->
+       false
+;;
+
+let t112() =
+  let r = scan [] [] "  \"Two\nlines\"  \"and\nqstrings\"  " in
+  match r with
+      [ a1, QString "Two\nlines"; a2, QString "and\nqstrings" ] ->
+
+       (get_pos a1 = 2) &&
+       (get_line a1 = 1) &&
+       (get_column a1 = 2) &&
+       (get_length a1 = 11) &&
+       (separates_adjacent_encoded_words a1 = false) &&
+
+       (get_pos a2 = 15) &&
+       (get_line a2 = 2) &&
+       (get_column a2 = 8) &&
+       (get_length a2 = 14) &&
+       (separates_adjacent_encoded_words a2 = false)
+
+    | _ ->
+       false
+;;
+
+let t113() =
+  let r = scan [] [] "  \"Two\\\nlines\"  \"and\\\nqstrings\"  " in
+  match r with
+      [ a1, QString "Two\nlines"; a2, QString "and\nqstrings" ] ->
+
+       (get_pos a1 = 2) &&
+       (get_line a1 = 1) &&
+       (get_column a1 = 2) &&
+       (get_length a1 = 12) &&
+       (separates_adjacent_encoded_words a1 = false) &&
+
+       (get_pos a2 = 16) &&
+       (get_line a2 = 2) &&
+       (get_column a2 = 8) &&
+       (get_length a2 = 15) &&
+       (separates_adjacent_encoded_words a2 = false)
+
+    | _ ->
+       false
+;;
+
+let t120() =
+  (* Domain literals are implemented like quoted strings, so only the
+   * most complicated test case.
+   *)
+  let r = scan [] [] "  [Two\\\nlines]  [and\\\nliterals]  " in
+  match r with
+      [ a1, DomainLiteral "Two\nlines"; a2, DomainLiteral "and\nliterals" ] ->
+
+       (get_pos a1 = 2) &&
+       (get_line a1 = 1) &&
+       (get_column a1 = 2) &&
+       (get_length a1 = 12) &&
+       (separates_adjacent_encoded_words a1 = false) &&
+
+       (get_pos a2 = 16) &&
+       (get_line a2 = 2) &&
+       (get_column a2 = 8) &&
+       (get_length a2 = 15) &&
+       (separates_adjacent_encoded_words a2 = false)
+
+    | _ ->
+       false
+;;
+
+let t130() =
+  let r = scan [] [ Return_comments ] "(Two) (comments)" in
+  match r with
+      [ a1, Comment; a2, Comment ] ->
+
+       (get_pos a1 = 0) &&
+       (get_line a1 = 1) &&
+       (get_column a1 = 0) &&
+       (get_length a1 = 5) &&
+       (separates_adjacent_encoded_words a1 = false) &&
+
+       (get_pos a2 = 6) &&
+       (get_line a2 = 1) &&
+       (get_column a2 = 6) &&
+       (get_length a2 = 10) &&
+       (separates_adjacent_encoded_words a2 = false)
+
+    | _ ->
+       false
+;;
+
+let t131() =
+  let r = scan [] [ Return_comments ] "(Two\nlines) (and\ncomments)" in
+  match r with
+      [ a1, Comment; a2, Comment ] ->
+
+       (get_pos a1 = 0) &&
+       (get_line a1 = 1) &&
+       (get_column a1 = 0) &&
+       (get_length a1 = 11) &&
+       (separates_adjacent_encoded_words a1 = false) &&
+
+       (get_pos a2 = 12) &&
+       (get_line a2 = 2) &&
+       (get_column a2 = 7) &&
+       (get_length a2 = 14) &&
+       (separates_adjacent_encoded_words a2 = false)
+
+    | _ ->
+       false
+;;
+
+let t132() =
+  let r = scan [] [ Return_comments ] "(Two\\\nlines) (and\\\ncomments)" in
+  match r with
+      [ a1, Comment; a2, Comment ] ->
+
+       (get_pos a1 = 0) &&
+       (get_line a1 = 1) &&
+       (get_column a1 = 0) &&
+       (get_length a1 = 12) &&
+       (separates_adjacent_encoded_words a1 = false) &&
+
+       (get_pos a2 = 13) &&
+       (get_line a2 = 2) &&
+       (get_column a2 = 7) &&
+       (get_length a2 = 15) &&
+       (separates_adjacent_encoded_words a2 = false)
+
+    | _ ->
+       false
+;;
+
+let t133() =
+  let r = scan [] [ Return_comments ] "(a\n(b\nc)d\ne(f)) atom" in
+  match r with
+      [ a1, Comment; a2, Atom "atom" ] ->
+
+       (get_pos a1 = 0) &&
+       (get_line a1 = 1) &&
+       (get_column a1 = 0) &&
+       (get_length a1 = 15) &&
+       (separates_adjacent_encoded_words a1 = false) &&
+
+       (get_pos a2 = 16) &&
+       (get_line a2 = 4) &&
+       (get_column a2 = 6) &&
+       (get_length a2 = 4) &&
+       (separates_adjacent_encoded_words a2 = false)
+
+    | _ ->
+       false
+;;
+
+let t140() = 
+  let r = scan [] [] "\031\031" in
+  match r with
+      [ a1, Control '\031'; a2, Control '\031' ] ->
+
+       (get_pos a1 = 0) &&
+       (get_line a1 = 1) &&
+       (get_column a1 = 0) &&
+       (get_length a1 = 1) &&
+       (separates_adjacent_encoded_words a1 = false) &&
+
+       (get_pos a2 = 1) &&
+       (get_line a2 = 1) &&
+       (get_column a2 = 1) &&
+       (get_length a2 = 1) &&
+       (separates_adjacent_encoded_words a2 = false)
+
+    | _ ->
+       false
+;;
+
+let t150() = 
+  let r = scan [ '\t'; '\n' ] [] " \t\n  \n  \t" in
+  match r with
+      [ a1, Special '\t'; _, Special '\n'; _, Special '\n'; a2, Special '\t'] ->
+
+       (get_pos a1 = 1) &&
+       (get_line a1 = 1) &&
+       (get_column a1 = 1) &&
+       (get_length a1 = 1) &&
+       (separates_adjacent_encoded_words a1 = false) &&
+
+       (get_pos a2 = 8) &&
+       (get_line a2 = 3) &&
+       (get_column a2 = 2) &&
+       (get_length a2 = 1) &&
+       (separates_adjacent_encoded_words a2 = false)
+
+    | _ ->
+       false
+;;
+
+let t160() =
+  let r = scan [] [ Recognize_encoded_words ] 
+           "=?iso8859-1?q?G=F6rd?= =?iso8859-1?q?G=F6rd?=" in
+  match r with
+      [ a1, EncodedWord("ISO8859-1", "Q", "G=F6rd"); 
+       a2, EncodedWord("ISO8859-1", "Q", "G=F6rd"); ] ->
+
+       (get_pos a1 = 0) &&
+       (get_line a1 = 1) &&
+       (get_column a1 = 0) &&
+       (get_length a1 = 22) &&
+       (separates_adjacent_encoded_words a1 = false) &&
+       (get_decoded_word a1 = "Görd") &&
+       (get_charset a1 = "ISO8859-1") &&
+
+       (get_pos a2 = 23) &&
+       (get_line a2 = 1) &&
+       (get_column a2 = 23) &&
+       (get_length a2 = 22) &&
+       (separates_adjacent_encoded_words a2 = false) &&
+       (get_decoded_word a2 = "Görd") &&
+       (get_charset a2 = "ISO8859-1")
+
+    | _ ->
+       false
+;;
+
+let t161() =
+  let r = scan [ ' ' ] [ Recognize_encoded_words ] 
+           "=?iso8859-1?q?G=F6rd?= =?iso8859-1?q?G=F6rd?=" in
+  match r with
+      [ a1, EncodedWord("ISO8859-1", "Q", "G=F6rd"); 
+       sp, Special ' ';
+       a2, EncodedWord("ISO8859-1", "Q", "G=F6rd"); ] ->
+
+       (get_pos a1 = 0) &&
+       (get_line a1 = 1) &&
+       (get_column a1 = 0) &&
+       (get_length a1 = 22) &&
+       (separates_adjacent_encoded_words a1 = false) &&
+       (get_decoded_word a1 = "Görd") &&
+       (get_charset a1 = "ISO8859-1") &&
+
+       (get_pos a2 = 23) &&
+       (get_line a2 = 1) &&
+       (get_column a2 = 23) &&
+       (get_length a2 = 22) &&
+       (separates_adjacent_encoded_words a2 = false) &&
+       (get_decoded_word a2 = "Görd") &&
+       (get_charset a2 = "ISO8859-1") &&
+
+       (separates_adjacent_encoded_words sp = true)
+
+    | _ ->
+       false
+;;
+
+let t162() =
+  let r = scan [ ' ' ] [ Recognize_encoded_words ] 
+           "=?iso8859-1?q?G=F6rd?=  =?iso8859-1?q?G=F6rd?=" in
+  match r with
+      [ a1, EncodedWord("ISO8859-1", "Q", "G=F6rd"); 
+       sp1, Special ' ';
+       sp2, Special ' ';
+       a2, EncodedWord("ISO8859-1", "Q", "G=F6rd"); ] ->
+
+       (get_pos a1 = 0) &&
+       (get_line a1 = 1) &&
+       (get_column a1 = 0) &&
+       (get_length a1 = 22) &&
+       (separates_adjacent_encoded_words a1 = false) &&
+       (get_decoded_word a1 = "Görd") &&
+       (get_charset a1 = "ISO8859-1") &&
+
+       (get_pos a2 = 24) &&
+       (get_line a2 = 1) &&
+       (get_column a2 = 24) &&
+       (get_length a2 = 22) &&
+       (separates_adjacent_encoded_words a2 = false) &&
+       (get_decoded_word a2 = "Görd") &&
+       (get_charset a2 = "ISO8859-1") &&
+
+       (separates_adjacent_encoded_words sp1 = true) &&
+       (separates_adjacent_encoded_words sp2 = true)
+
+    | _ ->
+       false
+;;
+
+
+
+(**********************************************************************)
+
+let test f n =
+  if f() then
+    print_endline ("Test " ^ n ^ " ok")
+  else
+    print_endline ("Test " ^ n ^ " FAILED!!!!");
+  flush stdout
+;;
+
+test t001 "001";;
+test t002 "002";;
+test t003 "003";;
+test t004 "004";;
+test t005 "005";;
+test t006 "006";;
+test t007 "007";;
+test t008 "008";;
+test t009 "009";;
+test t010 "010";;
+test t011 "011";;
+test t012 "012";;
+test t013 "013";;
+
+test t020 "020";;
+test t021 "021";;
+test t022 "022";;
+test t023 "023";;
+test t024 "024";;
+test t025 "025";;
+
+test t100 "100";;
+test t101 "101";;
+test t102 "102";;
+test t110 "110";;
+test t111 "111";;
+test t112 "112";;
+test t113 "113";;
+test t120 "120";;
+test t130 "130";;
+test t131 "131";;
+test t132 "132";;
+test t133 "133";;
+test t140 "140";;
+test t150 "150";;
+test t160 "160";;
+test t161 "161";;
+test t162 "162";;