[Sugar-devel] [PATCH sugar-toolkit-gtk3] Add tests for bundlebuilder

Daniel Narvaez dwnarvaez at gmail.com
Thu Dec 6 16:45:29 EST 2012


From: Daniel Narvaez <dwnarvaez at gmail.com>

---
 Makefile.am                                        |    8 +-
 tests/data/sample.activity/activity.py             |    8 +
 .../sample.activity/activity/activity-sample.svg   |   26 ++++
 tests/data/sample.activity/activity/activity.info  |    7 +
 tests/data/sample.activity/po/Sample.pot           |   26 ++++
 tests/data/sample.activity/po/es.po                |   26 ++++
 tests/data/sample.activity/setup.py                |    5 +
 tests/test_bundlebuilder.py                        |  164 ++++++++++++++++++++
 8 files changed, 269 insertions(+), 1 deletion(-)
 create mode 100644 tests/data/sample.activity/activity.py
 create mode 100644 tests/data/sample.activity/activity/activity-sample.svg
 create mode 100644 tests/data/sample.activity/activity/activity.info
 create mode 100644 tests/data/sample.activity/po/Sample.pot
 create mode 100644 tests/data/sample.activity/po/es.po
 create mode 100755 tests/data/sample.activity/setup.py
 create mode 100644 tests/test_bundlebuilder.py

diff --git a/Makefile.am b/Makefile.am
index f0366b4..b5693da 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,6 +1,9 @@
 ACLOCAL_AMFLAGS = -I m4
 DISTCHECK_CONFIGURE_FLAGS = --enable-introspection
 
+TESTS_TMPDIR=$(abs_builddir)/tests-tmp
+TESTS_PYTHONPATH=$(abs_srcdir)/src:$(PYTHONPATH)
+
 DISTCLEANFILES =		\
 	intltool-extract	\
 	intltool-merge		\
@@ -15,4 +18,7 @@ SUBDIRS = bin src po
 
 test:
 	cd $(top_srcdir)/tests && \
-	python -m unittest discover
+    mkdir -p $(TESTS_TMPDIR) && \
+    TMPDIR=$(TESTS_TMPDIR) PYTHONPATH=$(TESTS_PYTHONPATH) \
+    python -m unittest discover && \
+    rm -rf $(TESTS_TMPDIR)
diff --git a/tests/data/sample.activity/activity.py b/tests/data/sample.activity/activity.py
new file mode 100644
index 0000000..97d3c98
--- /dev/null
+++ b/tests/data/sample.activity/activity.py
@@ -0,0 +1,8 @@
+from gettext import gettext as _
+
+from sugar3.activity import activity
+
+class SampleActivity(activity.Activity):
+    def __init__(self, handle):
+        activity.Activity.__init__(self, handle)
+        self._text = _("Text string")
diff --git a/tests/data/sample.activity/activity/activity-sample.svg b/tests/data/sample.activity/activity/activity-sample.svg
new file mode 100644
index 0000000..8da7c63
--- /dev/null
+++ b/tests/data/sample.activity/activity/activity-sample.svg
@@ -0,0 +1,26 @@
+<?xml version="1.0" ?><!DOCTYPE svg  PUBLIC '-//W3C//DTD SVG 1.1//EN'  'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd' [
+	<!ENTITY stroke_color "#010101">
+	<!ENTITY fill_color "#FFFFFF">
+]>
+<svg enable-background="new 0 0 55 55" height="55px" version="1.1" viewBox="0 0 55 55" width="55px" x="0px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" y="0px">
+  <g display="block" id="activity-helloworld">
+    <path d="M9.263,48.396c0.682,1.152,6.027,0.059,8.246-1.463   c2.102-1.432,3.207-2.596,4.336-2.596c1.133,0,12.54,0.92,20.935-5.715c7.225-5.707,9.773-13.788,4.52-21.437   c-5.252-7.644-13.832-9.08-20.878-8.56C16.806,9.342,4.224,16.91,4.677,28.313c0.264,6.711,3.357,9.143,4.922,10.703   c1.562,1.566,4.545,1.566,2.992,5.588C11.981,46.183,8.753,47.522,9.263,48.396z" display="inline" fill="&fill_color;" stroke="&stroke_color;" stroke-width="3.5"/>
+  </g>
+  <circle cx="27.375" cy="27.5" r="19.903"
+     transform="matrix(0.6,0,0,0.6,10.95,11)"
+     id="circle4" fill="&fill_color;" stroke="&stroke_color;" stroke-width="3.5" display="inline" />
+  <g transform="matrix(0.6,0,0,0.6,10.95,11)" id="g6" style="display:inline">
+    <path d="m 27.376,7.598 c 0,0 -11.205,8.394 -11.205,19.976 0,11.583 11.205,19.829 11.205,19.829"
+       id="path8" fill="&fill_color;" stroke="&stroke_color;" stroke-width="3.5" />
+    <path d="m 27.376,7.598 c 0,0 11.066,9.141 11.066,19.976 0,10.839 -11.066,19.829 -11.066,19.829"
+       id="path10" fill="&fill_color;" stroke="&stroke_color;" stroke-width="3.5" />
+    <line x1="27.375999" x2="27.375999" y1="7.598" y2="47.402"
+       id="line12" fill="&fill_color;" stroke="&stroke_color;" stroke-width="3.5" />
+    <line x1="27.375999" x2="27.375999" y1="7.598" y2="47.402"
+       id="line14" fill="&fill_color;" stroke="&stroke_color;" stroke-width="3.5" />
+    <line x1="27.375999" x2="27.375999" y1="7.598" y2="47.402"
+       id="line16" fill="&fill_color;" stroke="&stroke_color;" stroke-width="3.5" />
+    <line x1="7.4720001" x2="47.278" y1="27.5" y2="27.5"
+       id="line18" fill="&fill_color;" stroke="&stroke_color;" stroke-width="3.5" />
+  </g>
+</svg>
diff --git a/tests/data/sample.activity/activity/activity.info b/tests/data/sample.activity/activity/activity.info
new file mode 100644
index 0000000..4cf7f75
--- /dev/null
+++ b/tests/data/sample.activity/activity/activity.info
@@ -0,0 +1,7 @@
+[Activity]
+name = Sample
+activity_version = 1
+bundle_id = org.sugarlabs.Sample
+exec = sugar-activity activity.SampleActivity
+icon = activity-sample
+license = GPLv2+
diff --git a/tests/data/sample.activity/po/Sample.pot b/tests/data/sample.activity/po/Sample.pot
new file mode 100644
index 0000000..0cee357
--- /dev/null
+++ b/tests/data/sample.activity/po/Sample.pot
@@ -0,0 +1,26 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-12-06 20:10+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: activity/activity.info:2
+msgid "Sample"
+msgstr ""
+
+#: activity.py:8
+msgid "Text string"
+msgstr ""
diff --git a/tests/data/sample.activity/po/es.po b/tests/data/sample.activity/po/es.po
new file mode 100644
index 0000000..a1a6adb
--- /dev/null
+++ b/tests/data/sample.activity/po/es.po
@@ -0,0 +1,26 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-12-06 20:10+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: activity/activity.info:2
+msgid "Sample"
+msgstr ""
+
+#: activity.py:8
+msgid "Text string"
+msgstr ""
diff --git a/tests/data/sample.activity/setup.py b/tests/data/sample.activity/setup.py
new file mode 100755
index 0000000..ad218b2
--- /dev/null
+++ b/tests/data/sample.activity/setup.py
@@ -0,0 +1,5 @@
+#!/usr/bin/env python
+
+from sugar3.activity import bundlebuilder
+
+bundlebuilder.start()
diff --git a/tests/test_bundlebuilder.py b/tests/test_bundlebuilder.py
new file mode 100644
index 0000000..687b8c6
--- /dev/null
+++ b/tests/test_bundlebuilder.py
@@ -0,0 +1,164 @@
+# Copyright (C) 2012, Daniel Narvaez
+#
+# 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 of the License, 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 this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+import os
+import unittest
+import shutil
+import subprocess
+import tempfile
+import tarfile
+import zipfile
+
+tests_dir = os.path.dirname(__file__)
+data_dir = os.path.join(tests_dir, "data")
+
+class TestGit(unittest.TestCase):
+    _source_files = ["activity.py",
+                     "setup.py",
+                     "po/Sample.pot",
+                     "po/es.po",
+                     "activity/activity.info",
+                     "activity/activity-sample.svg"]
+
+    _activity_locale_files = ["locale/es/activity.linfo"]
+
+    _share_locale_files = ["locale/es/LC_MESSAGES/org.sugarlabs.Sample.mo"]
+
+    def _create_repo(self):
+        cwd = os.getcwd()
+        path = tempfile.mkdtemp()
+        os.chdir(path)
+
+        subprocess.check_call(["git", "init"])
+        subprocess.check_call(["git", "config", "user.name", "Test Test"])
+        subprocess.check_call(["git", "config", "user.email", "test at test.org"])
+
+        for source in self._source_files:
+            source_path = os.path.join(data_dir, "sample.activity", source)
+            dest_path = os.path.join(path, source)
+
+            try:
+                os.makedirs(os.path.dirname(dest_path))
+            except OSError:
+                pass
+
+            shutil.copyfile(source_path, dest_path)
+            shutil.copymode(source_path, dest_path)
+
+            subprocess.check_call(["git", "add", source])
+
+        subprocess.check_call(["git", "commit", "-m", "Initial commit", "-a"])
+
+        os.chdir(cwd)
+
+        return path
+
+    def _strip_root_dir(self, paths):
+        return [path[path.find("/") + 1:] for path in paths]
+
+    def _test_dist_xo(self, source_path, build_path):
+        cwd = os.getcwd()
+        os.chdir(build_path)
+
+        setup_path = os.path.join(source_path, "setup.py")
+        subprocess.call([setup_path, "dist_xo"])
+
+        xo_path = os.path.join(build_path, "dist", "Sample-1.xo")
+        filenames = zipfile.ZipFile(xo_path).namelist()
+
+        stripped_filenames = self._strip_root_dir(filenames)
+        expected = self._source_files[:]
+        expected.extend(self._share_locale_files)
+        expected.extend(self._activity_locale_files)
+        self.assertItemsEqual(stripped_filenames, expected)
+
+        os.chdir(cwd)
+
+    def _test_dist_source(self, source_path, build_path):
+        cwd = os.getcwd()
+        os.chdir(build_path)
+
+        setup_path = os.path.join(source_path, "setup.py")
+        subprocess.call([setup_path, "dist_source"])
+
+        xo_path = os.path.join(build_path, "dist", "Sample-1.tar.bz2")
+        filenames = tarfile.open(name=xo_path, mode="r:bz2").getnames()
+
+        stripped_filenames = self._strip_root_dir(filenames)
+        self.assertItemsEqual(stripped_filenames, self._source_files)
+
+        os.chdir(cwd)
+
+    def _test_install(self, source_path, build_path):
+        install_path = tempfile.mkdtemp()
+
+        cwd = os.getcwd()
+        os.chdir(build_path)
+
+        setup_path = os.path.join(source_path, "setup.py")
+        subprocess.call([setup_path, "install", "--prefix", install_path])
+
+        filenames = []
+        activity_dir = os.path.join(install_path, "share",
+                                    "sugar", "activities", "Sample.activity")
+        for root, dirs, files in os.walk(activity_dir):
+            rel_root = root[len(activity_dir) + 1:]
+            filenames.extend([os.path.join(rel_root, name) for name in files])
+
+        expected = self._source_files[:]
+        expected.extend(self._activity_locale_files)
+
+        self.assertItemsEqual(filenames, expected)
+
+        filenames = []
+        share_dir = os.path.join(install_path, "share")
+        locale_dir = os.path.join(share_dir, "locale")
+        for root, dirs, files in os.walk(locale_dir):
+            rel_root = root[len(share_dir) + 1:]
+            for name in files:
+                if "org.sugarlabs.Sample" in name:
+                    filenames.append(os.path.join(rel_root, name))
+
+        self.assertItemsEqual(filenames, self._share_locale_files)
+
+        os.chdir(cwd)
+ 
+    def test_dist_xo_in_source(self):
+        repo_path = self._create_repo()
+        self._test_dist_xo(repo_path, repo_path)
+
+    def test_dist_xo_out_of_source(self):
+        repo_path = self._create_repo()
+        build_path = tempfile.mkdtemp()
+        self._test_dist_xo(repo_path, build_path)
+
+    def test_dist_source_in_source(self):
+        repo_path = self._create_repo()
+        self._test_dist_source(repo_path, repo_path)
+
+    def test_dist_source_out_of_source(self):
+        repo_path = self._create_repo()
+        build_path = tempfile.mkdtemp()
+        self._test_dist_source(repo_path, build_path)
+
+    def test_install_in_source(self):
+        repo_path = self._create_repo()
+        self._test_install(repo_path, repo_path)
+
+    def test_install_out_of_source(self):
+        repo_path = self._create_repo()
+        build_path = tempfile.mkdtemp()
+        self._test_install(repo_path, build_path)
-- 
1.7.10.4



More information about the Sugar-devel mailing list