[tests] Add more tests for _get_ligature_carets
diff --git a/test/api/fonts/NotoNastaliqUrdu-Regular.ttf b/test/api/fonts/NotoNastaliqUrdu-Regular.ttf
new file mode 100644
index 0000000..891f633
--- /dev/null
+++ b/test/api/fonts/NotoNastaliqUrdu-Regular.ttf
Binary files differ
diff --git a/test/api/test-ot-ligature-carets.c b/test/api/test-ot-ligature-carets.c
index d842785..3363be1 100644
--- a/test/api/test-ot-ligature-carets.c
+++ b/test/api/test-ot-ligature-carets.c
@@ -28,29 +28,150 @@
 #include <hb-ot.h>
 
 static void
-test_ot_layout_feature_get_name_ids_and_characters (void)
+test_ot_layout_get_ligature_carets_aat_lcar (void)
 {
   hb_face_t *face = hb_test_open_font_file ("fonts/lcar.ttf");
   hb_font_t *font = hb_font_create (face);
   hb_font_set_scale (font, hb_face_get_upem (face) * 2, hb_face_get_upem (face) * 4);
 
-  hb_position_t caret_array[2];
-  unsigned int caret_count = 2;
-  g_assert_cmpuint (2, ==, hb_ot_layout_get_ligature_carets (font, HB_DIRECTION_RTL,
-							     98, 0, &caret_count,
+  hb_position_t caret_array[16];
+
+  /* a normal call */
+  {
+    unsigned caret_count = 16;
+    g_assert_cmpuint (2, ==, hb_ot_layout_get_ligature_carets (font, HB_DIRECTION_LTR,
+							       98, 0, &caret_count,
+							       caret_array));
+
+    g_assert_cmpuint (2, ==, caret_count);
+    g_assert_cmpuint (1130, ==, caret_array[0]);
+    g_assert_cmpuint (2344, ==, caret_array[1]);
+  }
+
+  /* RTL, maybe needs to be tweaked however */
+  {
+    unsigned caret_count = 16;
+    g_assert_cmpuint (2, ==, hb_ot_layout_get_ligature_carets (font, HB_DIRECTION_RTL,
+							       98, 0, &caret_count,
+							       caret_array));
+
+    g_assert_cmpuint (2, ==, caret_count);
+    g_assert_cmpuint (1130, ==, caret_array[0]);
+    g_assert_cmpuint (2344, ==, caret_array[1]);
+  }
+
+  /* bottom to top call, bigger caret positions as the specified scaling */
+  {
+    unsigned caret_count = 16;
+    g_assert_cmpuint (2, ==, hb_ot_layout_get_ligature_carets (font, HB_DIRECTION_BTT,
+							       98, 0, &caret_count,
+							       caret_array));
+
+    g_assert_cmpuint (2, ==, caret_count);
+    g_assert_cmpuint (2260, ==, caret_array[0]);
+    g_assert_cmpuint (4688, ==, caret_array[1]);
+  }
+
+  /* empty carets */
+  {
+    unsigned caret_count = 16;
+    g_assert_cmpuint (0, ==, hb_ot_layout_get_ligature_carets (font, HB_DIRECTION_LTR,
+							       97, 0, &caret_count,
+							       caret_array));
+
+    g_assert_cmpuint (0, ==, caret_count);
+  }
+
+  hb_font_destroy (font);
+  hb_face_destroy (face);
+}
+
+static void
+test_ot_layout_get_ligature_carets_ot_gsub (void)
+{
+  hb_face_t *face = hb_test_open_font_file ("fonts/NotoNastaliqUrdu-Regular.ttf");
+  hb_font_t *font = hb_font_create (face);
+  hb_font_set_scale (font, hb_face_get_upem (face) * 2, hb_face_get_upem (face) * 4);
+
+  hb_position_t caret_array[16];
+
+  {
+/*
+    unsigned caret_count = 16;
+    g_assert_cmpuint (210, ==, hb_ot_layout_get_ligature_carets (font, HB_DIRECTION_LTR,
+							       188, 0, &caret_count,
+							       caret_array));
+    g_assert_cmpuint (3, ==, caret_count);
+    g_assert_cmpuint (2718, ==, caret_array[0]);
+    g_assert_cmpuint (5438, ==, caret_array[1]);
+    g_assert_cmpuint (5438, ==, caret_array[1]);
+*/
+  }
+
+  {
+    unsigned caret_count = 16;
+    g_assert_cmpuint (3, ==, hb_ot_layout_get_ligature_carets (font, HB_DIRECTION_LTR,
+							       1020, 0, &caret_count,
+							       caret_array));
+/*
+    g_assert_cmpuint (3, ==, caret_count);
+    g_assert_cmpuint (2718, ==, caret_array[0]);
+    g_assert_cmpuint (5438, ==, caret_array[1]);
+    g_assert_cmpuint (5438, ==, caret_array[1]);
+*/
+  }
+
+  {
+/*
+    unsigned caret_count = 16;
+    g_assert_cmpuint (0, ==, hb_ot_layout_get_ligature_carets (font, HB_DIRECTION_LTR,
+							       1021, 0, &caret_count,
+							       caret_array));
+    g_assert_cmpuint (0, ==, caret_count);
+*/
+  }
+
+  {
+    unsigned caret_count = 16;
+    g_assert_cmpuint (1, ==, hb_ot_layout_get_ligature_carets (font, HB_DIRECTION_LTR,
+							       1022, 0, &caret_count,
+							       caret_array));
+/*
+    g_assert_cmpuint (1, ==, caret_count);
+    g_assert_cmpuint (3530, ==, caret_array[0]);
+*/
+  }
+
+  {
+    unsigned caret_count = 16;
+    g_assert_cmpuint (2, ==, hb_ot_layout_get_ligature_carets (font, HB_DIRECTION_LTR,
+							       1023, 0, &caret_count,
+							       caret_array));
+/*
+    g_assert_cmpuint (2, ==, caret_count);
+    g_assert_cmpuint (2352, ==, caret_array[0]);
+    g_assert_cmpuint (4706, ==, caret_array[1]);
+*/
+  }
+
+  hb_font_destroy (font);
+  hb_face_destroy (face);
+}
+
+static void
+test_ot_layout_get_ligature_carets_empty (void)
+{
+  hb_face_t *face = hb_face_get_empty ();
+  hb_font_t *font = hb_font_create (face);
+  hb_font_set_scale (font, hb_face_get_upem (face) * 2, hb_face_get_upem (face) * 4);
+
+  hb_position_t caret_array[3];
+  unsigned int caret_count = 3;
+  g_assert_cmpuint (0, ==, hb_ot_layout_get_ligature_carets (font, HB_DIRECTION_RTL,
+							     1024, 0, &caret_count,
 							     caret_array));
 
-  g_assert_cmpuint (2, ==, caret_count);
-  g_assert_cmpuint (1130, ==, caret_array[0]);
-  g_assert_cmpuint (2344, ==, caret_array[1]);
-
-  g_assert_cmpuint (2, ==, hb_ot_layout_get_ligature_carets (font, HB_DIRECTION_BTT,
-							     98, 0, &caret_count,
-							     caret_array));
-
-  g_assert_cmpuint (2, ==, caret_count);
-  g_assert_cmpuint (2260, ==, caret_array[0]);
-  g_assert_cmpuint (4688, ==, caret_array[1]);
+  g_assert_cmpuint (0, ==, caret_count);
 
   hb_font_destroy (font);
   hb_face_destroy (face);
@@ -61,7 +182,9 @@
 {
   g_test_init (&argc, &argv, NULL);
 
-  hb_test_add (test_ot_layout_feature_get_name_ids_and_characters);
+  hb_test_add (test_ot_layout_get_ligature_carets_aat_lcar);
+  hb_test_add (test_ot_layout_get_ligature_carets_ot_gsub);
+  hb_test_add (test_ot_layout_get_ligature_carets_empty);
 
   return hb_test_run ();
 }