/**********************************************************************
 * LeechCraft - modular cross-platform feature rich internet client.
 * Copyright (C) 2011  Minh Ngo
 * Copyright (C) 2006-2013  Georg Rudoy
 *
 * Boost Software License - Version 1.0 - August 17th, 2003
 *
 * Permission is hereby granted, free of charge, to any person or organization
 * obtaining a copy of the software and accompanying documentation covered by
 * this license (the "Software") to use, reproduce, display, distribute,
 * execute, and transmit the Software, and to prepare derivative works of the
 * Software, and to permit third-parties to whom the Software is furnished to
 * do so, all subject to the following:
 *
 * The copyright notices in the Software and this entire statement, including
 * the above license grant, this restriction and the following disclaimer,
 * must be included in all copies of the Software, in whole or in part, and
 * all derivative works of the Software, unless such copies or derivative
 * works are solely in the form of machine-executable object code generated by
 * a source language processor.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
 * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
 * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 * DEALINGS IN THE SOFTWARE.
 **********************************************************************/

#ifndef PLUGINS_LAURE_VLCWRAPPERTEST_H
#define PLUGINS_LAURE_VLCWRAPPERTEST_H
#include <QObject>
#include <QtTest>

#include <vlcwrapper.h>

using namespace LeechCraft;
using namespace LeechCraft::Laure;

/** @test Provides test units for the VLCWrapper class.
 * 
 * Needs internet connection for playing the media file.
 * 
 * @sa VLCWrapper
 * 
 * @author Minh Ngo <nlminhtl@gmail.com>
 */
class VLCWrapperTest : public QObject
{
	Q_OBJECT
	
	VLCWrapper *Wrapper_;
public:
	VLCWrapperTest (QObject *parent = 0)
	: Wrapper_ (new VLCWrapper (this))
	{
	}
private slots:
	void initTest ()
	{
		qRegisterMetaType<MediaMeta> ("MediaMeta");
		qRegisterMetaType<Entity> ("Entity");
		QSignalSpy addSpy (Wrapper_, SIGNAL (itemAdded (const MediaMeta&, const QString&)));
		
		const QString url ("http://www.gnu.org/music/FreeSWSong.ogg"); 
		Wrapper_->addRow (url);
		
		QVERIFY (Wrapper_->RowCount () == 1);
		
		QCOMPARE (addSpy.count (), 1);
		QVERIFY (addSpy.takeFirst ().at (1).toString () == url);
		
		QSignalSpy entitySpy (Wrapper_, SIGNAL (gotEntity (const Entity&)));
		QSignalSpy playedSpy (Wrapper_, SIGNAL (itemPlayed (int)));
		
		Wrapper_->playItem (0);
		
		QCOMPARE (entitySpy.count (), 1);
		QCOMPARE (playedSpy.count (), 1);
		
		QTimer::singleShot (5000, this, SLOT (playTest ()));
	}

	void playTest ()
	{
		QVERIFY (Wrapper_->IsPlaying ());
		
		QSignalSpy pauseSpy (Wrapper_, SIGNAL (paused ()));
		
		Wrapper_->play ();
		
		QCOMPARE (pauseSpy.count (), 0);
	}
	
	void volumeTest ()
	{
		Wrapper_->setVolume (50);
		QVERIFY (Wrapper_->GetVolume () == 50);
	}
};


#endif // PLUGINS_LAURE_VLCWRAPPERTEST_H
