aboutsummaryrefslogtreecommitdiff
path: root/libs/editor/WordPressEditor/src/androidTest/java/org.wordpress.android.editor/EditorFragmentTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'libs/editor/WordPressEditor/src/androidTest/java/org.wordpress.android.editor/EditorFragmentTest.java')
-rw-r--r--libs/editor/WordPressEditor/src/androidTest/java/org.wordpress.android.editor/EditorFragmentTest.java177
1 files changed, 177 insertions, 0 deletions
diff --git a/libs/editor/WordPressEditor/src/androidTest/java/org.wordpress.android.editor/EditorFragmentTest.java b/libs/editor/WordPressEditor/src/androidTest/java/org.wordpress.android.editor/EditorFragmentTest.java
new file mode 100644
index 000000000..a955f0a98
--- /dev/null
+++ b/libs/editor/WordPressEditor/src/androidTest/java/org.wordpress.android.editor/EditorFragmentTest.java
@@ -0,0 +1,177 @@
+package org.wordpress.android.editor;
+
+import android.app.Activity;
+import android.test.ActivityInstrumentationTestCase2;
+import android.view.View;
+import android.widget.ToggleButton;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.CountDownLatch;
+
+import static org.wordpress.android.editor.TestingUtils.waitFor;
+
+public class EditorFragmentTest extends ActivityInstrumentationTestCase2<MockEditorActivity> {
+ private Activity mActivity;
+ private EditorFragmentForTests mFragment;
+
+ public EditorFragmentTest() {
+ super(MockEditorActivity.class);
+ }
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ mActivity = getActivity();
+ mFragment = (EditorFragmentForTests) mActivity.getFragmentManager().findFragmentByTag("editorFragment");
+ }
+
+ public void testDomLoadedCallbackReceived() {
+ // initJsEditor() should have been called on setup
+ assertTrue(mFragment.mInitCalled);
+
+ waitForOnDomLoaded();
+
+ // The JS editor should have sent out a callback when the DOM loaded, triggering onDomLoaded()
+ assertTrue(mFragment.mDomLoaded);
+ }
+
+ public void testFormatBarToggledOnSelectedFieldChanged() {
+ Map<String, String> selectionArgs = new HashMap<>();
+
+ selectionArgs.put("id", "zss_field_title");
+ mFragment.onSelectionChanged(selectionArgs);
+
+ waitFor(100);
+
+ View view = mFragment.getView();
+
+ if (view == null) {
+ throw(new IllegalStateException("Fragment view is empty"));
+ }
+
+ // The formatting buttons should be disabled while the title field is selected
+ ToggleButton mediaButton = (ToggleButton) view.findViewById(R.id.format_bar_button_media);
+ ToggleButton boldButton = (ToggleButton) view.findViewById(R.id.format_bar_button_bold);
+ ToggleButton italicButton = (ToggleButton) view.findViewById(R.id.format_bar_button_italic);
+ ToggleButton quoteButton = (ToggleButton) view.findViewById(R.id.format_bar_button_quote);
+ ToggleButton ulButton = (ToggleButton) view.findViewById(R.id.format_bar_button_ul);
+ ToggleButton olButton = (ToggleButton) view.findViewById(R.id.format_bar_button_ol);
+ ToggleButton linkButton = (ToggleButton) view.findViewById(R.id.format_bar_button_link);
+ ToggleButton strikethroughButton = (ToggleButton) view.findViewById(R.id.format_bar_button_strikethrough);
+
+ assertFalse(mediaButton.isEnabled());
+ assertFalse(boldButton.isEnabled());
+ assertFalse(italicButton.isEnabled());
+ assertFalse(quoteButton.isEnabled());
+ assertFalse(ulButton.isEnabled());
+ assertFalse(olButton.isEnabled());
+ assertFalse(linkButton.isEnabled());
+
+ if (strikethroughButton != null) {
+ assertFalse(strikethroughButton.isEnabled());
+ }
+
+ // The HTML button should always be enabled
+ ToggleButton htmlButton = (ToggleButton) view.findViewById(R.id.format_bar_button_html);
+ assertTrue(htmlButton.isEnabled());
+
+ selectionArgs.clear();
+ selectionArgs.put("id", "zss_field_content");
+ mFragment.onSelectionChanged(selectionArgs);
+
+ waitFor(500);
+
+ // The formatting buttons should be enabled while the content field is selected
+ assertTrue(mediaButton.isEnabled());
+ assertTrue(boldButton.isEnabled());
+ assertTrue(italicButton.isEnabled());
+ assertTrue(quoteButton.isEnabled());
+ assertTrue(ulButton.isEnabled());
+ assertTrue(olButton.isEnabled());
+ assertTrue(linkButton.isEnabled());
+
+ if (strikethroughButton != null) {
+ assertTrue(strikethroughButton.isEnabled());
+ }
+
+ // The HTML button should always be enabled
+ assertTrue(htmlButton.isEnabled());
+ }
+
+ public void testHtmlModeToggleTextTransfer() throws InterruptedException {
+ waitForOnDomLoaded();
+
+ final View view = mFragment.getView();
+
+ if (view == null) {
+ throw (new IllegalStateException("Fragment view is empty"));
+ }
+
+ final ToggleButton htmlButton = (ToggleButton) view.findViewById(R.id.format_bar_button_html);
+
+ String content = mFragment.getContent().toString();
+
+ final SourceViewEditText titleText = (SourceViewEditText) view.findViewById(R.id.sourceview_title);
+ final SourceViewEditText contentText = (SourceViewEditText) view.findViewById(R.id.sourceview_content);
+
+ // -- Check that title and content text is properly loaded into the EditTexts when switching to HTML mode
+
+ final CountDownLatch uiThreadLatch1 = new CountDownLatch(1);
+
+ mActivity.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ htmlButton.performClick(); // Turn on HTML mode
+
+ uiThreadLatch1.countDown();
+ }
+ });
+
+ uiThreadLatch1.await();
+
+ waitFor(500);
+
+ // The HTML mode fields should be populated with the raw HTML loaded into the WebView on load
+ // (see MockEditorActivity)
+ assertEquals("A title", titleText.getText().toString());
+ assertEquals(content, contentText.getText().toString());
+
+ // -- Check that the title and content text is updated in the WebView when switching back from HTML mode
+
+ final CountDownLatch uiThreadLatch2 = new CountDownLatch(1);
+
+ mActivity.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ titleText.setText("new title");
+ contentText.setText("new <b>content</b>");
+
+ // Check that getTitle() and getContent() return latest version even in HTML mode
+ assertEquals("new title", mFragment.getTitle());
+ assertEquals("new <b>content</b>", mFragment.getContent());
+
+ htmlButton.performClick(); // Turn off HTML mode
+
+ uiThreadLatch2.countDown();
+ }
+ });
+
+ uiThreadLatch2.await();
+
+ waitFor(300); // Wait for JS to update the title/content
+
+ assertEquals("new title", mFragment.getTitle());
+ assertEquals("new <b>content</b>", mFragment.getContent());
+ }
+
+ private void waitForOnDomLoaded() {
+ long start = System.currentTimeMillis();
+ while(!mFragment.mDomLoaded) {
+ waitFor(10);
+ if (System.currentTimeMillis() - start > 5000) {
+ throw(new RuntimeException("Callback wait timed out"));
+ }
+ }
+ }
+} \ No newline at end of file