summaryrefslogtreecommitdiffstats
path: root/vendor/array_tool/tests/string.rs
blob: ec73bbb7408682bbee94f3656de67309913beac1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
extern crate array_tool;

#[test]
fn it_squeezes_characters() {
  use array_tool::string::Squeeze;

  assert_eq!("yellow moon".squeeze(""), "yelow mon");
  assert_eq!("  now   is  the".squeeze(" "), " now is the");
  assert_eq!("ééé".squeeze(""), "é");
  assert_eq!("  ///  aa".squeeze("/"), "  /  aa");

  let string: String = format!("yellow moon");
  assert_eq!(string.squeeze(""), "yelow mon");

  assert_eq!("".squeeze(""), "");
}

#[test]
fn it_iterates_over_every_grapheme_character() {
  use array_tool::string::ToGraphemeBytesIter;

  let temp = "a s—d féZ";
  let mut giter = temp.grapheme_bytes_iter();

  assert_eq!(giter.next().unwrap(), "a".as_bytes());
  assert_eq!(giter.next().unwrap(), " ".as_bytes());
  assert_eq!(giter.next().unwrap(), "s".as_bytes());
  assert_eq!(giter.next().unwrap(), "—".as_bytes());
  assert_eq!(giter.next().unwrap(), "d".as_bytes());
  assert_eq!(giter.next().unwrap(), " ".as_bytes());
  assert_eq!(giter.next().unwrap(), "f".as_bytes());
  assert_eq!(giter.next().unwrap(), "é".as_bytes());
  assert_eq!(giter.next().unwrap(), "Z".as_bytes());
  assert_eq!(giter.next(), None);

  let somestring2 = format!("{}", "a s—d féZ");
  let mut giter2 = somestring2.grapheme_bytes_iter();

  assert_eq!(giter2.next().unwrap(), "a".as_bytes());
  assert_eq!(giter2.next().unwrap(), " ".as_bytes());
  assert_eq!(giter2.next().unwrap(), "s".as_bytes());
  assert_eq!(giter2.next().unwrap(), "—".as_bytes());
  assert_eq!(giter2.next().unwrap(), "d".as_bytes());
  assert_eq!(giter2.next().unwrap(), " ".as_bytes());
  assert_eq!(giter2.next().unwrap(), "f".as_bytes());
  assert_eq!(giter2.next().unwrap(), "é".as_bytes());
  assert_eq!(giter2.next().unwrap(), "Z".as_bytes());
  assert_eq!(giter2.next(), None);

  assert_eq!("".grapheme_bytes_iter().next(), None);
}

#[test]
fn it_justifies_one_line_in_for_string() {
  use array_tool::string::Justify;

  assert_eq!("asd asdf asd".justify_line(14), "asd  asdf  asd");
  assert_eq!("asd asdf asd".justify_line(16), "asd   asdf   asd");
  assert_eq!("asd as df asd".justify_line(16), "asd  as  df  asd");
  assert_eq!("asd as df asd".justify_line(18), "asd   as   df  asd");
  assert_eq!("  asd as df asd  ".justify_line(16), "asd  as  df  asd");
  assert_eq!("asdasdfasd".justify_line(16), "asdasdfasd");
  assert_eq!("asdasdfasd".justify_line(6), "asdasdfasd");
  assert_eq!("é é".justify_line(5), "é   é");
  assert_eq!("a s—d féZ".justify_line(12), "a   s—d  féZ");

  assert_eq!("".justify_line(14), "");
}

#[test]
fn it_substitutes_character_at_each_indexed_point() {
  use array_tool::string::SubstMarks;

  assert_eq!("asdf asdf asdf".subst_marks(vec![0,5,8], "Z"), "Zsdf ZsdZ asdf");
  assert_eq!("asdf asdf asdf".subst_marks(vec![8,5,0], "Z"), "Zsdf ZsdZ asdf");
  assert_eq!("asdf asdf asdf".subst_marks(vec![0,5,8], "\n"), "\nsdf \nsd\n asdf");
  assert_eq!("ééé".subst_marks(vec![1], "Z"), "éZé");
  assert_eq!("ééé".subst_marks(vec![1,2], "Z"), "éZZ");
  assert_eq!("ZZZ".subst_marks(vec![0,2], "é" ), "éZé");
  assert_eq!("ééé".subst_marks(vec![0], "Z"), "Zéé");

  assert_eq!("".subst_marks(vec![0], "Z"), "");
}

#[test]
fn it_seeks_end_of_whitespace_after_offset() {
  use array_tool::string::AfterWhitespace;

  assert_eq!("asdf           asdf asdf".seek_end_of_whitespace(6), Some(9));
  assert_eq!("asdf".seek_end_of_whitespace(3), Some(0));
  assert_eq!("asdf           ".seek_end_of_whitespace(6), None);
  assert_eq!("asdf".seek_end_of_whitespace(6), None);

  assert_eq!("".seek_end_of_whitespace(6), None);
}

#[test]
fn it_word_wraps_for_string() {
  use array_tool::string::WordWrap;

  assert_eq!(
    "01234 67 9 BC EFG IJ".word_wrap(6),
    "01234\n67 9\nBC EFG\nIJ"
  );

  assert_eq!(
    "0123456789ABC EFG IJ".word_wrap(6),
    "0123456789ABC\nEFG IJ"
  );
  assert_eq!(
    "1234\n 1234 6789 1234".word_wrap(10),
    "1234\n 1234 6789\n1234"
  );
  assert_eq!(
    "1234\n 1234 67 90 1234".word_wrap(10),
    "1234\n 1234 67\n90 1234"
  );
  assert_eq!(
    "1234\n 1234 67 90A 1234".word_wrap(10),
    "1234\n 1234 67\n90A 1234"
  );
  assert_eq!("1  \n34 ".word_wrap(3), "1  \n34 ");
  assert_eq!("1   34".word_wrap(3),   "1  \n34");
  assert_eq!("\n \n \n \n".word_wrap(1), "\n \n \n \n" );

  // White space to new line shouldn't add new lines.  Use seek ahead.
  assert_eq!("\nAA\nA \nA   \n".word_wrap(1), "\nAA\nA \nA   \n" );
  assert_eq!("\n \n \n \n     ".word_wrap(1), "\n \n \n \n     " );
}