Add tests for bundlebuilder
This commit is contained in:
parent
148655635f
commit
f66fbe4c08
@ -1,6 +1,9 @@
|
|||||||
ACLOCAL_AMFLAGS = -I m4
|
ACLOCAL_AMFLAGS = -I m4
|
||||||
DISTCHECK_CONFIGURE_FLAGS = --enable-introspection
|
DISTCHECK_CONFIGURE_FLAGS = --enable-introspection
|
||||||
|
|
||||||
|
TESTS_TMPDIR=$(abs_builddir)/tests-tmp
|
||||||
|
TESTS_PYTHONPATH=$(abs_srcdir)/src:$(PYTHONPATH)
|
||||||
|
|
||||||
DISTCLEANFILES = \
|
DISTCLEANFILES = \
|
||||||
intltool-extract \
|
intltool-extract \
|
||||||
intltool-merge \
|
intltool-merge \
|
||||||
@ -17,4 +20,7 @@ check: test
|
|||||||
|
|
||||||
test:
|
test:
|
||||||
cd $(top_srcdir)/tests && \
|
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)
|
||||||
|
@ -4,3 +4,4 @@
|
|||||||
src/sugar3/eggdesktopfile.c
|
src/sugar3/eggdesktopfile.c
|
||||||
src/sugar3/eggsmclient.c
|
src/sugar3/eggsmclient.c
|
||||||
src/sugar3/gsm-xsmp.c
|
src/sugar3/gsm-xsmp.c
|
||||||
|
tests/data/sample.activity/activity.py
|
||||||
|
8
tests/data/sample.activity/activity.py
Normal file
8
tests/data/sample.activity/activity.py
Normal file
@ -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")
|
26
tests/data/sample.activity/activity/activity-sample.svg
Normal file
26
tests/data/sample.activity/activity/activity-sample.svg
Normal file
@ -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>
|
After Width: | Height: | Size: 2.1 KiB |
7
tests/data/sample.activity/activity/activity.info
Normal file
7
tests/data/sample.activity/activity/activity.info
Normal file
@ -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+
|
26
tests/data/sample.activity/po/Sample.pot
Normal file
26
tests/data/sample.activity/po/Sample.pot
Normal file
@ -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@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@ADDRESS>\n"
|
||||||
|
"Language-Team: LANGUAGE <LL@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 ""
|
26
tests/data/sample.activity/po/es.po
Normal file
26
tests/data/sample.activity/po/es.po
Normal file
@ -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@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@ADDRESS>\n"
|
||||||
|
"Language-Team: LANGUAGE <LL@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 ""
|
5
tests/data/sample.activity/setup.py
Executable file
5
tests/data/sample.activity/setup.py
Executable file
@ -0,0 +1,5 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
from sugar3.activity import bundlebuilder
|
||||||
|
|
||||||
|
bundlebuilder.start()
|
164
tests/test_bundlebuilder.py
Normal file
164
tests/test_bundlebuilder.py
Normal file
@ -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@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)
|
Loading…
Reference in New Issue
Block a user