From be2db74cad9f1d0359741beecdef2aed63e0ad2b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Remko=20Tron=C3=A7on?= <git@el-tramo.be>
Date: Thu, 30 Jul 2009 21:11:19 +0200
Subject: Proide a description for LinkLocalServices.


diff --git a/Swiften/LinkLocal/LinkLocalService.cpp b/Swiften/LinkLocal/LinkLocalService.cpp
new file mode 100644
index 0000000..f567a63
--- /dev/null
+++ b/Swiften/LinkLocal/LinkLocalService.cpp
@@ -0,0 +1,23 @@
+#include "Swiften/LinkLocal/LinkLocalService.h"
+
+namespace Swift {
+
+String LinkLocalService::getDescription() const {
+	LinkLocalServiceInfo info = getInfo();
+	if (!info.getNick().isEmpty()) {
+		return info.getNick();
+	}
+	else if (!info.getFirstName().isEmpty()) {
+		String result = info.getFirstName();
+		if (!info.getLastName().isEmpty()) {
+			result += " " + info.getLastName();
+		}
+		return result;
+	}
+	else if (!info.getLastName().isEmpty()) {
+		return info.getLastName();
+	}
+	return getName();
+}
+
+}
diff --git a/Swiften/LinkLocal/LinkLocalService.h b/Swiften/LinkLocal/LinkLocalService.h
index 37f2130..f7e9e3c 100644
--- a/Swiften/LinkLocal/LinkLocalService.h
+++ b/Swiften/LinkLocal/LinkLocalService.h
@@ -34,6 +34,8 @@ namespace Swift {
 				return LinkLocalServiceInfo::createFromTXTRecord(info.info);
 			}
 
+			String getDescription() const;
+
 		private:
 			DNSSDServiceID id;
 			DNSSDResolveServiceQuery::Result info;
diff --git a/Swiften/LinkLocal/Makefile.inc b/Swiften/LinkLocal/Makefile.inc
index ac3d2a2..3738789 100644
--- a/Swiften/LinkLocal/Makefile.inc
+++ b/Swiften/LinkLocal/Makefile.inc
@@ -1,6 +1,7 @@
 SWIFTEN_SOURCES += \
 	Swiften/LinkLocal/LinkLocalServiceBrowser.cpp \
 	Swiften/LinkLocal/DNSSDService.cpp \
+	Swiften/LinkLocal/LinkLocalService.cpp \
 	Swiften/LinkLocal/LinkLocalRoster.cpp \
 	Swiften/LinkLocal/LinkLocalServiceInfo.cpp \
 	Swiften/LinkLocal/IncomingLinkLocalSession.cpp \
diff --git a/Swiften/LinkLocal/UnitTest/LinkLocalServiceInfoTest.cpp b/Swiften/LinkLocal/UnitTest/LinkLocalServiceInfoTest.cpp
index 68f191a..b5d7ef5 100644
--- a/Swiften/LinkLocal/UnitTest/LinkLocalServiceInfoTest.cpp
+++ b/Swiften/LinkLocal/UnitTest/LinkLocalServiceInfoTest.cpp
@@ -14,8 +14,6 @@ class LinkLocalServiceInfoTest : public CppUnit::TestFixture {
 		CPPUNIT_TEST_SUITE_END();
 
 	public:
-		LinkLocalServiceInfoTest() {}
-
 		void testGetTXTRecord() {
 			LinkLocalServiceInfo info;
 			info.setFirstName("Remko");
diff --git a/Swiften/LinkLocal/UnitTest/LinkLocalServiceTest.cpp b/Swiften/LinkLocal/UnitTest/LinkLocalServiceTest.cpp
new file mode 100644
index 0000000..69ec718
--- /dev/null
+++ b/Swiften/LinkLocal/UnitTest/LinkLocalServiceTest.cpp
@@ -0,0 +1,62 @@
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/extensions/TestFactoryRegistry.h>
+
+#include "Swiften/LinkLocal/LinkLocalService.h"
+
+using namespace Swift;
+
+class LinkLocalServiceTest : public CppUnit::TestFixture {
+		CPPUNIT_TEST_SUITE(LinkLocalServiceTest);
+		CPPUNIT_TEST(testGetDescription_WithNick);
+		CPPUNIT_TEST(testGetDescription_WithFirstName);
+		CPPUNIT_TEST(testGetDescription_WithLastName);
+		CPPUNIT_TEST(testGetDescription_WithFirstAndLastName);
+		CPPUNIT_TEST(testGetDescription_NoInfo);
+		CPPUNIT_TEST_SUITE_END();
+
+	public:
+		void testGetDescription_WithNick() {
+			LinkLocalService testling = createService("alice@wonderland", "Alice", "Alice In", "Wonderland");
+
+			CPPUNIT_ASSERT_EQUAL(String("Alice"), testling.getDescription());
+		}
+
+		void testGetDescription_WithFirstName() {
+			LinkLocalService testling = createService("alice@wonderland", "", "Alice In");
+
+			CPPUNIT_ASSERT_EQUAL(String("Alice In"), testling.getDescription());
+		}
+
+		void testGetDescription_WithLastName() {
+			LinkLocalService testling = createService("alice@wonderland", "", "", "Wonderland");
+
+			CPPUNIT_ASSERT_EQUAL(String("Wonderland"), testling.getDescription());
+		}
+
+		void testGetDescription_WithFirstAndLastName() {
+			LinkLocalService testling = createService("alice@wonderland", "", "Alice In", "Wonderland");
+
+			CPPUNIT_ASSERT_EQUAL(String("Alice In Wonderland"), testling.getDescription());
+		}
+
+		void testGetDescription_NoInfo() {
+			LinkLocalService testling = createService("alice@wonderland");
+
+			CPPUNIT_ASSERT_EQUAL(String("alice@wonderland"), testling.getDescription());
+		}
+	
+	private:
+		LinkLocalService createService(const String& name, const String& nickName = String(), const String& firstName = String(), const String& lastName = String()) {
+			DNSSDServiceID service(name, "local.");
+			LinkLocalServiceInfo info;
+			info.setFirstName(firstName);
+			info.setLastName(lastName);
+			info.setNick(nickName);
+			return LinkLocalService(service, 
+					DNSSDResolveServiceQuery::Result(
+						name + "._presence._tcp.local", "rabbithole.local", 1234, 
+						info.toTXTRecord()));
+		}
+};
+
+CPPUNIT_TEST_SUITE_REGISTRATION(LinkLocalServiceTest);
diff --git a/Swiften/LinkLocal/UnitTest/Makefile.inc b/Swiften/LinkLocal/UnitTest/Makefile.inc
index 9640fa7..e5f1bf0 100644
--- a/Swiften/LinkLocal/UnitTest/Makefile.inc
+++ b/Swiften/LinkLocal/UnitTest/Makefile.inc
@@ -1,3 +1,4 @@
 UNITTEST_SOURCES += \
+	Swiften/LinkLocal/UnitTest/LinkLocalServiceTest.cpp \
 	Swiften/LinkLocal/UnitTest/LinkLocalServiceBrowserTest.cpp \
 	Swiften/LinkLocal/UnitTest/LinkLocalServiceInfoTest.cpp
-- 
cgit v0.10.2-6-g49f6