values_unittest.rs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. use base::{NewValueSlotForTesting, ValueSlotRef};
  2. use rust_gtest_interop::prelude::*;
  3. #[gtest(RustValuesTest, AllocDealloc)]
  4. fn test_alloc_dealloc() {
  5. NewValueSlotForTesting();
  6. }
  7. #[gtest(RustValuesTest, StartsNone)]
  8. fn test_starts_none() {
  9. let mut v = NewValueSlotForTesting();
  10. let v = ValueSlotRef::from(v.pin_mut());
  11. expect_eq!(format!("{:?}", v), "(empty)");
  12. }
  13. #[gtest(RustValuesTest, SetDict)]
  14. fn test_set_dict() {
  15. let mut v = NewValueSlotForTesting();
  16. let mut v = ValueSlotRef::from(&mut v);
  17. let mut d = v.construct_dict();
  18. d.set_string_key("fish", "skate");
  19. d.set_none_key("antlers");
  20. d.set_bool_key("has_lungs", false);
  21. d.set_integer_key("fins", 2);
  22. d.set_double_key("bouyancy", 1.0);
  23. let mut nested_list = d.set_list_key("scales");
  24. nested_list.append_string("sea major");
  25. let mut nested_dict = d.set_dict_key("taxonomy");
  26. nested_dict.set_string_key("kingdom", "animalia");
  27. nested_dict.set_string_key("phylum", "chordata");
  28. // TODO(crbug.com/1282310): Use indoc to make this neater.
  29. expect_eq!(
  30. format!("{:?}", v),
  31. "{\n \
  32. \"antlers\": null,\n \
  33. \"bouyancy\": 1.0,\n \
  34. \"fins\": 2,\n \
  35. \"fish\": \"skate\",\n \
  36. \"has_lungs\": false,\n \
  37. \"scales\": [ \"sea major\" ],\n \
  38. \"taxonomy\": {\n \
  39. \"kingdom\": \"animalia\",\n \
  40. \"phylum\": \"chordata\"\n \
  41. }\n\
  42. }\n"
  43. );
  44. }
  45. #[gtest(RustValuesTest, SetList)]
  46. fn test_set_list() {
  47. let mut v = NewValueSlotForTesting();
  48. let mut v = ValueSlotRef::from(&mut v);
  49. let mut l = v.construct_list();
  50. l.reserve_size(5);
  51. l.append_bool(false);
  52. l.append_none();
  53. l.append_double(2.0);
  54. l.append_integer(4);
  55. let mut nested_list = l.append_list();
  56. nested_list.append_none();
  57. let mut nested_dict = l.append_dict();
  58. nested_dict.set_string_key("a", "b");
  59. l.append_string("hello");
  60. expect_eq!(
  61. format!("{:?}", v),
  62. "[ false, null, 2.0, 4, [ null ], {\n \
  63. \"a\": \"b\"\n\
  64. }, \"hello\" ]\n"
  65. );
  66. }
  67. fn expect_simple_value_matches<F>(f: F, expected: &str)
  68. where
  69. F: FnOnce(&mut ValueSlotRef),
  70. {
  71. let mut v = NewValueSlotForTesting();
  72. let mut v = ValueSlotRef::from(&mut v);
  73. f(&mut v);
  74. expect_eq!(format!("{:?}", v).trim_end(), expected);
  75. }
  76. #[gtest(RustValuesTest, SetSimpleOptionalValues)]
  77. fn test_set_simple_optional_values() {
  78. expect_simple_value_matches(|v| v.construct_none(), "null");
  79. expect_simple_value_matches(|v| v.construct_bool(true), "true");
  80. expect_simple_value_matches(|v| v.construct_integer(3), "3");
  81. expect_simple_value_matches(|v| v.construct_double(3.1), "3.1");
  82. expect_simple_value_matches(|v| v.construct_string("a"), "\"a\"");
  83. }
  84. #[gtest(RustValuesTest, ReuseSlot)]
  85. fn test_reuse_slot() {
  86. let mut v = NewValueSlotForTesting();
  87. let mut v = ValueSlotRef::from(&mut v);
  88. v.construct_none();
  89. let mut d = v.construct_dict();
  90. d.set_integer_key("a", 3);
  91. v.construct_integer(7);
  92. expect_eq!(format!("{:?}", v).trim_end(), "7");
  93. }