#include "main.h"
#include "internal.h"

// some simple tests to ensure the libunistring we've compiled/linked against
// behaves as expected.

TEST_CASE("Libunistring") {
  auto nc_ = testing_notcurses();
  if(!nc_){
    return;
  }
  ncplane* ncp_ = notcurses_stdplane(nc_);
  REQUIRE(ncp_);

  SUBCASE("WordbreakChars") {
    const wchar_t breakers[] = {
      // L'\u0009', // horizontal tab
      L'\u0020', // space
      // L'\u007c', // vertical line
      // L'\u00ad', // soft hyphen
      // L'\u058a', // armenian hyphen
      // L'\u0f0b', // tibetan mark intersyllabic tsheg
      // L'\u1361', // ethiopic wordspace
      L'\u1680', // ogham space mark
      //L'\u17d5', // khmer sign bariyoosan
      L'\u2000', // en quad
      L'\u2001', // em quad
      L'\u2002', // en quad
      L'\u2003', // em quad
      L'\u2004', // three-per-em space
      L'\u2005', // four-per-em space
      L'\u2006', // six-per-em space
      L'\u2008', // punctuation space
      L'\u2009', // thin space
      L'\u200a', // hair space
      //L'\u2010', // hyphen
      //L'\u2027', // hyphenation point
      0
    }, *b;
    for(b = breakers ; *b ; ++b){
      if(!iswordbreak(*b)){
        fprintf(stderr, "Unexpectedly fails to wordbreak: U+%04x [%lc]\n", *b, *b);
      }
      CHECK(iswordbreak(*b));
    }
    CHECK(!islinebreak(L'\u000d'));
  }

  // \u000d carriage return is *not* a linebreaker
  SUBCASE("LinebreakChars") {
    const wchar_t breakers[] = {
      L'\u000a', // linefeed
      L'\u000b', // vertical tab
      L'\u000c', // formfeed
      0
    }, *b;
    for(b = breakers ; *b ; ++b){
      if(!islinebreak(*b)){
        fprintf(stderr, "Unexpectedly fails to linebreak: U+%04x [%lc]\n", *b, *b);
      }
      CHECK(islinebreak(*b));
    }
    CHECK(!islinebreak(L'\u000d'));
  }

  CHECK(0 == notcurses_stop(nc_));

}
