Summary: We will use it in follow up diffs. From many perspectives, if the function belongs to an anonymous class, it is useful to know the original user-defined class. This function makes this distinction clear. Thanks to ngorogiannis, whos work on refactoring `Typ.name` made this module easy enough so we can introduce unit tests! Reviewed By: ngorogiannis Differential Revision: D20389311 fbshipit-source-id: 408d95660master
parent
545e6c8802
commit
769c221826
@ -0,0 +1,92 @@
|
||||
(*
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* 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
|
||||
open JavaClassName
|
||||
module F = Format
|
||||
|
||||
let assert_equal_to classname ~expected_package ~expected_classname =
|
||||
assert_equal ~printer:JavaClassName.to_string classname
|
||||
(make ~package:expected_package ~classname:expected_classname)
|
||||
|
||||
|
||||
let assert_some = function Some a -> a | None -> assert_failure "Expected Some, got None"
|
||||
|
||||
let assert_none = function Some _ -> assert_failure "Expected None, got Some" | None -> ()
|
||||
|
||||
let test_from_string =
|
||||
"test_from_string"
|
||||
>:: fun _ ->
|
||||
assert_equal_to
|
||||
(from_string "some.package.SomeClass")
|
||||
~expected_package:(Some "some.package") ~expected_classname:"SomeClass" ;
|
||||
assert_equal_to (from_string "SomeClass") ~expected_package:None ~expected_classname:"SomeClass" ;
|
||||
assert_equal_to
|
||||
(from_string "some.package.SomeClass$NestedClass")
|
||||
~expected_package:(Some "some.package") ~expected_classname:"SomeClass$NestedClass" ;
|
||||
assert_equal_to
|
||||
(from_string "SomeClass$NestedClass")
|
||||
~expected_package:None ~expected_classname:"SomeClass$NestedClass" ;
|
||||
(* anonymous classes *)
|
||||
assert_equal_to
|
||||
(from_string "some.package.SomeClass$1")
|
||||
~expected_package:(Some "some.package") ~expected_classname:"SomeClass$1" ;
|
||||
(* anonymous classes can be of nested levels *)
|
||||
assert_equal_to
|
||||
(from_string "some.package.SomeClass$1$3")
|
||||
~expected_package:(Some "some.package") ~expected_classname:"SomeClass$1$3" ;
|
||||
(* anonymous classes can be inside nested *)
|
||||
assert_equal_to
|
||||
(from_string "SomeClass$NestedClass$1$3")
|
||||
~expected_package:None ~expected_classname:"SomeClass$NestedClass$1$3"
|
||||
|
||||
|
||||
let test_anonymous =
|
||||
"test_from_string"
|
||||
>:: fun _ ->
|
||||
(* If it is not an anonymous class, we expect this to return None *)
|
||||
get_user_defined_class_if_anonymous_inner
|
||||
(make ~package:(Some "some.package") ~classname:"SomeClass")
|
||||
|> assert_none ;
|
||||
get_user_defined_class_if_anonymous_inner (make ~package:None ~classname:"SomeClass")
|
||||
|> assert_none ;
|
||||
get_user_defined_class_if_anonymous_inner
|
||||
(make ~package:(Some "some.package") ~classname:"SomeClass$SomeNestedClass$AgainNestedClass")
|
||||
|> assert_none ;
|
||||
(* If it is an anonymous class, we expect this to be detected *)
|
||||
get_user_defined_class_if_anonymous_inner
|
||||
(make ~package:(Some "some.package") ~classname:"SomeClass$17")
|
||||
|> assert_some
|
||||
|> assert_equal_to ~expected_package:(Some "some.package") ~expected_classname:"SomeClass" ;
|
||||
(* Can be several nested anonymous classes *)
|
||||
get_user_defined_class_if_anonymous_inner
|
||||
(make ~package:(Some "some.package") ~classname:"SomeClass$17$23$1")
|
||||
|> assert_some
|
||||
|> assert_equal_to ~expected_package:(Some "some.package") ~expected_classname:"SomeClass" ;
|
||||
(* Can be nested class with anonymous class *)
|
||||
get_user_defined_class_if_anonymous_inner
|
||||
(make ~package:(Some "some.package") ~classname:"SomeClass$NestedClass$AgainNestedClass$17")
|
||||
|> assert_some
|
||||
|> assert_equal_to ~expected_package:(Some "some.package")
|
||||
~expected_classname:"SomeClass$NestedClass$AgainNestedClass" ;
|
||||
(* Can be nested class AND several nested anonymous classes *)
|
||||
get_user_defined_class_if_anonymous_inner
|
||||
(make ~package:(Some "some.package")
|
||||
~classname:"SomeClass$NestedClass$AgainNestedClass$17$23$1")
|
||||
|> assert_some
|
||||
|> assert_equal_to ~expected_package:(Some "some.package")
|
||||
~expected_classname:"SomeClass$NestedClass$AgainNestedClass" ;
|
||||
(* If package was empty, everything should still work *)
|
||||
get_user_defined_class_if_anonymous_inner
|
||||
(make ~package:None ~classname:"SomeClass$NestedClass$AgainNestedClass$17$23$1")
|
||||
|> assert_some
|
||||
|> assert_equal_to ~expected_package:None
|
||||
~expected_classname:"SomeClass$NestedClass$AgainNestedClass"
|
||||
|
||||
|
||||
let tests = "JavaClassNameTests" >::: [test_from_string; test_anonymous]
|
Loading…
Reference in new issue