organizer_plat/notes_editor_api/tsrc/unittest_noteseditorplugin/src/unittest_noteseditorplugin.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 23 Jun 2010 18:11:28 +0300
changeset 49 5de72ea7a065
child 55 2c54b51f39c4
permissions -rw-r--r--
Revision: 201023 Kit: 2010125

/*
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:
*
*/

// System include
#include <QtTest/QtTest>
#include <HbMainWindow>
#include <NotesEditorInterface>
#include <AgendaUtil>
#include <AgendaEntry>

// User includes
#include "unittest_noteseditorplugin.h"


/*!
	\class TestNotesEditorPlugin

	Unit test clas for Notes Editor Plugin apis
 */


/*!
	Constructor
 */

TestNotesEditorPlugin::TestNotesEditorPlugin()
{
}

/*!
	Destructor
 */
TestNotesEditorPlugin::~TestNotesEditorPlugin()
{
}

/*!
	Initialise before calling the test case
 */
void TestNotesEditorPlugin::init()
{
}

/*!
	Do cleanup after each test case
 */
void TestNotesEditorPlugin::cleanup()
{
}

/*!
	Test the api NotesEditor::NotesEditor()
 */

void TestNotesEditorPlugin::testPluginLoadUnLoad()
{
	QDir dir(NOTES_EDITOR_PLUGIN_PATH);
	QString pluginName = dir.absoluteFilePath(NOTES_EDITOR_PLUGIN_NAME);

	// Create NotesEditor object
	QPluginLoader *pluginLoader = new QPluginLoader(pluginName);

	// Load the plugin
	QVERIFY(pluginLoader->load());

	QObject *plugin = qobject_cast<QObject*> (pluginLoader->instance());

	NotesEditorInterface* interface =
			qobject_cast<NotesEditorInterface*>(plugin);

	QVERIFY(interface);

	// Unload the plugin
	QVERIFY(pluginLoader->unload());
	delete pluginLoader;
}

/*!
	Test the api NotesEditorInterface::edit(const QString &string)
 */
void TestNotesEditorPlugin::testEditingNoteWithText()
{
	HbMainWindow window;
	window.show();

	QDir dir(NOTES_EDITOR_PLUGIN_PATH);
	QString pluginName = dir.absoluteFilePath(NOTES_EDITOR_PLUGIN_NAME);

	// Create plugin loader.
	QPluginLoader *pluginLoader = new QPluginLoader(pluginName);

	// Load the plugin.
	QVERIFY(pluginLoader->load());

	QObject *plugin = qobject_cast<QObject*> (pluginLoader->instance());
	NotesEditorInterface* interface =
			qobject_cast<NotesEditorInterface*>(plugin);

	QString noteText("Test editing of Note by providing text(QString)");
	// Call edit using the text.
	interface->edit(noteText);

	// Wait for Editor to launch.
	QTest::qWait(2000);

	// Call close on editor by saving the note
	ulong id = interface->close(NotesEditorInterface::CloseWithSave);
	QVERIFY(id);

	// Create agenda Utility.
	AgendaUtil *agendaUtil = new AgendaUtil();
	// Wait for completion of instance view/entryview creation.
	QTest::qWait(1);
	QVERIFY(agendaUtil);

	// Fetch the entry using the id.
	AgendaEntry entry = agendaUtil->fetchById(id);

	QString entryDescription = entry.description();
	int compareResult = noteText.compare(entryDescription);

	QVERIFY(!compareResult);

	// cleanup
	delete agendaUtil;

	// Unload the plugin.
	QVERIFY(pluginLoader->unload());
	delete pluginLoader;
}

/*!
	Test the api NotesEditor::edit(const QFile &handle)
 */
void TestNotesEditorPlugin::testEditingNoteWithFileHandle()
{
	// Nothing yet
}

/*!
	Test the api NotesEditor::edit(AgendaEntry entry)
 */
void TestNotesEditorPlugin::testEditingNoteWithAgendaEntry()
{
	HbMainWindow window;
	window.show();

	QDir dir(NOTES_EDITOR_PLUGIN_PATH);
	QString pluginName = dir.absoluteFilePath(NOTES_EDITOR_PLUGIN_NAME);

	// Create plugin loader.
	QPluginLoader *pluginLoader = new QPluginLoader(pluginName);

	// Load the plugin.
	QVERIFY(pluginLoader->load());

	QObject *plugin = qobject_cast<QObject*> (pluginLoader->instance());
	NotesEditorInterface* interface =
			qobject_cast<NotesEditorInterface*>(plugin);

	AgendaEntry entry;
	entry.setType(AgendaEntry::TypeNote);
	entry.setDescription(QString("Test Editing Note by providing Agenda Entry"));

	// Call edit on agenda entry
	interface->edit(entry);

	// Wait for Editor to launch.
	QTest::qWait(2000);

	ulong id = interface->close(NotesEditorInterface::CloseWithSave);

	AgendaUtil *agendaUtil = new AgendaUtil();
	// Wait for completion of instance view/entryview creation.
	QTest::qWait(1);
	QVERIFY(agendaUtil);

	// Compare the description after saving.
	AgendaEntry afterSave = agendaUtil->fetchById(id);
	QCOMPARE(afterSave.description(), entry.description());

	// cleanup.
	delete agendaUtil;

	// Unload the plugin.
	QVERIFY(pluginLoader->unload());
	delete pluginLoader;
}

/*!
	Test the api NotesEditor::edit(ulong id)
 */
void TestNotesEditorPlugin::testEditingNoteWithId()
{
	HbMainWindow window;
	window.show();

	QDir dir(NOTES_EDITOR_PLUGIN_PATH);
	QString pluginName = dir.absoluteFilePath(NOTES_EDITOR_PLUGIN_NAME);

	// Create plugin loader.
	QPluginLoader *pluginLoader = new QPluginLoader(pluginName);

	// Load the plugin.
	QVERIFY(pluginLoader->load());

	QObject *plugin = qobject_cast<QObject*> (pluginLoader->instance());
	NotesEditorInterface* interface =
			qobject_cast<NotesEditorInterface*>(plugin);

	AgendaUtil *agendaUtil = new AgendaUtil();
	// Wait for completion of instance view/entryview creation.
	QTest::qWait(1);

	QVERIFY(agendaUtil);

	AgendaEntry entry;
	entry.setType(AgendaEntry::TypeNote);
	entry.setDescription(
			QString("Test Editing of Note by providing entry local Id"));

	ulong id = agendaUtil->addEntry(entry);

	interface->edit(id);

	// Wait for Editor to launch.
	QTest::qWait(1000);

	ulong savedId = interface->close(NotesEditorInterface::CloseWithSave);

	// Compare the entry after saving. Using the old entry id since
	// text is not modified in the editor. Wait can be increased to allow user
	// to modify the text.
	AgendaEntry afterSave = agendaUtil->fetchById(id);
	QCOMPARE(afterSave.description(), entry.description());

	// cleanup.
	delete agendaUtil;

	// Unload the plugin.
	QVERIFY(pluginLoader->unload());
	delete pluginLoader;
}


/*!
	Test the api NotesEditor::edit(const QFile &handle)
 */
void TestNotesEditorPlugin::testEditingTodoWithFileHandle()
{
	// Nothing yet.
}

/*!
	Test the api NotesEditor::edit(AgendaEntry entry)
 */
void TestNotesEditorPlugin::testEditingTodoWithAgendaEntry()
{
	HbMainWindow mainWindow;
	mainWindow.show();

	QDir dir(NOTES_EDITOR_PLUGIN_PATH);
	QString pluginName = dir.absoluteFilePath(NOTES_EDITOR_PLUGIN_NAME);

	// Create plugin loader.
	QPluginLoader *pluginLoader = new QPluginLoader(pluginName);

	// Load the plugin.
	QVERIFY(pluginLoader->load());

	QObject *plugin = qobject_cast<QObject*> (pluginLoader->instance());
	NotesEditorInterface* interface =
			qobject_cast<NotesEditorInterface*>(plugin);

	AgendaUtil *agendaUtil = new AgendaUtil();
	// Wait for completion of instance view/entryview creation.
	QTest::qWait(1);
	QVERIFY(agendaUtil);

	// Create a agenda entry with type to-do
	AgendaEntry entry;
	entry.setType(AgendaEntry::TypeTodo);
	entry.setSummary(QString("Test Editing of Todo by providing AgendaEntry"));
	entry.setDescription(QString("@QTest Framework."));
	entry.setStartAndEndTime(
			QDateTime::currentDateTime(),QDateTime::currentDateTime());
	entry.setStatus(AgendaEntry::TodoNeedsAction);
	entry.setPriority(2);

	ulong id = agendaUtil->addEntry(entry);

	AgendaEntry storedEntry = agendaUtil->fetchById(id);

	// Call edit on agenda entry
	interface->edit(storedEntry);

	// Wait for Editor to launch.
	QTest::qWait(3000);

	ulong afterSaveId = interface->close(NotesEditorInterface::CloseWithSave);

	// Compare the entry after saving.
	AgendaEntry afterSave = agendaUtil->fetchById(id);
	QCOMPARE(afterSave.id(),id);
	QCOMPARE(afterSave.type(),entry.type());
	QCOMPARE(afterSave.summary(), entry.summary());
	QCOMPARE(afterSave.description(), entry.description());

	// cleanup.
	delete agendaUtil;

	// Unload the plugin.
	QVERIFY(pluginLoader->unload());
	delete pluginLoader;
}

/*!
	Test the api NotesEditor::edit(ulong id)
 */
void TestNotesEditorPlugin::testEditingTodoWithId()
{
	HbMainWindow window;
	window.show();

	QDir dir(NOTES_EDITOR_PLUGIN_PATH);
	QString pluginName = dir.absoluteFilePath(NOTES_EDITOR_PLUGIN_NAME);

	// Create plugin loader.
	QPluginLoader *pluginLoader = new QPluginLoader(pluginName);

	// Load the plugin.
	QVERIFY(pluginLoader->load());

	QObject *plugin = qobject_cast<QObject*> (pluginLoader->instance());
	NotesEditorInterface* interface =
			qobject_cast<NotesEditorInterface*>(plugin);

	AgendaUtil *agendaUtil = new AgendaUtil();
	// Wait for completion of instance view/entryview creation.
	QTest::qWait(1);
	QVERIFY(agendaUtil);

	// Create a agenda entry with type to-do
	AgendaEntry entry;
	entry.setType(AgendaEntry::TypeTodo);
	entry.setSummary(
			QString("Test Editing of Todo by providing entry local Id"));
	entry.setDescription(QString("@QTest Framework"));
	entry.setStartAndEndTime(
			QDateTime::currentDateTime(),QDateTime::currentDateTime());
	entry.setStatus(AgendaEntry::TodoNeedsAction);
	entry.setPriority(2);

	ulong id = agendaUtil->addEntry(entry);
	AgendaEntry storedEntry = agendaUtil->fetchById(id);

	// Call edit on agenda entry
	interface->edit(storedEntry);

	// Wait for Editor to launch.
	QTest::qWait(3000);

	ulong afterSaveId = interface->close(NotesEditorInterface::CloseWithSave);

	// Compare the entry after saving.
	AgendaEntry afterSave = agendaUtil->fetchById(id);
	QCOMPARE(afterSave.id(),id);
	QCOMPARE(afterSave.type(),entry.type());
	QCOMPARE(afterSave.summary(), entry.summary());
	QCOMPARE(afterSave.description(), entry.description());

	// cleanup.
	delete agendaUtil;

	// Unload the plugin.
	QVERIFY(pluginLoader->unload());
	delete pluginLoader;
}

/*!
	Test the api NotesEditor::create(CreateType type)
 */
void TestNotesEditorPlugin::testCreationOfNote()
{
	HbMainWindow window;
	window.show();

	QDir dir(NOTES_EDITOR_PLUGIN_PATH);
	QString pluginName = dir.absoluteFilePath(NOTES_EDITOR_PLUGIN_NAME);

	// Create plugin loader.
	QPluginLoader *pluginLoader = new QPluginLoader(pluginName);

	// Load the plugin.
	QVERIFY(pluginLoader->load());

	QObject *plugin = qobject_cast<QObject*> (pluginLoader->instance());
	NotesEditorInterface* interface =
			qobject_cast<NotesEditorInterface*>(plugin);

	interface->create(NotesEditorInterface::CreateNote);

	// Wait for Editor to launch.
	QTest::qWait(3000);

	ulong afterSaveId = interface->close(NotesEditorInterface::CloseWithSave);

	// Note is not saved since description is empty
	// TODO use key press events here

	QVERIFY(!afterSaveId);

	// Unload the plugin.
	QVERIFY(pluginLoader->unload());
	delete pluginLoader;
}

/*!
	Test the api NotesEditor::create(CreateType type)
 */
void TestNotesEditorPlugin::testCreationofTodo()
{
	HbMainWindow window;
	window.show();

	QDir dir(NOTES_EDITOR_PLUGIN_PATH);
	QString pluginName = dir.absoluteFilePath(NOTES_EDITOR_PLUGIN_NAME);

	// Create plugin loader.
	QPluginLoader *pluginLoader = new QPluginLoader(pluginName);

	// Load the plugin.
	QVERIFY(pluginLoader->load());

	QObject *plugin = qobject_cast<QObject*> (pluginLoader->instance());
	NotesEditorInterface* interface =
			qobject_cast<NotesEditorInterface*>(plugin);

	interface->create(NotesEditorInterface::CreateTodo);

	// TODO
	// Needs key interaction to edit the fields in to-do editor.

	// Wait for Editor to launch.
	QTest::qWait(3000);

	// Unload the plugin.
	QVERIFY(pluginLoader->unload());
	delete pluginLoader;
}

/*!
	Test the api NotesEditor::close(CloseType type);
 */

void TestNotesEditorPlugin::testClosingOfNotesEditorWithSave()
{
	HbMainWindow window;
	window.show();

	QDir dir(NOTES_EDITOR_PLUGIN_PATH);
	QString pluginName = dir.absoluteFilePath(NOTES_EDITOR_PLUGIN_NAME);

	// Create plugin loader.
	QPluginLoader *pluginLoader = new QPluginLoader(pluginName);

	// Load the plugin.
	QVERIFY(pluginLoader->load());

	QObject *plugin = qobject_cast<QObject*> (pluginLoader->instance());
	NotesEditorInterface* interface =
			qobject_cast<NotesEditorInterface*>(plugin);

	QString noteText("Test Closing Of NotesEditor With Save");
	// Call edit using the text.
	interface->edit(noteText);

	// Wait for Editor to launch.
	QTest::qWait(1000);

	// Call close on editor by saving the note
	ulong id = interface->close(NotesEditorInterface::CloseWithSave);
	QVERIFY(id);

	// Create agenda Utility.
	AgendaUtil *agendaUtil = new AgendaUtil();
	// Wait for completion of instance view/entryview creation.
	QTest::qWait(1);
	QVERIFY(agendaUtil);

	// Fetch the entry using the id
	AgendaEntry entry = agendaUtil->fetchById(id);

	QCOMPARE(noteText,entry.description());

	// cleanup.
	delete agendaUtil;

	// Unload the plugin.
	QVERIFY(pluginLoader->unload());
	delete pluginLoader;
}

/*!
	Test the api NotesEditor::close(CloseType type);
 */
void TestNotesEditorPlugin::testClosingOfNotesEditorWithoutSave()
{
	HbMainWindow window;
	window.show();

	QDir dir(NOTES_EDITOR_PLUGIN_PATH);
	QString pluginName = dir.absoluteFilePath(NOTES_EDITOR_PLUGIN_NAME);

	// Create plugin loader.
	QPluginLoader *pluginLoader = new QPluginLoader(pluginName);

	// Load the plugin.
	QVERIFY(pluginLoader->load());

	QObject *plugin = qobject_cast<QObject*> (pluginLoader->instance());
	NotesEditorInterface* interface =
			qobject_cast<NotesEditorInterface*>(plugin);

	QString noteText("Test Closing Of Notes Editor Without Save");
	// Call edit using the text.
	interface->edit(noteText);

	// Wait for Editor to launch.
	QTest::qWait(1000);

	// Call close on editor by saving the note
	ulong id = interface->close(NotesEditorInterface::CloseWithoutSave);
	QVERIFY(!id);

	// Unload the plugin.
	QVERIFY(pluginLoader->unload());
	delete pluginLoader;
}

/*!
	Test the api NotesEditor::close(CloseType type);
 */
void TestNotesEditorPlugin::testClosingOfTodoEditorWithSave()
{
	HbMainWindow window;
	window.show();

	QDir dir(NOTES_EDITOR_PLUGIN_PATH);
	QString pluginName = dir.absoluteFilePath(NOTES_EDITOR_PLUGIN_NAME);

	// Create plugin loader.
	QPluginLoader *pluginLoader = new QPluginLoader(pluginName);

	// Load the plugin.
	QVERIFY(pluginLoader->load());

	QObject *plugin = qobject_cast<QObject*> (pluginLoader->instance());
	NotesEditorInterface* interface =
			qobject_cast<NotesEditorInterface*>(plugin);

	AgendaUtil *agendaUtil = new AgendaUtil();
	// Wait for completion of instance view/entryview creation.
	QTest::qWait(1);
	QVERIFY(agendaUtil);

	// Create a agenda entry with type to-do
	AgendaEntry entry;
	entry.setType(AgendaEntry::TypeTodo);
	entry.setSummary(
			QString("Test Closing Of Todo Editor With Save"));
	entry.setDescription(QString("@QTest Framework"));
	entry.setStartAndEndTime(
			QDateTime::currentDateTime(),QDateTime::currentDateTime());
	entry.setStatus(AgendaEntry::TodoNeedsAction);
	entry.setPriority(2);

	ulong id = agendaUtil->addEntry(entry);

	AgendaEntry storedEntry = agendaUtil->fetchById(id);
	// Call edit on agenda entry
	interface->edit(storedEntry);

	// Wait for Editor to launch.
	QTest::qWait(1000);

	ulong afterSaveId = interface->close(NotesEditorInterface::CloseWithSave);

	AgendaEntry afterSave = agendaUtil->fetchById(id);
	QCOMPARE(afterSave.id(),id);
	QCOMPARE(afterSave.type(),entry.type());
	QCOMPARE(afterSave.summary(), entry.summary());
	QCOMPARE(afterSave.description(), entry.description());

	// cleanup.
	delete agendaUtil;

	// Unload the plugin.
	QVERIFY(pluginLoader->unload());
	delete pluginLoader;
}

/*!
	Test the api NotesEditor::close(CloseType type);
 */
void TestNotesEditorPlugin::testClosingOfTodoEditorWithoutSave()
{
	HbMainWindow window;
	window.show();

	QDir dir(NOTES_EDITOR_PLUGIN_PATH);
	QString pluginName = dir.absoluteFilePath(NOTES_EDITOR_PLUGIN_NAME);

	// Create plugin loader.
	QPluginLoader *pluginLoader = new QPluginLoader(pluginName);

	// Load the plugin.
	QVERIFY(pluginLoader->load());

	QObject *plugin = qobject_cast<QObject*> (pluginLoader->instance());
	NotesEditorInterface* interface =
			qobject_cast<NotesEditorInterface*>(plugin);

	AgendaUtil *agendaUtil = new AgendaUtil();
	// Wait for completion of instance view/entryview creation.
	QTest::qWait(1);
	QVERIFY(agendaUtil);

	// Create a agenda entry with type to-do
	AgendaEntry entry;
	entry.setType(AgendaEntry::TypeTodo);
	entry.setSummary(
			QString("Test Closing Of Todo Editor Without Save"));
	entry.setDescription(QString("@QTest framework"));
	entry.setStartAndEndTime(
			QDateTime::currentDateTime(),QDateTime::currentDateTime());
	entry.setStatus(AgendaEntry::TodoNeedsAction);
	entry.setPriority(2);

	ulong id = agendaUtil->addEntry(entry);

	AgendaEntry storedEntry = agendaUtil->fetchById(id);
	// Call edit on agenda entry
	interface->edit(storedEntry);

	// Wait for Editor to launch.
	QTest::qWait(3000);

	ulong afterSaveId = interface->close(
			NotesEditorInterface::CloseWithoutSave);
	QVERIFY(!afterSaveId);

	// cleanup.
	delete agendaUtil;

	// Unload the plugin.
	QVERIFY(pluginLoader->unload());
	delete pluginLoader;
}

/*!
	Test editing of note by owning agenda util.
 */
void TestNotesEditorPlugin::testAgendaUtilEditingNoteWithText()
{
	HbMainWindow window;
	window.show();

	QDir dir(NOTES_EDITOR_PLUGIN_PATH);
	QString pluginName = dir.absoluteFilePath(NOTES_EDITOR_PLUGIN_NAME);

	// Create plugin loader.
	QPluginLoader *pluginLoader = new QPluginLoader(pluginName);

	// Load the plugin.
	QVERIFY(pluginLoader->load());

	QObject *plugin = qobject_cast<QObject*> (pluginLoader->instance());
	NotesEditorInterface* interface =
			qobject_cast<NotesEditorInterface*>(plugin);

	// Create agenda Utility.
	AgendaUtil *agendaUtil = new AgendaUtil();
	// Wait for completion of instance view/entryview creation.
	QTest::qWait(1);
	QVERIFY(agendaUtil);

	QString noteText("Test Editing of Note With Text by passing created "
			"agenda util to notes editor plugin");
	// Call edit using the text.
	interface->edit(noteText, agendaUtil);

	// Call close on editor by saving the note
	ulong id = interface->close(NotesEditorInterface::CloseWithSave);
	QVERIFY(id);

	// Fetch the entry using the id
	AgendaEntry entry = agendaUtil->fetchById(id);

	QString entryDescription = entry.description();
	int compareResult = noteText.compare(entryDescription);

	QVERIFY(!compareResult);

	// cleanup.
	delete agendaUtil;

	// Unload the plugin.
	QVERIFY(pluginLoader->unload());
	delete pluginLoader;
}

/*!
	Test editing to-do entry by owning agenda util.
 */
void TestNotesEditorPlugin::testAgendaUtilEditingTodoWithId()
{
	HbMainWindow window;
	window.show();

	QDir dir(NOTES_EDITOR_PLUGIN_PATH);
	QString pluginName = dir.absoluteFilePath(NOTES_EDITOR_PLUGIN_NAME);

	// Create plugin loader.
	QPluginLoader *pluginLoader = new QPluginLoader(pluginName);

	// Load the plugin.
	QVERIFY(pluginLoader->load());

	QObject *plugin = qobject_cast<QObject*> (pluginLoader->instance());
	NotesEditorInterface* interface =
			qobject_cast<NotesEditorInterface*>(plugin);

	AgendaUtil *agendaUtil = new AgendaUtil();
	// Wait for completion of instance view/entryview creation.
	QTest::qWait(1);

	QVERIFY(agendaUtil);

	AgendaEntry entry;
	entry.setType(AgendaEntry::TypeNote);
	entry.setDescription(
			QString("Test Editing of Note by providing entry local Id"));

	ulong id = agendaUtil->addEntry(entry);

	// Edits to-do entry by providing entry id and agendautil.
	interface->edit(id, agendaUtil);

	// Wait for Editor to launch.
	QTest::qWait(1000);

	ulong savedId = interface->close(NotesEditorInterface::CloseWithSave);

	// Compare the entry after saving. Using the old entry id since
	// text is not modified in the editor. Wait can be increased to allow user
	// to modify the text.
	AgendaEntry afterSave = agendaUtil->fetchById(id);
	QCOMPARE(afterSave.description(), entry.description());

	// cleanup.
	delete agendaUtil;

	// Unload the plugin.
	QVERIFY(pluginLoader->unload());
	delete pluginLoader;
}
// End of file	--Don't remove this.