You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

266 lines
7.5 KiB

(*
* Copyright (c) 2018-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*)
open! IStd
open OUnit2
module UnixDiffTest = FileDiff.UnixDiff.VISIBLE_FOR_TESTING_DO_NOT_USE_DIRECTLY
let test_unixdiff_process_raw_directives_with_valid_input =
let create_test input expected _ =
let found = UnixDiffTest.process_raw_directives input in
let pp_diff fmt (expected, actual) =
let expected_str = Format.asprintf "%a" (Pp.seq ~sep:"" UnixDiffTest.pp) expected in
let actual_str = Format.asprintf "%a" (Pp.seq ~sep:"" UnixDiffTest.pp) actual in
Format.fprintf fmt "Expected: '%s', found: '%s'" expected_str actual_str
in
assert_equal ~cmp:(List.equal ~equal:UnixDiffTest.equal) ~pp_diff expected found
in
[ ( "test_unixdiff_process_raw_directives_1"
, "UOOU"
, UnixDiffTest.[Unchanged; Old; Old; Unchanged] )
; ("test_unixdiff_process_raw_directives_2", "", []) ]
|> List.map ~f:(fun (name, test_input, expected_output) ->
name >:: create_test test_input expected_output )
let test_unixdiff_process_raw_directives_with_invalid_input =
let create_test input expected_exception _ =
let run () = UnixDiffTest.process_raw_directives input in
assert_raises expected_exception run
in
[ ( "test_unixdiff_process_raw_directives_1"
, "U OOU"
, Logging.InferUserError "Unexpected char in input sequence. Failed parsing" )
; ( "test_unixdiff_process_raw_directives_2"
, "UZ"
, Logging.InferUserError "Unexpected char in input sequence. Failed parsing" )
; ( "test_unixdiff_process_raw_directives_3"
, "UU "
, Logging.InferUserError "Unexpected char in input sequence. Failed parsing" )
; ( "test_unixdiff_process_raw_directives_4"
, " U"
, Logging.InferUserError "Unexpected char in input sequence. Failed parsing" ) ]
|> List.map ~f:(fun (name, test_input, expected_exception) ->
name >:: create_test test_input expected_exception )
let test_unixdiff_pp =
let create_test input expected _ =
let found = Format.asprintf "%a" (Pp.seq ~sep:"" UnixDiffTest.pp) input in
let pp_diff fmt (expected, actual) =
Format.fprintf fmt "Expected: '%s', found: '%s'" expected actual
in
assert_equal ~cmp:String.equal ~pp_diff expected found
in
[ ("test_unixdiff_pp_1", UnixDiffTest.[Unchanged; Old; Old; Unchanged], "UOOU")
; ("test_unixdiff_pp_2", [], "") ]
|> List.map ~f:(fun (name, test_input, expected_output) ->
name >:: create_test test_input expected_output )
module FileDiffTest = FileDiff.VISIBLE_FOR_TESTING_DO_NOT_USE_DIRECTLY
let u length = List.init ~f:(fun _ -> UnixDiffTest.Unchanged) length
let n length = List.init ~f:(fun _ -> UnixDiffTest.New) length
let o length = List.init ~f:(fun _ -> UnixDiffTest.Old) length
let test_parse_directives_with_valid_input =
let create_test input expected _ =
let found = FileDiffTest.parse_directives input in
let pp_diff fmt (expected, actual) =
let expected_str = Format.asprintf "%a" (Pp.seq ~sep:", " Format.pp_print_int) expected in
let actual_str = Format.asprintf "%a" (Pp.seq ~sep:", " Format.pp_print_int) actual in
Format.fprintf fmt "Expected: '%s', found: '%s'" expected_str actual_str
in
assert_equal ~cmp:(List.equal ~equal:Int.equal) ~pp_diff expected found
in
[ (*
=== test1 ===
File1 and File2 are empty
*)
("test_parse_directives_with_valid_input_1", [], [])
(*
=== test2 ===
File1 File2
a x
b
c
d
*)
; ("test_parse_directives_with_valid_input_2", o 4 @ n 1, [1])
(*
=== test3 ===
File1 File2
a x
v b
b c
c Z
*)
; ("test_parse_directives_with_valid_input_3", o 2 @ n 1 @ u 2 @ n 1, [1; 4])
(*
=== test4 ===
File1 File2
a w
b x
c y
z
*)
; ("test_parse_directives_with_valid_input_4", o 3 @ n 4, [1; 2; 3; 4])
(*
=== test5 ===
File1 File2
a a
b b
c c
d d
e e
w
x
y
*)
; ("test_parse_directives_with_valid_input_5", u 5 @ n 3, [6; 7; 8])
(*
=== test6 ===
File1 File2
a a
b b
c c
d d
e e
f i
g
h
i
*)
; ("test_parse_directives_with_valid_input_6", u 5 @ o 3 @ u 1, [6])
(*
=== test7 ===
File1 File2
a
b
c
*)
; ("test_parse_directives_with_valid_input_7", o 3, [1])
(*
=== test8 ===
File1 File2
a a
b d
c x
d y
*)
; ("test_parse_directives_with_valid_input_8", u 1 @ o 2 @ u 1 @ n 2, [2; 3; 4])
(*
=== test9 ===
File1 File2
a d
b x
c y
d z
*)
; ("test_parse_directives_with_valid_input_9", o 3 @ u 1 @ n 3, [1; 2; 3; 4])
(*
=== test10 ===
File1 File2
a a
b x
c d
d y
e z
*)
; ("test_parse_directives_with_valid_input_10", u 1 @ o 2 @ n 1 @ u 1 @ o 1 @ n 2, [2; 4; 5])
(*
=== test11 ===
File1 File2
a a
b b
c x
d c
e y
*)
; ("test_parse_directives_with_valid_input_11", u 2 @ n 1 @ u 1 @ o 2 @ n 1, [3; 5])
; ( "test_parse_directives_with_valid_input_12"
, o 1 @ n 1 @ u 6 @ o 2 @ n 2 @ u 5 @ o 2 @ n 2 @ u 244 @ o 12 @ u 3 @ o 1 @ n 1 @ u 3
, [1; 8; 9; 15; 16; 261; 264] )
(*
=== test13 ===
File1 File2
a a
b b
c c
d x
e y
d
e
*)
; ("test_parse_directives_with_valid_input_13", u 3 @ n 2 @ u 2, [4; 5])
(*
=== test14 ===
File1 File2
a e
b w
c x
d y
e z
*)
; ("test_parse_directives_with_valid_input_14", o 4 @ u 1 @ n 4, [1; 2; 3; 4; 5])
(*
=== test15 ===
File1 File2
a a
b x
c
d
e
*)
; ("test_parse_directives_with_valid_input_15", u 1 @ o 4 @ n 1, [2])
(*
=== test16 ===
File1 File2
a x
b e
c
d
e
*)
; ("test_parse_directives_with_valid_input_16", o 4 @ n 1 @ u 1, [1])
(*
=== test17 ===
File1 File2
a x
v b
b c
c
*)
; ("test_parse_directives_with_valid_input_17", o 2 @ n 1 @ u 2, [1]) ]
|> List.map ~f:(fun (name, test_input, expected_output) ->
name >:: create_test test_input expected_output )
let test_parse_unix_diff_with_valid_input =
let create_test input expected _ =
let found = FileDiff.parse_unix_diff input in
let pp_diff fmt (expected, actual) =
let expected_str = Format.asprintf "%a" (Pp.seq ~sep:", " Format.pp_print_int) expected in
let actual_str = Format.asprintf "%a" (Pp.seq ~sep:", " Format.pp_print_int) actual in
Format.fprintf fmt "Expected: '%s', found: '%s'" expected_str actual_str
in
assert_equal ~cmp:(List.equal ~equal:Int.equal) ~pp_diff expected found
in
[("test_parse_unix_diff_1", "OONUU", [1]); ("test_parse_unix_diff_2", "UOONUONN", [2; 4; 5])]
|> List.map ~f:(fun (name, test_input, expected_output) ->
name >:: create_test test_input expected_output )
let tests =
"filediff"
>::: test_unixdiff_process_raw_directives_with_valid_input
@ test_unixdiff_process_raw_directives_with_invalid_input @ test_unixdiff_pp
@ test_parse_directives_with_valid_input @ test_parse_unix_diff_with_valid_input