13524472e8f064dbd42e1a35d511a1efe36d2cbf2Richard Uhler/*
23524472e8f064dbd42e1a35d511a1efe36d2cbf2Richard Uhler * Copyright (C) 2015 The Android Open Source Project
33524472e8f064dbd42e1a35d511a1efe36d2cbf2Richard Uhler *
43524472e8f064dbd42e1a35d511a1efe36d2cbf2Richard Uhler * Licensed under the Apache License, Version 2.0 (the "License");
53524472e8f064dbd42e1a35d511a1efe36d2cbf2Richard Uhler * you may not use this file except in compliance with the License.
63524472e8f064dbd42e1a35d511a1efe36d2cbf2Richard Uhler * You may obtain a copy of the License at
73524472e8f064dbd42e1a35d511a1efe36d2cbf2Richard Uhler *
83524472e8f064dbd42e1a35d511a1efe36d2cbf2Richard Uhler *      http://www.apache.org/licenses/LICENSE-2.0
93524472e8f064dbd42e1a35d511a1efe36d2cbf2Richard Uhler *
103524472e8f064dbd42e1a35d511a1efe36d2cbf2Richard Uhler * Unless required by applicable law or agreed to in writing, software
113524472e8f064dbd42e1a35d511a1efe36d2cbf2Richard Uhler * distributed under the License is distributed on an "AS IS" BASIS,
123524472e8f064dbd42e1a35d511a1efe36d2cbf2Richard Uhler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
133524472e8f064dbd42e1a35d511a1efe36d2cbf2Richard Uhler * See the License for the specific language governing permissions and
143524472e8f064dbd42e1a35d511a1efe36d2cbf2Richard Uhler * limitations under the License.
153524472e8f064dbd42e1a35d511a1efe36d2cbf2Richard Uhler */
163524472e8f064dbd42e1a35d511a1efe36d2cbf2Richard Uhler
173524472e8f064dbd42e1a35d511a1efe36d2cbf2Richard Uhlerpackage com.android.ahat;
183524472e8f064dbd42e1a35d511a1efe36d2cbf2Richard Uhler
193524472e8f064dbd42e1a35d511a1efe36d2cbf2Richard Uhlerimport com.android.tools.perflib.heap.Instance;
203524472e8f064dbd42e1a35d511a1efe36d2cbf2Richard Uhlerimport java.io.IOException;
213524472e8f064dbd42e1a35d511a1efe36d2cbf2Richard Uhlerimport static org.junit.Assert.assertEquals;
223524472e8f064dbd42e1a35d511a1efe36d2cbf2Richard Uhlerimport static org.junit.Assert.assertNotNull;
233524472e8f064dbd42e1a35d511a1efe36d2cbf2Richard Uhlerimport static org.junit.Assert.assertNull;
243524472e8f064dbd42e1a35d511a1efe36d2cbf2Richard Uhlerimport org.junit.Test;
253524472e8f064dbd42e1a35d511a1efe36d2cbf2Richard Uhler
263524472e8f064dbd42e1a35d511a1efe36d2cbf2Richard Uhlerpublic class InstanceUtilsTest {
273524472e8f064dbd42e1a35d511a1efe36d2cbf2Richard Uhler  @Test
2877ff54b5055ec55806069c8d026b102df29857b5Richard Uhler  public void asStringBasic() throws IOException {
293524472e8f064dbd42e1a35d511a1efe36d2cbf2Richard Uhler    TestDump dump = TestDump.getTestDump();
303524472e8f064dbd42e1a35d511a1efe36d2cbf2Richard Uhler    Instance str = (Instance)dump.getDumpedThing("basicString");
313524472e8f064dbd42e1a35d511a1efe36d2cbf2Richard Uhler    assertEquals("hello, world", InstanceUtils.asString(str));
323524472e8f064dbd42e1a35d511a1efe36d2cbf2Richard Uhler  }
333524472e8f064dbd42e1a35d511a1efe36d2cbf2Richard Uhler
343524472e8f064dbd42e1a35d511a1efe36d2cbf2Richard Uhler  @Test
35c7f7712a3808b8e3046eae8a4dbb7f6a7fc6faf2Richard Uhler  public void asStringCharArray() throws IOException {
36c7f7712a3808b8e3046eae8a4dbb7f6a7fc6faf2Richard Uhler    TestDump dump = TestDump.getTestDump();
37c7f7712a3808b8e3046eae8a4dbb7f6a7fc6faf2Richard Uhler    Instance str = (Instance)dump.getDumpedThing("charArray");
38c7f7712a3808b8e3046eae8a4dbb7f6a7fc6faf2Richard Uhler    assertEquals("char thing", InstanceUtils.asString(str));
39c7f7712a3808b8e3046eae8a4dbb7f6a7fc6faf2Richard Uhler  }
40c7f7712a3808b8e3046eae8a4dbb7f6a7fc6faf2Richard Uhler
41c7f7712a3808b8e3046eae8a4dbb7f6a7fc6faf2Richard Uhler  @Test
4277ff54b5055ec55806069c8d026b102df29857b5Richard Uhler  public void asStringTruncated() throws IOException {
4377ff54b5055ec55806069c8d026b102df29857b5Richard Uhler    TestDump dump = TestDump.getTestDump();
4477ff54b5055ec55806069c8d026b102df29857b5Richard Uhler    Instance str = (Instance)dump.getDumpedThing("basicString");
4577ff54b5055ec55806069c8d026b102df29857b5Richard Uhler    assertEquals("hello", InstanceUtils.asString(str, 5));
4677ff54b5055ec55806069c8d026b102df29857b5Richard Uhler  }
4777ff54b5055ec55806069c8d026b102df29857b5Richard Uhler
4877ff54b5055ec55806069c8d026b102df29857b5Richard Uhler  @Test
49c7f7712a3808b8e3046eae8a4dbb7f6a7fc6faf2Richard Uhler  public void asStringCharArrayTruncated() throws IOException {
50c7f7712a3808b8e3046eae8a4dbb7f6a7fc6faf2Richard Uhler    TestDump dump = TestDump.getTestDump();
51c7f7712a3808b8e3046eae8a4dbb7f6a7fc6faf2Richard Uhler    Instance str = (Instance)dump.getDumpedThing("charArray");
52c7f7712a3808b8e3046eae8a4dbb7f6a7fc6faf2Richard Uhler    assertEquals("char ", InstanceUtils.asString(str, 5));
53c7f7712a3808b8e3046eae8a4dbb7f6a7fc6faf2Richard Uhler  }
54c7f7712a3808b8e3046eae8a4dbb7f6a7fc6faf2Richard Uhler
55c7f7712a3808b8e3046eae8a4dbb7f6a7fc6faf2Richard Uhler  @Test
5677ff54b5055ec55806069c8d026b102df29857b5Richard Uhler  public void asStringExactMax() throws IOException {
5777ff54b5055ec55806069c8d026b102df29857b5Richard Uhler    TestDump dump = TestDump.getTestDump();
5877ff54b5055ec55806069c8d026b102df29857b5Richard Uhler    Instance str = (Instance)dump.getDumpedThing("basicString");
5977ff54b5055ec55806069c8d026b102df29857b5Richard Uhler    assertEquals("hello, world", InstanceUtils.asString(str, 12));
6077ff54b5055ec55806069c8d026b102df29857b5Richard Uhler  }
6177ff54b5055ec55806069c8d026b102df29857b5Richard Uhler
6277ff54b5055ec55806069c8d026b102df29857b5Richard Uhler  @Test
63c7f7712a3808b8e3046eae8a4dbb7f6a7fc6faf2Richard Uhler  public void asStringCharArrayExactMax() throws IOException {
64c7f7712a3808b8e3046eae8a4dbb7f6a7fc6faf2Richard Uhler    TestDump dump = TestDump.getTestDump();
65c7f7712a3808b8e3046eae8a4dbb7f6a7fc6faf2Richard Uhler    Instance str = (Instance)dump.getDumpedThing("charArray");
66c7f7712a3808b8e3046eae8a4dbb7f6a7fc6faf2Richard Uhler    assertEquals("char thing", InstanceUtils.asString(str, 10));
67c7f7712a3808b8e3046eae8a4dbb7f6a7fc6faf2Richard Uhler  }
68c7f7712a3808b8e3046eae8a4dbb7f6a7fc6faf2Richard Uhler
69c7f7712a3808b8e3046eae8a4dbb7f6a7fc6faf2Richard Uhler  @Test
7077ff54b5055ec55806069c8d026b102df29857b5Richard Uhler  public void asStringNotTruncated() throws IOException {
7177ff54b5055ec55806069c8d026b102df29857b5Richard Uhler    TestDump dump = TestDump.getTestDump();
7277ff54b5055ec55806069c8d026b102df29857b5Richard Uhler    Instance str = (Instance)dump.getDumpedThing("basicString");
7377ff54b5055ec55806069c8d026b102df29857b5Richard Uhler    assertEquals("hello, world", InstanceUtils.asString(str, 50));
7477ff54b5055ec55806069c8d026b102df29857b5Richard Uhler  }
7577ff54b5055ec55806069c8d026b102df29857b5Richard Uhler
7677ff54b5055ec55806069c8d026b102df29857b5Richard Uhler  @Test
77c7f7712a3808b8e3046eae8a4dbb7f6a7fc6faf2Richard Uhler  public void asStringCharArrayNotTruncated() throws IOException {
78c7f7712a3808b8e3046eae8a4dbb7f6a7fc6faf2Richard Uhler    TestDump dump = TestDump.getTestDump();
79c7f7712a3808b8e3046eae8a4dbb7f6a7fc6faf2Richard Uhler    Instance str = (Instance)dump.getDumpedThing("charArray");
80c7f7712a3808b8e3046eae8a4dbb7f6a7fc6faf2Richard Uhler    assertEquals("char thing", InstanceUtils.asString(str, 50));
81c7f7712a3808b8e3046eae8a4dbb7f6a7fc6faf2Richard Uhler  }
82c7f7712a3808b8e3046eae8a4dbb7f6a7fc6faf2Richard Uhler
83c7f7712a3808b8e3046eae8a4dbb7f6a7fc6faf2Richard Uhler  @Test
8477ff54b5055ec55806069c8d026b102df29857b5Richard Uhler  public void asStringNegativeMax() throws IOException {
8577ff54b5055ec55806069c8d026b102df29857b5Richard Uhler    TestDump dump = TestDump.getTestDump();
8677ff54b5055ec55806069c8d026b102df29857b5Richard Uhler    Instance str = (Instance)dump.getDumpedThing("basicString");
8777ff54b5055ec55806069c8d026b102df29857b5Richard Uhler    assertEquals("hello, world", InstanceUtils.asString(str, -3));
8877ff54b5055ec55806069c8d026b102df29857b5Richard Uhler  }
8977ff54b5055ec55806069c8d026b102df29857b5Richard Uhler
9077ff54b5055ec55806069c8d026b102df29857b5Richard Uhler  @Test
91c7f7712a3808b8e3046eae8a4dbb7f6a7fc6faf2Richard Uhler  public void asStringCharArrayNegativeMax() throws IOException {
92c7f7712a3808b8e3046eae8a4dbb7f6a7fc6faf2Richard Uhler    TestDump dump = TestDump.getTestDump();
93c7f7712a3808b8e3046eae8a4dbb7f6a7fc6faf2Richard Uhler    Instance str = (Instance)dump.getDumpedThing("charArray");
94c7f7712a3808b8e3046eae8a4dbb7f6a7fc6faf2Richard Uhler    assertEquals("char thing", InstanceUtils.asString(str, -3));
95c7f7712a3808b8e3046eae8a4dbb7f6a7fc6faf2Richard Uhler  }
96c7f7712a3808b8e3046eae8a4dbb7f6a7fc6faf2Richard Uhler
97c7f7712a3808b8e3046eae8a4dbb7f6a7fc6faf2Richard Uhler  @Test
9877ff54b5055ec55806069c8d026b102df29857b5Richard Uhler  public void asStringNull() throws IOException {
993524472e8f064dbd42e1a35d511a1efe36d2cbf2Richard Uhler    TestDump dump = TestDump.getTestDump();
1003524472e8f064dbd42e1a35d511a1efe36d2cbf2Richard Uhler    Instance obj = (Instance)dump.getDumpedThing("nullString");
1013524472e8f064dbd42e1a35d511a1efe36d2cbf2Richard Uhler    assertNull(InstanceUtils.asString(obj));
1023524472e8f064dbd42e1a35d511a1efe36d2cbf2Richard Uhler  }
1033524472e8f064dbd42e1a35d511a1efe36d2cbf2Richard Uhler
1043524472e8f064dbd42e1a35d511a1efe36d2cbf2Richard Uhler  @Test
10577ff54b5055ec55806069c8d026b102df29857b5Richard Uhler  public void asStringNotString() throws IOException {
1063524472e8f064dbd42e1a35d511a1efe36d2cbf2Richard Uhler    TestDump dump = TestDump.getTestDump();
1073524472e8f064dbd42e1a35d511a1efe36d2cbf2Richard Uhler    Instance obj = (Instance)dump.getDumpedThing("anObject");
1083524472e8f064dbd42e1a35d511a1efe36d2cbf2Richard Uhler    assertNotNull(obj);
1093524472e8f064dbd42e1a35d511a1efe36d2cbf2Richard Uhler    assertNull(InstanceUtils.asString(obj));
1103524472e8f064dbd42e1a35d511a1efe36d2cbf2Richard Uhler  }
111b357730dd691e608f8a3d155330ab3763ce912cfRichard Uhler
112b357730dd691e608f8a3d155330ab3763ce912cfRichard Uhler  @Test
113b357730dd691e608f8a3d155330ab3763ce912cfRichard Uhler  public void basicReference() throws IOException {
114b357730dd691e608f8a3d155330ab3763ce912cfRichard Uhler    TestDump dump = TestDump.getTestDump();
115b357730dd691e608f8a3d155330ab3763ce912cfRichard Uhler
116b357730dd691e608f8a3d155330ab3763ce912cfRichard Uhler    Instance pref = (Instance)dump.getDumpedThing("aPhantomReference");
117b357730dd691e608f8a3d155330ab3763ce912cfRichard Uhler    Instance wref = (Instance)dump.getDumpedThing("aWeakReference");
118b357730dd691e608f8a3d155330ab3763ce912cfRichard Uhler    Instance referent = (Instance)dump.getDumpedThing("anObject");
119b357730dd691e608f8a3d155330ab3763ce912cfRichard Uhler    assertNotNull(pref);
120b357730dd691e608f8a3d155330ab3763ce912cfRichard Uhler    assertNotNull(wref);
121b357730dd691e608f8a3d155330ab3763ce912cfRichard Uhler    assertNotNull(referent);
122b357730dd691e608f8a3d155330ab3763ce912cfRichard Uhler    assertEquals(referent, InstanceUtils.getReferent(pref));
123b357730dd691e608f8a3d155330ab3763ce912cfRichard Uhler    assertEquals(referent, InstanceUtils.getReferent(wref));
124b357730dd691e608f8a3d155330ab3763ce912cfRichard Uhler    assertNull(InstanceUtils.getReferent(referent));
125b357730dd691e608f8a3d155330ab3763ce912cfRichard Uhler  }
1263524472e8f064dbd42e1a35d511a1efe36d2cbf2Richard Uhler}
127