(*
 * Copyright (c) 2017-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

let create_fake_jsonbug ?(bug_type = "bug_type") ?(qualifier = "qualifier")
    ?(severity = "severity") ?(line = 1) ?(column = 1) ?(procedure = "procedure")
    ?(procedure_start_line = 1) ?(file = "file/at/a/certain/path.java") ?(bug_trace = [])
    ?(key = "File|method|TYPE") ?(node_key = Some "1234") ?(hash = "1") ?(dotty = None)
    ?(infer_source_loc = None) ?(linters_def_file = Some "file/at/certain/path.al") ?doc_url () :
    Jsonbug_t.jsonbug =
  { bug_type
  ; qualifier
  ; severity
  ; line
  ; column
  ; procedure
  ; procedure_start_line
  ; file
  ; bug_trace
  ; node_key
  ; key
  ; hash
  ; dotty
  ; infer_source_loc
  ; bug_type_hum= bug_type
  ; linters_def_file
  ; doc_url
  ; traceview_id= None
  ; censored_reason= None
  ; access= None
  ; extras= None }


let pp_diff_of_list ~pp group_name fmt (expected, actual) =
  Format.fprintf fmt "[%s]: Expected: [%a] Found: [%a]" group_name (Pp.comma_seq pp) expected
    (Pp.comma_seq pp) actual


let pp_diff_of_string_list = pp_diff_of_list ~pp:Format.pp_print_string

let pp_diff_of_int_list = pp_diff_of_list ~pp:Format.pp_print_int

(* Sort hashes to make things easier to compare *)
let sorted_hashes_of_issues (issues : Jsonbug_t.report) =
  let hash (i : Jsonbug_t.jsonbug) = i.Jsonbug_t.hash in
  List.sort ~compare:String.compare (List.rev_map ~f:hash issues)
