[addonversion] add tests
authorJonathan Marshall <jmarshall@xbmc.org>
Sat, 26 Apr 2014 23:48:55 +0000 (11:48 +1200)
committerJonathan Marshall <jmarshall@xbmc.org>
Sat, 17 May 2014 21:40:54 +0000 (09:40 +1200)
Makefile.in
xbmc/addons/AddonVersion.cpp
xbmc/addons/AddonVersion.h
xbmc/addons/test/Makefile [new file with mode: 0644]
xbmc/addons/test/TestAddonVersion.cpp [new file with mode: 0644]

index 2aaa79f..e07970f 100644 (file)
@@ -289,12 +289,14 @@ GTEST_DIR = lib/gtest
 GTEST_INCLUDES = -I$(GTEST_DIR)/include
 GTEST_LIBS = $(GTEST_DIR)/lib/.libs/libgtest.a
 
-CHECK_DIRS = xbmc/filesystem/test \
+CHECK_DIRS = xbmc/addons/test \
+             xbmc/filesystem/test \
              xbmc/utils/test \
              xbmc/threads/test \
              xbmc/interfaces/python/test \
              xbmc/test
-CHECK_LIBS = xbmc/filesystem/test/filesystemTest.a \
+CHECK_LIBS = xbmc/addons/test/addonsTest.a \
+             xbmc/filesystem/test/filesystemTest.a \
              xbmc/utils/test/utilsTest.a \
              xbmc/threads/test/threadTest.a \
              xbmc/interfaces/python/test/pythonSwigTest.a \
index 5a6fb4d..a83dd4e 100644 (file)
@@ -146,29 +146,4 @@ namespace ADDON
 
     return true;
   }
-
-  bool AddonVersion::Test()
-  {
-    AddonVersion v1_0("1.0");
-    AddonVersion v1_00("1.00");
-    AddonVersion v1_0_0("1.0.0");
-    AddonVersion v1_1("1.1");
-    AddonVersion v1_01("1.01");
-    AddonVersion v1_0_1("1.0.1");
-
-    bool ret = false;
-
-    // These are totally sane
-    ret = (v1_0 < v1_1) && (v1_0 < v1_01) && (v1_0 < v1_0_1) &&
-          (v1_1 > v1_0_1) && (v1_01 > v1_0_1);
-
-    // These are rather sane
-    ret &= (v1_0 != v1_0_0) && (v1_0 < v1_0_0) && (v1_0_0 > v1_0) &&
-           (v1_00 != v1_0_0) && (v1_00 < v1_0_0) && (v1_0_0 > v1_00);
-
-    ret &= (v1_0 == v1_00) && !(v1_0 < v1_00) && !(v1_0 > v1_00);
-    ret &= (v1_1 == v1_01) && !(v1_1 < v1_01) && !(v1_1 > v1_01);
-
-    return ret;
-  }
 }
index f804278..c87d64a 100644 (file)
@@ -58,7 +58,6 @@ namespace ADDON
     static bool SplitFileName(CStdString& ID, CStdString& version,
                               const CStdString& filename);
 
-    static bool Test();
   protected:
     CStdString m_originalVersion;
     int mEpoch;
diff --git a/xbmc/addons/test/Makefile b/xbmc/addons/test/Makefile
new file mode 100644 (file)
index 0000000..bf74bd6
--- /dev/null
@@ -0,0 +1,9 @@
+SRCS=  \
+       TestAddonVersion.cpp
+
+LIB=addonsTest.a
+
+INCLUDES += -I../../../lib/gtest/include
+
+include ../../../Makefile.include
+-include $(patsubst %.cpp,%.P,$(patsubst %.c,%.P,$(SRCS)))
diff --git a/xbmc/addons/test/TestAddonVersion.cpp b/xbmc/addons/test/TestAddonVersion.cpp
new file mode 100644 (file)
index 0000000..910c593
--- /dev/null
@@ -0,0 +1,233 @@
+/*
+ *      Copyright (C) 2005-2014 Team XBMC
+ *      http://xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, see
+ *  <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "addons/AddonVersion.h"
+
+#include "gtest/gtest.h"
+
+using namespace ADDON;
+
+class TestAddonVersion : public testing::Test
+{
+public:
+  TestAddonVersion()
+  : v1_0("1.0"),
+    v1_00("1.00"),
+    v1_0_0("1.0.0"),
+    v1_1("1.1"),
+    v1_01("1.01"),
+    v1_0_1("1.0.1"),
+    e1_v1_0_0("1:1.0.0"),
+    e1_v1_0_1("1:1.0.1"),
+    e2_v1_0_0("2:1.0.0"),
+    e1_v1_0_0_r1("1:1.0.0-1"),
+    e1_v1_0_1_r1("1:1.0.1-1"),
+    e1_v1_0_0_r2("1:1.0.0-2"),
+    v1_0_0_beta("1.0.0~beta"),
+    v1_0_0_alpha("1.0.0~alpha"),
+    v1_0_0_alpha2("1.0.0~alpha2"),
+    v1_0_0_alpha3("1.0.0~alpha3"),
+    v1_0_0_alpha10("1.0.0~alpha10")
+  {
+  }
+
+  AddonVersion v1_0;
+  AddonVersion v1_00;
+  AddonVersion v1_0_0;
+  AddonVersion v1_1;
+  AddonVersion v1_01;
+  AddonVersion v1_0_1;
+  AddonVersion e1_v1_0_0;
+  AddonVersion e1_v1_0_1;
+  AddonVersion e2_v1_0_0;
+  AddonVersion e1_v1_0_0_r1;
+  AddonVersion e1_v1_0_1_r1;
+  AddonVersion e1_v1_0_0_r2;
+  AddonVersion v1_0_0_beta;
+  AddonVersion v1_0_0_alpha;
+  AddonVersion v1_0_0_alpha2;
+  AddonVersion v1_0_0_alpha3;
+  AddonVersion v1_0_0_alpha10;
+};
+
+TEST_F(TestAddonVersion, Constructor)
+{
+  EXPECT_STREQ(v1_0.Upstream(), "1.0");
+  EXPECT_EQ(v1_0.Epoch(), 0);
+  EXPECT_STREQ(v1_0.Revision(), "0");
+
+  EXPECT_STREQ(v1_00.Upstream(), "1.00");
+  EXPECT_EQ(v1_00.Epoch(), 0);
+  EXPECT_STREQ(v1_00.Revision(), "0");
+
+  EXPECT_STREQ(v1_0_0.Upstream(), "1.0.0");
+  EXPECT_EQ(v1_0_0.Epoch(), 0);
+  EXPECT_STREQ(v1_0_0.Revision(), "0");
+
+  EXPECT_STREQ(v1_1.Upstream(), "1.1");
+  EXPECT_EQ(v1_1.Epoch(), 0);
+  EXPECT_STREQ(v1_1.Revision(), "0");
+
+  EXPECT_STREQ(v1_01.Upstream(), "1.01");
+  EXPECT_EQ(v1_01.Epoch(), 0);
+  EXPECT_STREQ(v1_01.Revision(), "0");
+
+  EXPECT_STREQ(v1_0_1.Upstream(), "1.0.1");
+  EXPECT_EQ(v1_0_1.Epoch(), 0);
+  EXPECT_STREQ(v1_0_1.Revision(), "0");
+
+  EXPECT_STREQ(e1_v1_0_0.Upstream(), "1.0.0");
+  EXPECT_EQ(e1_v1_0_0.Epoch(), 1);
+  EXPECT_STREQ(e1_v1_0_0.Revision(), "0");
+
+  EXPECT_STREQ(e1_v1_0_1.Upstream(), "1.0.1");
+  EXPECT_EQ(e1_v1_0_1.Epoch(), 1);
+  EXPECT_STREQ(e1_v1_0_1.Revision(), "0");
+
+  EXPECT_STREQ(e2_v1_0_0.Upstream(), "1.0.0");
+  EXPECT_EQ(e2_v1_0_0.Epoch(), 2);
+  EXPECT_STREQ(e2_v1_0_0.Revision(), "0");
+
+  EXPECT_STREQ(e1_v1_0_0_r1.Upstream(), "1.0.0");
+  EXPECT_EQ(e1_v1_0_0_r1.Epoch(), 1);
+  EXPECT_STREQ(e1_v1_0_0_r1.Revision(), "1");
+
+  EXPECT_STREQ(e1_v1_0_1_r1.Upstream(), "1.0.1");
+  EXPECT_EQ(e1_v1_0_1_r1.Epoch(), 1);
+  EXPECT_STREQ(e1_v1_0_1_r1.Revision(), "1");
+
+  EXPECT_STREQ(e1_v1_0_0_r2.Upstream(), "1.0.0");
+  EXPECT_EQ(e1_v1_0_0_r2.Epoch(), 1);
+  EXPECT_STREQ(e1_v1_0_0_r2.Revision(), "2");
+
+  EXPECT_STREQ(v1_0_0_beta.Upstream(), "1.0.0~beta");
+  EXPECT_EQ(v1_0_0_beta.Epoch(), 0);
+  EXPECT_STREQ(v1_0_0_beta.Revision(), "0");
+
+  EXPECT_STREQ(v1_0_0_alpha.Upstream(), "1.0.0~alpha");
+  EXPECT_EQ(v1_0_0_alpha.Epoch(), 0);
+  EXPECT_STREQ(v1_0_0_alpha.Revision(), "0");
+
+  EXPECT_STREQ(v1_0_0_alpha2.Upstream(), "1.0.0~alpha2");
+  EXPECT_EQ(v1_0_0_alpha2.Epoch(), 0);
+  EXPECT_STREQ(v1_0_0_alpha2.Revision(), "0");
+
+  EXPECT_STREQ(v1_0_0_alpha3.Upstream(), "1.0.0~alpha3");
+  EXPECT_EQ(v1_0_0_alpha3.Epoch(), 0);
+  EXPECT_STREQ(v1_0_0_alpha3.Revision(), "0");
+
+  EXPECT_STREQ(v1_0_0_alpha10.Upstream(), "1.0.0~alpha10");
+  EXPECT_EQ(v1_0_0_alpha10.Epoch(), 0);
+  EXPECT_STREQ(v1_0_0_alpha10.Revision(), "0");
+}
+
+TEST_F(TestAddonVersion, Equals)
+{
+  EXPECT_EQ(v1_0, AddonVersion("1.0"));
+  EXPECT_EQ(v1_00, AddonVersion("1.00"));
+  EXPECT_EQ(v1_0_0, AddonVersion("1.0.0"));
+  EXPECT_EQ(v1_1, AddonVersion("1.1"));
+  EXPECT_EQ(v1_01, AddonVersion("1.01"));
+  EXPECT_EQ(v1_0_1, AddonVersion("1.0.1"));
+  EXPECT_EQ(e1_v1_0_0, AddonVersion("1:1.0.0"));
+  EXPECT_EQ(e1_v1_0_1, AddonVersion("1:1.0.1"));
+  EXPECT_EQ(e2_v1_0_0, AddonVersion("2:1.0.0"));
+  EXPECT_EQ(e1_v1_0_0_r1, AddonVersion("1:1.0.0-1"));
+  EXPECT_EQ(e1_v1_0_1_r1, AddonVersion("1:1.0.1-1"));
+  EXPECT_EQ(e1_v1_0_0_r2, AddonVersion("1:1.0.0-2"));
+  EXPECT_EQ(v1_0_0_beta, AddonVersion("1.0.0~beta"));
+  EXPECT_EQ(v1_0_0_alpha, AddonVersion("1.0.0~alpha"));
+  EXPECT_EQ(v1_0_0_alpha2, AddonVersion("1.0.0~alpha2"));
+  EXPECT_EQ(v1_0_0_alpha3, AddonVersion("1.0.0~alpha3"));
+  EXPECT_EQ(v1_0_0_alpha10, AddonVersion("1.0.0~alpha10"));
+}
+
+TEST_F(TestAddonVersion, Equivalent)
+{
+  EXPECT_FALSE(v1_0 != v1_00);
+  EXPECT_FALSE(v1_0 < v1_00);
+  EXPECT_FALSE(v1_0 > v1_00);
+  EXPECT_TRUE(v1_0 == v1_00);
+
+  EXPECT_FALSE(v1_01 != v1_1);
+  EXPECT_FALSE(v1_01 < v1_1);
+  EXPECT_FALSE(v1_01 > v1_1);
+  EXPECT_TRUE(v1_01 == v1_1);
+}
+
+TEST_F(TestAddonVersion, LessThan)
+{
+  EXPECT_LT(v1_0, v1_0_0);
+  EXPECT_LT(v1_0, v1_1);
+  EXPECT_LT(v1_0, v1_01);
+  EXPECT_LT(v1_0, v1_0_1);
+
+  EXPECT_LT(v1_00, v1_0_0);
+  EXPECT_LT(v1_00, v1_1);
+  EXPECT_LT(v1_00, v1_01);
+  EXPECT_LT(v1_00, v1_0_1);
+
+  EXPECT_LT(v1_0_0, v1_1);
+  EXPECT_LT(v1_0_0, v1_01);
+  EXPECT_LT(v1_0_0, v1_0_1);
+
+  EXPECT_LT(v1_0_1, v1_01);
+  EXPECT_LT(v1_0_1, v1_1);
+
+  // epochs
+  EXPECT_LT(v1_0_0, e1_v1_0_0);
+  EXPECT_LT(v1_0_0, e1_v1_0_1);
+  EXPECT_LT(v1_0_0, e2_v1_0_0);
+  EXPECT_LT(v1_0_1, e1_v1_0_1);
+  EXPECT_LT(v1_0_1, e2_v1_0_0);
+
+  EXPECT_LT(e1_v1_0_0, e1_v1_0_1);
+  EXPECT_LT(e1_v1_0_0, e2_v1_0_0);
+  EXPECT_LT(e1_v1_0_1, e2_v1_0_0);
+
+  // revisions
+  EXPECT_LT(e1_v1_0_0, e1_v1_0_0_r1);
+  EXPECT_LT(e1_v1_0_0, e1_v1_0_1_r1);
+  EXPECT_LT(e1_v1_0_0, e1_v1_0_0_r2);
+  EXPECT_LT(e1_v1_0_1, e1_v1_0_1_r1);
+  EXPECT_LT(e1_v1_0_0_r1, e1_v1_0_1);
+  EXPECT_LT(e1_v1_0_0_r1, e1_v1_0_1_r1);
+  EXPECT_LT(e1_v1_0_0_r1, e1_v1_0_0_r2);
+  EXPECT_LT(e1_v1_0_0_r2, e1_v1_0_1);
+  EXPECT_LT(e1_v1_0_0_r2, e1_v1_0_1_r1);
+  EXPECT_LT(e1_v1_0_1_r1, e2_v1_0_0);
+
+  // alpha, beta
+  EXPECT_LT(v1_0_0_beta, v1_0_0);
+  EXPECT_LT(v1_0_0_alpha, v1_0_0);
+  EXPECT_LT(v1_0_0_alpha, v1_0_0_beta);
+  EXPECT_LT(v1_0_0_alpha, v1_0_0_alpha2);
+  EXPECT_LT(v1_0_0_alpha, v1_0_0_alpha3);
+  EXPECT_LT(v1_0_0_alpha, v1_0_0_alpha10);
+  EXPECT_LT(v1_0_0_alpha2, v1_0_0);
+  EXPECT_LT(v1_0_0_alpha2, v1_0_0_beta);
+  EXPECT_LT(v1_0_0_alpha2, v1_0_0_alpha3);
+  EXPECT_LT(v1_0_0_alpha2, v1_0_0_alpha10);
+  EXPECT_LT(v1_0_0_alpha3, v1_0_0);
+  EXPECT_LT(v1_0_0_alpha3, v1_0_0_beta);
+  EXPECT_LT(v1_0_0_alpha3, v1_0_0_alpha10);
+  EXPECT_LT(v1_0_0_alpha10, v1_0_0);
+  EXPECT_LT(v1_0_0_alpha10, v1_0_0_beta);
+}