about summary refs log tree commit diff stats
path: root/icons/proIconMsg.png
blob: d92108c2fba8728940d0ca1d354217e279840920 (plain)
ofshex dumpascii
0000 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 00 00 00 20 00 00 00 20 08 06 00 00 00 73 7a 7a .PNG........IHDR.............szz
0020 f4 00 00 00 04 73 42 49 54 08 08 08 08 7c 08 64 88 00 00 00 09 70 48 59 73 00 00 00 e5 00 00 00 .....sBIT....|.d.....pHYs.......
0040 e5 01 8f e5 9b 3c 00 00 00 19 74 45 58 74 53 6f 66 74 77 61 72 65 00 77 77 77 2e 69 6e 6b 73 63 .....<....tEXtSoftware.www.inksc
0060 61 70 65 2e 6f 72 67 9b ee 3c 1a 00 00 04 ec 49 44 41 54 58 85 c5 56 5f 4c 53 67 14 ff dd 4b 7b ape.org..<.....IDATX..V_LSg...K{
0080 db 62 e1 52 48 a3 09 34 5a 8a cd ad d5 8a a0 c3 38 0c 92 06 a7 d9 d3 26 09 d1 cc 2d 0c 93 a1 d1 .b.RH..4Z.......8......&...-....
00a0 2d ee 61 59 58 f0 65 82 0a 51 b7 17 32 9c 71 26 0b 24 3c 18 93 49 1f c0 66 99 33 40 4c 34 44 a5 -.aYX.e..Q..2.q&.$<..I..f.3@L4D.
00c0 58 25 88 30 d1 d9 5a e0 7a 5b 4b 6b e9 d9 c3 b5 b4 9d 7f d6 22 ba 5f 72 72 bf ef dc ef 9c df ef X%.0..Z.z[Kk........"._rr.......
00e0 3b f7 7c f9 2e 43 44 00 00 86 61 38 a3 d1 d8 94 95 95 b5 85 e7 f9 3c 8e e3 38 2c 22 c2 e1 70 58 ;.|..CD...a8..........<..8,"..pX
0100 14 45 9f 24 49 7f 8c 8d 8d 7d 47 44 61 00 00 11 81 e3 38 c1 6c 36 0f 3b 1c 8e 10 bd 65 38 1c 8e .E.$I....}GDa.....8.l6.;....e8..
0120 90 d9 6c 1e e6 38 4e 88 6d 5e 69 b1 58 5c 3e 9f ef 6d 73 cf c3 e7 f3 91 c5 62 71 01 50 c2 64 32 ..l..8N.m^i.X\>..ms......bq.P.d2
0140 1d 73 3a 9d e1 77 c6 fe 1c 4e a7 33 6c 32 99 8e c1 66 b3 5d 7d d7 e4 31 d8 6c b6 ab 2c cf f3 b9 .s:..w...N.3l2...f.]}..1.l..,...
0160 8b d9 6c e9 80 e7 f9 5c 76 b1 bb 3d 1d 70 1c c7 b1 ff 17 79 0c 8a c5 4c 36 32 32 82 be 3e 27 ae ..l....\v..=.p.....y...L622..>'.
0180 5c 71 00 00 56 ad da 08 ab 75 13 d6 ac 59 03 bd 5e ff f6 04 74 74 b4 a3 ab ab 05 eb d6 05 50 5e \q..V....u...Y..^...tt........P^
01a0 ee 41 6b 2b 81 61 80 5b b7 1c 70 b9 32 d1 d9 a9 83 56 5b 81 c3 87 db a1 d5 6a 93 83 ed 76 fb fd .Ak+.a.[..p.2....V[......j...v..
01c0 85 76 b1 28 8a 54 5b fb 01 9d 38 91 4d d1 28 88 e8 d5 d6 d7 c7 d2 b6 6d 46 ea ee 3e 37 1f 6f b7 .v.(.T[...8.M.(........mF..>7.o.
01e0 db ef 2f 58 80 d7 eb a5 ad 5b 4d 34 38 c8 bc 96 38 d1 42 21 d0 fe fd 79 d4 db 7b e1 cd 05 d4 d5 ../X.....[M48...8.B!...y..{.....
0200 6d a7 a1 a1 64 82 6b d7 40 b3 b3 c9 3e 97 0b 34 33 13 9f 47 22 a0 1d 3b 8c e4 f1 78 c8 6e b7 df m...d.k.@...>..43..G"..;...x.n..
0220 5f d0 29 e8 ed bd 00 83 e1 0a ac 56 79 1e 8d 02 7b f6 00 a5 a5 80 c9 04 cc ce ca fe 53 a7 80 d5 _.)........Vy...{...........S...
0240 ab 81 bc 3c c0 ed 96 7d 19 19 c0 f1 e3 63 38 78 b0 1a 00 b0 20 01 6d 6d df a0 a1 61 6a 7e 1e 0c ...<...}.....c8x......mm...aj~..
0260 02 e3 e3 f2 78 72 12 e8 ed 95 c7 13 13 00 11 30 37 07 9c 39 13 8f 5f be 1c 58 b9 72 18 7e bf 5f ....xr.........07..9.._..X.r.~._
0280 99 b6 80 e9 e9 69 ac 58 e1 87 52 19 f7 69 34 32 59 0c 05 05 f2 d3 eb 4d 26 4d 44 45 c5 63 84 42 .....i.X..R..i42Y......M&MDE.c.B
02a0 8f 55 69 1f 43 97 cb 05 ab 55 4c f2 b1 2c 70 fa b4 5c f2 ca 4a a0 a4 44 f6 37 36 ca 25 57 a9 80 .Ui.C....UL..,p..\..J..D.76.%W..
02c0 fa fa e4 3c 65 65 00 91 4f 9d b6 80 a1 a1 01 ac 5d 2b bd e0 df bc 59 b6 44 14 14 00 6d 6d 2f cf ...<ee..O.......]+....Y.D...mm/.
02e0 a3 d1 00 4b 96 84 59 36 18 0c 06 d2 11 20 49 5e e4 e4 a4 13 f1 6a 44 22 88 2a 44 51 f4 44 22 11 ...K..Y6......I^.....jD".*DQ.D".
0300 b3 42 91 5a 31 4a 4a b6 a2 bf bf 0d 16 8b ac 7b 7a 1a f8 fc 43 06 bc 52 09 28 14 c0 fc 53 81 68 .B.Z1JJ........{z...C..R.(...S.h
0320 06 83 68 06 03 a5 9a 81 4a 03 e4 e7 07 d0 d8 28 7f be d9 59 40 92 f0 54 31 35 35 f5 c3 a1 43 87 ..h.....J......(...Y@..T155...C.
0340 ac cd cd cd ba 54 04 94 95 6d 44 67 6
void test_trace_check_compares() {
  CHECK_TRACE_CONTENTS("test layer", "");
  trace("test layer") << "foo";
  CHECK_TRACE_CONTENTS("test layer", "foo");
}

void test_trace_check_filters_layers() {
  trace("test layer 1") << "foo";
  trace("test layer 2") << "bar";
  CHECK_TRACE_CONTENTS("test layer 1", "foo");
}

void test_trace_check_ignores_other_lines() {
  trace("test layer 1") << "foo";
  trace("test layer 1") << "bar";
  CHECK_TRACE_CONTENTS("test layer 1", "foo");
}

void test_trace_check_always_finds_empty_lines() {
  CHECK_TRACE_CONTENTS("test layer 1", "");
}

void test_trace_check_treats_empty_layers_as_wildcards() {
  trace("test layer 1") << "foo";
  CHECK_TRACE_CONTENTS("", "foo");
}

void test_trace_check_multiple_lines_at_once() {
  trace("test layer 1") << "foo";
  trace("test layer 2") << "bar";
  CHECK_TRACE_CONTENTS("", "foobar");
}

void test_trace_check_always_finds_empty_lines2() {
  CHECK_TRACE_CONTENTS("test layer 1", "");
}

void test_trace_orders_across_layers() {
  trace("test layer 1") << "foo";
  trace("test layer 2") << "bar";
  trace("test layer 1") << "qux";
  CHECK_TRACE_CONTENTS("", "foobarqux");
}

void test_trace_orders_across_layers2() {
  trace("test layer 1") << "foo";
  trace("test layer 2") << "bar";
  trace("test layer 1") << "qux";
  CHECK_TRACE_CONTENTS("foobarqux");
}

void test_trace_checks_ordering_spanning_multiple_layers() {
  trace("layer1") << "foo";
  trace("layer2") << "bar";
  trace("layer1") << "qux";
  CHECK_TRACE_CONTENTS("layer1: foolayer2: barlayer1: qux");
}

void test_trace_segments_within_layers() {
  trace("test layer 1") << "foo";
  trace("test layer 2") << "bar";
  new_trace_frame("test layer 1");
  trace("test layer 1") << "qux";
  CHECK_TRACE_CONTENTS("test layer 1", "fooqux");
  CHECK_TRACE_CONTENTS("test layer 1", 0, "foo");
  CHECK_TRACE_DOESNT_CONTAIN("test layer 1", 1, "foo");
}

void test_trace_checks_ordering_across_layers_and_frames() {
  trace("test layer 1") << "foo";
  trace("test layer 2") << "bar";
  new_trace_frame("test layer 1");
  trace("test layer 1") << "qux";
  CHECK_TRACE_CONTENTS("test layer 1/0: footest layer 2: bartest layer 1: qux");
  CHECK_TRACE_CONTENTS("test layer 1: footest layer 2: bartest layer 1/1: qux");
}

void trace_test_fn(int n) {
  if (n == 0) return;
  new_trace_frame("foo");
  trace("foo") << "before: " << n;
  trace_test_fn(n-1);
  trace("foo") << "after: " << n;
}

void test_trace_keeps_level_together() {
  CHECK_TRACE_CONTENTS("foo", "");
  trace_test_fn(4);
  CHECK_TRACE_CONTENTS("foo", 2, "before: 3after: 3");
}

void test_trace_supports_multiple_layers() {
  trace("test layer 1") << "foo";
  trace("test layer 2") << "bar";
  trace("test layer 1") << "qux";
  CHECK_TRACE_CONTENTS("test layer 1,test layer 2", "foobarqux");
}

void test_trace_supports_hierarchical_layers() {
  trace("test layer/a") << "foo";
  trace("different layer/c") << "foo 2";
  trace("test layer/b") << "bar";
  CHECK_TRACE_CONTENTS("test layer/", "foobar");
}

void test_trace_supports_count() {
  trace("test layer 1") << "foo";
  trace("test layer 1") << "foo";
  CHECK_EQ(trace_count("test layer 1", "foo"), 2);
}

void test_trace_supports_count2() {
  trace("test layer 1") << "foo";
  trace("test layer 1") << "bar";
  CHECK_EQ(trace_count("test layer 1"), 2);
}

// pending: DUMP tests
// pending: readable_contents() adds newline if necessary.
// pending: RAISE also prints to stderr.
// pending: RAISE doesn't print to stderr if Hide_warnings is set.
// pending: RAISE doesn't have to be saved if Hide_warnings is set, just printed.
// pending: RAISE prints to stderr if Trace_stream is NULL.
// pending: RAISE prints to stderr if Trace_stream is NULL even if Hide_warnings is set.
// pending: RAISE << ... die() doesn't die if Hide_warnings is set.



// can't check trace because trace methods call 'split'

void test_split_returns_at_least_one_elem() {
  vector<string> result = split("", ",");
  CHECK_EQ(result.size(), 1);
  CHECK_EQ(result[0], "");
}

void test_split_returns_entire_input_when_no_delim() {
  vector<string> result = split("abc", ",");
  CHECK_EQ(result.size(), 1);
  CHECK_EQ(result[0], "abc");
}

void test_split_works() {
  vector<string> result = split("abc,def", ",");
  CHECK_EQ(result.size(), 2);
  CHECK_EQ(result[0], "abc");
  CHECK_EQ(result[1], "def");
}

void test_split_works2() {
  vector<string> result = split("abc,def,ghi", ",");
  CHECK_EQ(result.size(), 3);
  CHECK_EQ(result[0], "abc");
  CHECK_EQ(result[1], "def");
  CHECK_EQ(result[2], "ghi");
}

void test_split_handles_multichar_delim() {
  vector<string> result = split("abc,,def,,ghi", ",,");
  CHECK_EQ(result.size(), 3);
  CHECK_EQ(result[0], "abc");
  CHECK_EQ(result[1], "def");
  CHECK_EQ(result[2], "ghi");
}