mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-31 22:25:30 +00:00
84 lines
2.9 KiB
Java
84 lines
2.9 KiB
Java
package org.mozilla.gecko.tests;
|
|
|
|
import com.jayway.android.robotium.solo.Condition;
|
|
import org.mozilla.gecko.*;
|
|
|
|
import android.content.Intent;
|
|
|
|
/**
|
|
* Tests session OOM save behavior.
|
|
*
|
|
* Builds a session and tests that the saved state is correct.
|
|
*/
|
|
public class testSessionOOMSave extends SessionTest {
|
|
private final static int SESSION_TIMEOUT = 25000;
|
|
|
|
public void testSessionOOMSave() {
|
|
Actions.EventExpecter pageShowExpecter = mActions.expectGeckoEvent("Content:PageShow");
|
|
pageShowExpecter.blockForEvent();
|
|
pageShowExpecter.unregisterListener();
|
|
|
|
PageInfo home = new PageInfo("about:home");
|
|
PageInfo page1 = new PageInfo("page1");
|
|
PageInfo page2 = new PageInfo("page2");
|
|
PageInfo page3 = new PageInfo("page3");
|
|
PageInfo page4 = new PageInfo("page4");
|
|
PageInfo page5 = new PageInfo("page5");
|
|
PageInfo page6 = new PageInfo("page6");
|
|
|
|
SessionTab tab1 = new SessionTab(0, home, page1, page2);
|
|
SessionTab tab2 = new SessionTab(1, home, page3, page4);
|
|
SessionTab tab3 = new SessionTab(2, home, page5, page6);
|
|
|
|
final Session session = new Session(1, tab1, tab2, tab3);
|
|
|
|
// Load the tabs into the browser
|
|
loadSessionTabs(session);
|
|
|
|
// Verify sessionstore.js written by Gecko. The session write is
|
|
// delayed for certain interactions (such as changing the selected
|
|
// tab), so the file is repeatedly read until it matches the expected
|
|
// output. Because of the delay, this part of the test takes ~9 seconds
|
|
// to pass.
|
|
VerifyJSONCondition verifyJSONCondition = new VerifyJSONCondition(session);
|
|
boolean success = waitForCondition(verifyJSONCondition, SESSION_TIMEOUT);
|
|
if (success) {
|
|
mAsserter.ok(true, "verified session JSON", null);
|
|
} else {
|
|
mAsserter.ok(false, "failed to verify session JSON",
|
|
getStackTraceString(verifyJSONCondition.getLastException()));
|
|
}
|
|
}
|
|
|
|
private class VerifyJSONCondition implements Condition {
|
|
private AssertException mLastException;
|
|
private final NonFatalAsserter mAsserter = new NonFatalAsserter();
|
|
private final Session mSession;
|
|
|
|
public VerifyJSONCondition(Session session) {
|
|
mSession = session;
|
|
}
|
|
|
|
@Override
|
|
public boolean isSatisfied() {
|
|
try {
|
|
String sessionString = readProfileFile("sessionstore.js");
|
|
verifySessionJSON(mSession, sessionString, mAsserter);
|
|
} catch (AssertException e) {
|
|
mLastException = e;
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Gets the last AssertException thrown by verifySessionJSON().
|
|
*
|
|
* This is useful to get the stack trace if the test fails.
|
|
*/
|
|
public AssertException getLastException() {
|
|
return mLastException;
|
|
}
|
|
}
|
|
}
|