int-test mqtt <-> prediction
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
// Copyright (c) 2019 The Chromium Embedded Framework Authors. All rights
|
||||
// reserved. Use of this source code is governed by a BSD-style license that
|
||||
// can be found in the LICENSE file.
|
||||
|
||||
package tests.junittests;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
import org.cef.browser.CefBrowser;
|
||||
import org.cef.browser.CefFrame;
|
||||
import org.cef.handler.CefDisplayHandlerAdapter;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
|
||||
// Test the DisplayHandler implementation.
|
||||
@ExtendWith(TestSetupExtension.class)
|
||||
class DisplayHandlerTest {
|
||||
private final String testUrl_ = "http://test.com/test.html";
|
||||
private final String testContent_ =
|
||||
"<html><head><title>Test Title</title></head><body>Test!</body></html>";
|
||||
|
||||
private boolean gotCallback_ = false;
|
||||
|
||||
@Test
|
||||
void onTitleChange() {
|
||||
TestFrame frame = new TestFrame() {
|
||||
@Override
|
||||
protected void setupTest() {
|
||||
client_.addDisplayHandler(new CefDisplayHandlerAdapter() {
|
||||
@Override
|
||||
public void onTitleChange(CefBrowser browser, String title) {
|
||||
assertFalse(gotCallback_);
|
||||
gotCallback_ = true;
|
||||
assertEquals("Test Title", title);
|
||||
terminateTest();
|
||||
}
|
||||
});
|
||||
|
||||
addResource(testUrl_, testContent_, "text/html");
|
||||
|
||||
createBrowser(testUrl_);
|
||||
|
||||
super.setupTest();
|
||||
}
|
||||
};
|
||||
|
||||
frame.awaitCompletion();
|
||||
|
||||
assertTrue(gotCallback_);
|
||||
}
|
||||
|
||||
@Test
|
||||
void onAddressChange() {
|
||||
TestFrame frame = new TestFrame() {
|
||||
@Override
|
||||
protected void setupTest() {
|
||||
client_.addDisplayHandler(new CefDisplayHandlerAdapter() {
|
||||
@Override
|
||||
public void onAddressChange(CefBrowser browser, CefFrame frame, String url) {
|
||||
assertFalse(gotCallback_);
|
||||
gotCallback_ = true;
|
||||
assertEquals(url, testUrl_);
|
||||
terminateTest();
|
||||
}
|
||||
});
|
||||
|
||||
addResource(testUrl_, testContent_, "text/html");
|
||||
|
||||
createBrowser(testUrl_);
|
||||
|
||||
super.setupTest();
|
||||
}
|
||||
};
|
||||
|
||||
frame.awaitCompletion();
|
||||
|
||||
assertTrue(gotCallback_);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,165 @@
|
||||
// Copyright (c) 2019 The Chromium Embedded Framework Authors. All rights
|
||||
// reserved. Use of this source code is governed by a BSD-style license that
|
||||
// can be found in the LICENSE file.
|
||||
|
||||
package tests.junittests;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
import org.cef.callback.CefDragData;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
|
||||
import java.util.Vector;
|
||||
|
||||
// Test the TestFrame implementation.
|
||||
@ExtendWith(TestSetupExtension.class)
|
||||
class DragDataTest {
|
||||
@Test
|
||||
void createEmpty() {
|
||||
CefDragData dragData = CefDragData.create();
|
||||
assertNotNull(dragData);
|
||||
assertFalse(dragData.isReadOnly());
|
||||
|
||||
assertFalse(dragData.isLink());
|
||||
assertFalse(dragData.isFile());
|
||||
assertTrue(dragData.isFragment()); // Default state.
|
||||
|
||||
assertEquals("", dragData.getLinkURL());
|
||||
assertEquals("", dragData.getLinkTitle());
|
||||
assertEquals("", dragData.getLinkMetadata());
|
||||
assertEquals("", dragData.getFragmentText());
|
||||
assertEquals("", dragData.getFragmentHtml());
|
||||
assertEquals("", dragData.getFragmentBaseURL());
|
||||
assertEquals(0, dragData.getFileContents(null));
|
||||
assertEquals("", dragData.getFileName());
|
||||
assertFalse(dragData.getFileNames(null));
|
||||
|
||||
// Explicit cleanup to avoid memory leaks.
|
||||
dragData.dispose();
|
||||
}
|
||||
|
||||
@Test
|
||||
void createLink() {
|
||||
CefDragData dragData = CefDragData.create();
|
||||
assertNotNull(dragData);
|
||||
assertFalse(dragData.isReadOnly());
|
||||
|
||||
final String linkURL = "http://test.com/test.html";
|
||||
dragData.setLinkURL(linkURL);
|
||||
assertEquals(linkURL, dragData.getLinkURL());
|
||||
|
||||
final String linkTitle = "Test Title";
|
||||
dragData.setLinkTitle(linkTitle);
|
||||
assertEquals(linkTitle, dragData.getLinkTitle());
|
||||
|
||||
final String linkMetadata = "something";
|
||||
dragData.setLinkMetadata(linkMetadata);
|
||||
assertEquals(linkMetadata, dragData.getLinkMetadata());
|
||||
|
||||
assertTrue(dragData.isLink());
|
||||
assertFalse(dragData.isFile());
|
||||
assertFalse(dragData.isFragment());
|
||||
|
||||
// Explicit cleanup to avoid memory leaks.
|
||||
dragData.dispose();
|
||||
}
|
||||
|
||||
@Test
|
||||
void createFile() {
|
||||
CefDragData dragData = CefDragData.create();
|
||||
assertNotNull(dragData);
|
||||
assertFalse(dragData.isReadOnly());
|
||||
|
||||
final String path1 = "/path/to/file1.txt";
|
||||
final String path2 = "/path/to/file2.txt";
|
||||
|
||||
dragData.addFile(path1, "File 1");
|
||||
dragData.addFile(path2, "File 2");
|
||||
|
||||
Vector<String> fileNames = new Vector<>();
|
||||
assertTrue(dragData.getFileNames(fileNames));
|
||||
|
||||
assertEquals(2, fileNames.size());
|
||||
assertEquals(path1, fileNames.get(0));
|
||||
assertEquals(path2, fileNames.get(1));
|
||||
|
||||
assertFalse(dragData.isLink());
|
||||
assertTrue(dragData.isFile());
|
||||
assertFalse(dragData.isFragment());
|
||||
|
||||
// Explicit cleanup to avoid memory leaks.
|
||||
dragData.dispose();
|
||||
}
|
||||
|
||||
@Test
|
||||
void createFragment() {
|
||||
CefDragData dragData = CefDragData.create();
|
||||
assertNotNull(dragData);
|
||||
assertFalse(dragData.isReadOnly());
|
||||
|
||||
final String fragmentText = "something";
|
||||
dragData.setFragmentText(fragmentText);
|
||||
assertEquals(fragmentText, dragData.getFragmentText());
|
||||
|
||||
final String fragmentHtml = "<span>something</span>";
|
||||
dragData.setFragmentHtml(fragmentHtml);
|
||||
assertEquals(fragmentHtml, dragData.getFragmentHtml());
|
||||
|
||||
final String fragmentBaseURL = "http://test.com/test.html";
|
||||
dragData.setFragmentBaseURL(fragmentBaseURL);
|
||||
assertEquals(fragmentBaseURL, dragData.getFragmentBaseURL());
|
||||
|
||||
assertFalse(dragData.isLink());
|
||||
assertFalse(dragData.isFile());
|
||||
assertTrue(dragData.isFragment());
|
||||
|
||||
// Explicit cleanup to avoid memory leaks.
|
||||
dragData.dispose();
|
||||
}
|
||||
|
||||
@Test
|
||||
void cloneObject() {
|
||||
CefDragData dragData = CefDragData.create();
|
||||
assertNotNull(dragData);
|
||||
assertFalse(dragData.isReadOnly());
|
||||
|
||||
final String fragmentText = "something";
|
||||
final String fragmentBaseURL = "http://test.com/test.html";
|
||||
dragData.setFragmentText(fragmentText);
|
||||
dragData.setFragmentBaseURL(fragmentBaseURL);
|
||||
|
||||
CefDragData dragData2 = dragData.clone();
|
||||
assertFalse(dragData2.isReadOnly());
|
||||
assertEquals(fragmentText, dragData2.getFragmentText());
|
||||
assertEquals(fragmentBaseURL, dragData2.getFragmentBaseURL());
|
||||
|
||||
assertFalse(dragData2.isLink());
|
||||
assertFalse(dragData2.isFile());
|
||||
assertTrue(dragData2.isFragment());
|
||||
|
||||
// Explicit cleanup to avoid memory leaks.
|
||||
dragData.dispose();
|
||||
dragData2.dispose();
|
||||
}
|
||||
|
||||
@Test
|
||||
void disposeObject() {
|
||||
CefDragData dragData = CefDragData.create();
|
||||
assertNotNull(dragData);
|
||||
assertFalse(dragData.isReadOnly());
|
||||
|
||||
final String fragmentText = "something";
|
||||
dragData.setFragmentText(fragmentText);
|
||||
assertEquals(fragmentText, dragData.getFragmentText());
|
||||
|
||||
// Explicit cleanup to avoid memory leaks.
|
||||
// After dispose() the Java object is no longer backed by a CEF object.
|
||||
dragData.dispose();
|
||||
|
||||
assertEquals(null, dragData.getFragmentText());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,299 @@
|
||||
// Copyright (c) 2019 The Chromium Embedded Framework Authors. All rights
|
||||
// reserved. Use of this source code is governed by a BSD-style license that
|
||||
// can be found in the LICENSE file.
|
||||
|
||||
package tests.junittests;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||
import static org.junit.jupiter.api.Assertions.assertNull;
|
||||
|
||||
import static tests.junittests.TestSetupContext.debugPrint;
|
||||
|
||||
import org.cef.CefApp;
|
||||
import org.cef.CefClient;
|
||||
import org.cef.browser.CefBrowser;
|
||||
import org.cef.browser.CefFrame;
|
||||
import org.cef.callback.CefAuthCallback;
|
||||
import org.cef.callback.CefCallback;
|
||||
import org.cef.handler.CefCookieAccessFilter;
|
||||
import org.cef.handler.CefLifeSpanHandler;
|
||||
import org.cef.handler.CefLoadHandler;
|
||||
import org.cef.handler.CefRequestHandler;
|
||||
import org.cef.handler.CefResourceHandler;
|
||||
import org.cef.handler.CefResourceRequestHandler;
|
||||
import org.cef.misc.BoolRef;
|
||||
import org.cef.misc.StringRef;
|
||||
import org.cef.network.CefRequest;
|
||||
import org.cef.network.CefRequest.TransitionType;
|
||||
import org.cef.network.CefResponse;
|
||||
import org.cef.network.CefURLRequest;
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Component;
|
||||
import java.awt.event.WindowAdapter;
|
||||
import java.awt.event.WindowEvent;
|
||||
import java.util.HashMap;
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
|
||||
import javax.swing.JFrame;
|
||||
|
||||
// Base class for browsers that run tests.
|
||||
class TestFrame extends JFrame implements CefLifeSpanHandler, CefLoadHandler, CefRequestHandler,
|
||||
CefResourceRequestHandler {
|
||||
private static final long serialVersionUID = -5570653778104813836L;
|
||||
private boolean isClosed_ = false;
|
||||
private CountDownLatch countdown_ = new CountDownLatch(1);
|
||||
|
||||
// Resources that have been populated for the test.
|
||||
private class ResourceContent {
|
||||
String content;
|
||||
String mimeType;
|
||||
HashMap<String, String> headerMap;
|
||||
}
|
||||
private HashMap<String, ResourceContent> resourceMap_ = null;
|
||||
|
||||
protected final CefClient client_;
|
||||
protected CefBrowser browser_ = null;
|
||||
|
||||
TestFrame() {
|
||||
client_ = CefApp.getInstance().createClient();
|
||||
assertNotNull(client_);
|
||||
|
||||
// Browser window closing works as follows:
|
||||
// 1. Sending WindowEvent.WINDOW_CLOSING calls WindowAdapter.windowClosing.
|
||||
// 2. WindowAdapter.windowClosing calls CefBrowser.close(false).
|
||||
// 3. CEF calls CefLifeSpanHandler.doClose() which calls CefBrowser.doClose()
|
||||
// which returns true (canceling the close).
|
||||
// 4. CefBrowser.doClose() triggers another call to WindowAdapter.windowClosing.
|
||||
// 5. WindowAdapter.windowClosing calls CefBrowser.close(true).
|
||||
// 6. For windowed browsers CEF destroys the native window handle. For OSR
|
||||
// browsers CEF calls CefLifeSpanHandler.doClose() which calls
|
||||
// CefBrowser.doClose() again which returns false (allowing the close).
|
||||
// 7. CEF calls CefLifeSpanHandler.onBeforeClose and the browser is destroyed.
|
||||
addWindowListener(new WindowAdapter() {
|
||||
@Override
|
||||
public void windowClosing(WindowEvent e) {
|
||||
boolean isClosed = isClosed_;
|
||||
|
||||
if (isClosed) {
|
||||
// Cause browser.doClose() to return false so that OSR browsers
|
||||
// can close.
|
||||
browser_.setCloseAllowed();
|
||||
}
|
||||
|
||||
// Results in another call to this method.
|
||||
if (debugPrint())
|
||||
System.out.println("windowClosing CefBrowser.close(" + isClosed + ")");
|
||||
browser_.close(isClosed);
|
||||
if (!isClosed_) {
|
||||
isClosed_ = true;
|
||||
}
|
||||
if (isClosed) {
|
||||
// Dispose after the 2nd call to this method.
|
||||
if (debugPrint()) System.out.println("windowClosing Frame.dispose");
|
||||
dispose();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
client_.addLifeSpanHandler(this);
|
||||
client_.addLoadHandler(this);
|
||||
client_.addRequestHandler(this);
|
||||
|
||||
setupTest();
|
||||
}
|
||||
|
||||
protected void createBrowser(String startURL) {
|
||||
assertNull(browser_);
|
||||
browser_ = client_.createBrowser(startURL, false /* useOSR */, false /* isTransparent */);
|
||||
assertNotNull(browser_);
|
||||
|
||||
getContentPane().add(browser_.getUIComponent(), BorderLayout.CENTER);
|
||||
pack();
|
||||
setSize(800, 600);
|
||||
setVisible(true);
|
||||
}
|
||||
|
||||
// Override this method to perform test setup.
|
||||
protected void setupTest() {}
|
||||
|
||||
// Override this method to perform test cleanup.
|
||||
protected void cleanupTest() {
|
||||
if (debugPrint()) System.out.println("cleanupTest");
|
||||
client_.dispose();
|
||||
// Allow the test to complete.
|
||||
countdown_.countDown();
|
||||
}
|
||||
|
||||
// Call this method to terminate the test by dispatching a window close event.
|
||||
protected final void terminateTest() {
|
||||
if (debugPrint()) System.out.println("terminateTest");
|
||||
if (!isClosed_) {
|
||||
dispatchEvent(new WindowEvent(this, WindowEvent.WINDOW_CLOSING));
|
||||
}
|
||||
}
|
||||
|
||||
// Block until the test completes.
|
||||
public final void awaitCompletion() {
|
||||
try {
|
||||
countdown_.await();
|
||||
} catch (InterruptedException e) {
|
||||
}
|
||||
if (debugPrint()) System.out.println("awaitCompletion returned");
|
||||
}
|
||||
|
||||
protected void addResource(String url, String content, String mimeType) {
|
||||
addResource(url, content, mimeType, null);
|
||||
}
|
||||
|
||||
// Add a resource that will be returned via getResourceHandler().
|
||||
protected void addResource(
|
||||
String url, String content, String mimeType, HashMap<String, String> headerMap) {
|
||||
if (resourceMap_ == null) resourceMap_ = new HashMap<>();
|
||||
|
||||
assertNull(resourceMap_.get(url));
|
||||
|
||||
ResourceContent rc = new ResourceContent();
|
||||
rc.content = content;
|
||||
rc.mimeType = mimeType;
|
||||
rc.headerMap = headerMap;
|
||||
|
||||
resourceMap_.put(url, rc);
|
||||
}
|
||||
|
||||
// CefLifeSpanHandler methods:
|
||||
|
||||
@Override
|
||||
public void onAfterCreated(CefBrowser browser) {
|
||||
if (debugPrint()) System.out.println("onAfterCreated id=" + browser.getIdentifier());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onBeforePopup(
|
||||
CefBrowser browser, CefFrame frame, String target_url, String target_frame_name) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAfterParentChanged(CefBrowser browser) {}
|
||||
|
||||
@Override
|
||||
public boolean doClose(CefBrowser browser) {
|
||||
boolean result = browser.doClose();
|
||||
if (debugPrint()) {
|
||||
System.out.println(
|
||||
"doClose id=" + browser.getIdentifier() + " CefBrowser.doClose=" + result);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBeforeClose(CefBrowser browser) {
|
||||
if (debugPrint()) System.out.println("onBeforeClose id=" + browser.getIdentifier());
|
||||
cleanupTest();
|
||||
}
|
||||
|
||||
// CefLoadHandler methods:
|
||||
|
||||
@Override
|
||||
public void onLoadingStateChange(
|
||||
CefBrowser browser, boolean isLoading, boolean canGoBack, boolean canGoForward) {}
|
||||
|
||||
@Override
|
||||
public void onLoadStart(CefBrowser browser, CefFrame frame, TransitionType transitionType) {}
|
||||
|
||||
@Override
|
||||
public void onLoadEnd(CefBrowser browser, CefFrame frame, int httpStatusCode) {}
|
||||
|
||||
@Override
|
||||
public void onLoadError(CefBrowser browser, CefFrame frame, ErrorCode errorCode,
|
||||
String errorText, String failedUrl) {}
|
||||
|
||||
// CefRequestHandler methods:
|
||||
|
||||
@Override
|
||||
public boolean onBeforeBrowse(CefBrowser browser, CefFrame frame, CefRequest request,
|
||||
boolean user_gesture, boolean is_redirect) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOpenURLFromTab(
|
||||
CefBrowser browser, CefFrame frame, String target_url, boolean user_gesture) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CefResourceRequestHandler getResourceRequestHandler(CefBrowser browser, CefFrame frame,
|
||||
CefRequest request, boolean isNavigation, boolean isDownload, String requestInitiator,
|
||||
BoolRef disableDefaultHandling) {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean getAuthCredentials(CefBrowser browser, String origin_url, boolean isProxy,
|
||||
String host, int port, String realm, String scheme, CefAuthCallback callback) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCertificateError(CefBrowser browser, CefLoadHandler.ErrorCode cert_error,
|
||||
String request_url, CefCallback callback) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRenderProcessTerminated(
|
||||
CefBrowser browser, TerminationStatus status, int error_code, String error_string) {}
|
||||
|
||||
// CefResourceRequestHandler methods:
|
||||
|
||||
@Override
|
||||
public CefCookieAccessFilter getCookieAccessFilter(
|
||||
CefBrowser browser, CefFrame frame, CefRequest request) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onBeforeResourceLoad(CefBrowser browser, CefFrame frame, CefRequest request) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CefResourceHandler getResourceHandler(
|
||||
CefBrowser browser, CefFrame frame, CefRequest request) {
|
||||
if (resourceMap_ != null) {
|
||||
String url = request.getURL();
|
||||
|
||||
// Ignore the query component, if any.
|
||||
int idx = url.indexOf('?');
|
||||
if (idx > 0) url = url.substring(0, idx);
|
||||
|
||||
ResourceContent rc = resourceMap_.get(url);
|
||||
if (rc != null) {
|
||||
if (debugPrint()) System.out.println("Found resource for: " + url);
|
||||
return new TestResourceHandler(rc.content, rc.mimeType, rc.headerMap);
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResourceRedirect(CefBrowser browser, CefFrame frame, CefRequest request,
|
||||
CefResponse response, StringRef new_url) {}
|
||||
|
||||
@Override
|
||||
public boolean onResourceResponse(
|
||||
CefBrowser browser, CefFrame frame, CefRequest request, CefResponse response) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResourceLoadComplete(CefBrowser browser, CefFrame frame, CefRequest request,
|
||||
CefResponse response, CefURLRequest.Status status, long receivedContentLength) {}
|
||||
|
||||
@Override
|
||||
public void onProtocolExecution(
|
||||
CefBrowser browser, CefFrame frame, CefRequest request, BoolRef allowOsExecution) {}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
// Copyright (c) 2019 The Chromium Embedded Framework Authors. All rights
|
||||
// reserved. Use of this source code is governed by a BSD-style license that
|
||||
// can be found in the LICENSE file.
|
||||
|
||||
package tests.junittests;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
import org.cef.browser.CefBrowser;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
|
||||
// Test the TestFrame implementation.
|
||||
@ExtendWith(TestSetupExtension.class)
|
||||
class TestFrameTest {
|
||||
private boolean gotSetupTest_ = false;
|
||||
private boolean gotCleanupTest_ = false;
|
||||
private boolean gotLoadingStateChange_ = false;
|
||||
|
||||
@Test
|
||||
void minimal() {
|
||||
final String testUrl = "http://test.com/test.html";
|
||||
TestFrame frame = new TestFrame() {
|
||||
@Override
|
||||
protected void setupTest() {
|
||||
assertFalse(gotSetupTest_);
|
||||
gotSetupTest_ = true;
|
||||
|
||||
addResource(testUrl, "<html><body>Test!</body></html>", "text/html");
|
||||
|
||||
createBrowser(testUrl);
|
||||
|
||||
super.setupTest();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void cleanupTest() {
|
||||
assertFalse(gotCleanupTest_);
|
||||
gotCleanupTest_ = true;
|
||||
|
||||
super.cleanupTest();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoadingStateChange(CefBrowser browser, boolean isLoading,
|
||||
boolean canGoBack, boolean canGoForward) {
|
||||
if (!isLoading) {
|
||||
assertFalse(gotLoadingStateChange_);
|
||||
gotLoadingStateChange_ = true;
|
||||
terminateTest();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
frame.awaitCompletion();
|
||||
|
||||
assertTrue(gotSetupTest_);
|
||||
assertTrue(gotLoadingStateChange_);
|
||||
assertTrue(gotCleanupTest_);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
// Copyright (c) 2019 The Chromium Embedded Framework Authors. All rights
|
||||
// reserved. Use of this source code is governed by a BSD-style license that
|
||||
// can be found in the LICENSE file.
|
||||
|
||||
package tests.junittests;
|
||||
|
||||
import org.cef.callback.CefCallback;
|
||||
import org.cef.handler.CefResourceHandlerAdapter;
|
||||
import org.cef.misc.IntRef;
|
||||
import org.cef.misc.StringRef;
|
||||
import org.cef.network.CefRequest;
|
||||
import org.cef.network.CefResponse;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
import java.util.HashMap;
|
||||
|
||||
class TestResourceHandler extends CefResourceHandlerAdapter {
|
||||
private int offset_ = 0;
|
||||
private final String content_;
|
||||
private final String mimeType_;
|
||||
private final HashMap<String, String> headerMap_;
|
||||
|
||||
TestResourceHandler(String content, String mimeType, HashMap<String, String> headerMap) {
|
||||
content_ = content;
|
||||
mimeType_ = mimeType;
|
||||
headerMap_ = headerMap;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean processRequest(CefRequest request, CefCallback callback) {
|
||||
callback.Continue();
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void getResponseHeaders(
|
||||
CefResponse response, IntRef response_length, StringRef redirectUrl) {
|
||||
response_length.set(content_.length());
|
||||
response.setMimeType(mimeType_);
|
||||
response.setStatus(200);
|
||||
|
||||
if (headerMap_ != null) {
|
||||
HashMap<String, String> headerMap = new HashMap<>();
|
||||
response.getHeaderMap(headerMap);
|
||||
headerMap.putAll(headerMap_);
|
||||
response.setHeaderMap(headerMap);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean readResponse(
|
||||
byte[] data_out, int bytes_to_read, IntRef bytes_read, CefCallback callback) {
|
||||
int length = content_.length();
|
||||
if (offset_ >= length) return false;
|
||||
|
||||
// Extract up to |bytes_to_read| bytes from |content_|.
|
||||
int endPos = offset_ + bytes_to_read;
|
||||
String dataToSend = (endPos > length) ? content_.substring(offset_)
|
||||
: content_.substring(offset_, endPos);
|
||||
|
||||
// Copy extracted bytes into |data_out| and set the read length to |bytes_read|.
|
||||
ByteBuffer result = ByteBuffer.wrap(data_out);
|
||||
result.put(dataToSend.getBytes());
|
||||
bytes_read.set(dataToSend.length());
|
||||
|
||||
offset_ = endPos;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
// Copyright (c) 2019 The Chromium Embedded Framework Authors. All rights
|
||||
// reserved. Use of this source code is governed by a BSD-style license that
|
||||
// can be found in the LICENSE file.
|
||||
|
||||
package tests.junittests;
|
||||
|
||||
import org.junit.jupiter.api.extension.ExtensionContext;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
// Stores global test setup state for access from package classes.
|
||||
class TestSetupContext {
|
||||
private static boolean debugPrint_ = false;
|
||||
|
||||
// Debug print statements may be enabled via `--config debugPrint=true`.
|
||||
static boolean debugPrint() {
|
||||
return debugPrint_;
|
||||
}
|
||||
|
||||
// Initialize from global configuration parameters.
|
||||
static void initialize(ExtensionContext context) {
|
||||
Optional<String> debugPrint = context.getConfigurationParameter("debugPrint");
|
||||
if (debugPrint.isPresent() && debugPrint.get().equalsIgnoreCase("true")) {
|
||||
debugPrint_ = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
// Copyright (c) 2019 The Chromium Embedded Framework Authors. All rights
|
||||
// reserved. Use of this source code is governed by a BSD-style license that
|
||||
// can be found in the LICENSE file.
|
||||
|
||||
package tests.junittests;
|
||||
|
||||
import static org.junit.jupiter.api.extension.ExtensionContext.Namespace.GLOBAL;
|
||||
|
||||
import org.cef.CefApp;
|
||||
import org.cef.CefApp.CefAppState;
|
||||
import org.cef.CefSettings;
|
||||
import org.cef.handler.CefAppHandlerAdapter;
|
||||
import org.junit.jupiter.api.extension.BeforeAllCallback;
|
||||
import org.junit.jupiter.api.extension.ExtensionContext;
|
||||
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
|
||||
// All test cases must install this extension for CEF to be properly initialized
|
||||
// and shut down.
|
||||
//
|
||||
// For example:
|
||||
//
|
||||
// @ExtendWith(TestSetupExtension.class)
|
||||
// class FooTest {
|
||||
// @Test
|
||||
// void testCaseThatRequiresCEF() {}
|
||||
// }
|
||||
//
|
||||
// This code is based on https://stackoverflow.com/a/51556718.
|
||||
public class TestSetupExtension
|
||||
implements BeforeAllCallback, ExtensionContext.Store.CloseableResource {
|
||||
private static boolean initialized_ = false;
|
||||
private static CountDownLatch countdown_ = new CountDownLatch(1);
|
||||
|
||||
@Override
|
||||
public void beforeAll(ExtensionContext context) {
|
||||
if (!initialized_) {
|
||||
initialized_ = true;
|
||||
initialize(context);
|
||||
}
|
||||
}
|
||||
|
||||
// Executed before any tests are run.
|
||||
private void initialize(ExtensionContext context) {
|
||||
TestSetupContext.initialize(context);
|
||||
|
||||
if (TestSetupContext.debugPrint()) {
|
||||
System.out.println("TestSetupExtension.initialize");
|
||||
}
|
||||
|
||||
// Register a callback hook for when the root test context is shut down.
|
||||
context.getRoot().getStore(GLOBAL).put("jcef_test_setup", this);
|
||||
|
||||
// Perform startup initialization on platforms that require it.
|
||||
if (!CefApp.startup(null)) {
|
||||
System.out.println("Startup initialization failed!");
|
||||
return;
|
||||
}
|
||||
|
||||
CefApp.addAppHandler(new CefAppHandlerAdapter(null) {
|
||||
@Override
|
||||
public void stateHasChanged(org.cef.CefApp.CefAppState state) {
|
||||
if (state == CefAppState.TERMINATED) {
|
||||
// Signal completion of CEF shutdown.
|
||||
countdown_.countDown();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Initialize the singleton CefApp instance.
|
||||
CefSettings settings = new CefSettings();
|
||||
CefApp.getInstance(settings);
|
||||
}
|
||||
|
||||
// Executed after all tests have completed.
|
||||
@Override
|
||||
public void close() {
|
||||
if (TestSetupContext.debugPrint()) {
|
||||
System.out.println("TestSetupExtension.close");
|
||||
}
|
||||
|
||||
CefApp.getInstance().dispose();
|
||||
|
||||
// Wait for CEF shutdown to complete.
|
||||
try {
|
||||
countdown_.await();
|
||||
} catch (InterruptedException e) {
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user