Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(370)

Side by Side Diff: content/public/android/javatests/src/org/chromium/content/common/CleanupReferenceTest.java

Issue 12658010: Improve CleanupReference & add test (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rfix (c) Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « content/public/android/java/src/org/chromium/content/common/CleanupReference.java ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 package org.chromium.content.common;
6
7 import android.test.InstrumentationTestCase;
8 import android.test.suitebuilder.annotation.SmallTest;
9
10 import org.chromium.base.test.util.Feature;
11 import org.chromium.content.browser.test.util.Criteria;
12 import org.chromium.content.browser.test.util.CriteriaHelper;
13
14 import java.util.concurrent.atomic.AtomicInteger;
15
16 public class CleanupReferenceTest extends InstrumentationTestCase {
17
18 private static AtomicInteger sObjectCount = new AtomicInteger();
19
20 private static class ReferredObject {
21
22 private CleanupReference mRef;
23
24 // Remember: this MUST be a static class, to avoid an implicit ref back to the
25 // owning ReferredObject instance which would defeat GC of that object.
26 private static class DestroyRunnable implements Runnable {
27 @Override
28 public void run() {
29 sObjectCount.decrementAndGet();
30 }
31 };
32
33 public ReferredObject() {
34 sObjectCount.incrementAndGet();
35 mRef = new CleanupReference(this, new DestroyRunnable());
36 }
37 }
38
39 @Override
40 public void setUp() throws Exception {
41 super.setUp();
42 sObjectCount.set(0);
43 }
44
45 @SmallTest
46 @Feature({"AndroidWebView"})
47 public void testCreateSingle() throws Throwable {
48 assertEquals(0, sObjectCount.get());
49
50 ReferredObject instance = new ReferredObject();
51 assertEquals(1, sObjectCount.get());
52
53 instance = null;
54 System.gc();
Kristian Monsen 2013/03/20 03:59:02 Is this sure to work in the future? I think System
joth 2013/03/20 21:00:39 Broadly, if it stops working in future this is pro
55 assertTrue(CriteriaHelper.pollForCriteria(new Criteria() {
56 @Override
57 public boolean isSatisfied() {
58 return sObjectCount.get() == 0;
59 }
60 }));
61 }
62
63 @SmallTest
64 @Feature({"AndroidWebView"})
65 public void testCreateMany() throws Throwable {
66 assertEquals(0, sObjectCount.get());
67
68 final int INSTANCE_COUNT = 20;
69 ReferredObject[] instances = new ReferredObject[INSTANCE_COUNT];
70
71 for (int i = 0; i < INSTANCE_COUNT; ++i) {
72 instances[i] = new ReferredObject();
73 assertEquals(i + 1, sObjectCount.get());
74 }
75
76 instances = null;
77 System.gc();
78 assertTrue(CriteriaHelper.pollForCriteria(new Criteria() {
79 @Override
80 public boolean isSatisfied() {
81 return sObjectCount.get() == 0;
82 }
83 }));
84 }
85
86 }
OLDNEW
« no previous file with comments | « content/public/android/java/src/org/chromium/content/common/CleanupReference.java ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698