@@ -1,157 +0,0 @@ | |||
# This file is licensed under the Affero General Public License version 3 or | |||
# later. See the COPYING file. | |||
# @author Bernhard Posselt <dev@bernhard-posselt.com> | |||
# @copyright Bernhard Posselt 2016 | |||
# Generic Makefile for building and packaging a Nextcloud app which uses npm and | |||
# Composer. | |||
# | |||
# Dependencies: | |||
# * make | |||
# * which | |||
# * curl: used if phpunit and composer are not installed to fetch them from the web | |||
# * tar: for building the archive | |||
# * npm: for building and testing everything JS | |||
# | |||
# If no composer.json is in the app root directory, the Composer step | |||
# will be skipped. The same goes for the package.json which can be located in | |||
# the app root or the js/ directory. | |||
# | |||
# The npm command by launches the npm build script: | |||
# | |||
# npm run build | |||
# | |||
# The npm test command launches the npm test script: | |||
# | |||
# npm run test | |||
# | |||
# The idea behind this is to be completely testing and build tool agnostic. All | |||
# build tools and additional package managers should be installed locally in | |||
# your project, since this won't pollute people's global namespace. | |||
# | |||
# The following npm scripts in your package.json install and update the bower | |||
# and npm dependencies and use gulp as build system (notice how everything is | |||
# run from the node_modules folder): | |||
# | |||
# "scripts": { | |||
# "test": "node node_modules/gulp-cli/bin/gulp.js karma", | |||
# "prebuild": "npm install && node_modules/bower/bin/bower install && node_modules/bower/bin/bower update", | |||
# "build": "node node_modules/gulp-cli/bin/gulp.js" | |||
# }, | |||
app_name=$(notdir $(CURDIR)) | |||
build_tools_directory=$(CURDIR)/build/tools | |||
source_build_directory=$(CURDIR)/build/artifacts/source | |||
source_package_name=$(source_build_directory)/$(app_name) | |||
appstore_build_directory=$(CURDIR)/build/artifacts/appstore | |||
appstore_package_name=$(appstore_build_directory)/$(app_name) | |||
npm=$(shell which npm 2> /dev/null) | |||
composer=$(shell which composer 2> /dev/null) | |||
all: build | |||
# Fetches the PHP and JS dependencies and compiles the JS. If no composer.json | |||
# is present, the composer step is skipped, if no package.json or js/package.json | |||
# is present, the npm step is skipped | |||
.PHONY: build | |||
build: | |||
ifneq (,$(wildcard $(CURDIR)/composer.json)) | |||
make composer | |||
endif | |||
ifneq (,$(wildcard $(CURDIR)/package.json)) | |||
make npm | |||
endif | |||
ifneq (,$(wildcard $(CURDIR)/js/package.json)) | |||
make npm | |||
endif | |||
# Installs and updates the composer dependencies. If composer is not installed | |||
# a copy is fetched from the web | |||
.PHONY: composer | |||
composer: | |||
ifeq (, $(composer)) | |||
@echo "No composer command available, downloading a copy from the web" | |||
mkdir -p $(build_tools_directory) | |||
curl -sS https://getcomposer.org/installer | php | |||
mv composer.phar $(build_tools_directory) | |||
php $(build_tools_directory)/composer.phar install --prefer-dist | |||
php $(build_tools_directory)/composer.phar update --prefer-dist | |||
else | |||
composer install --prefer-dist | |||
composer update --prefer-dist | |||
endif | |||
# Installs npm dependencies | |||
.PHONY: npm | |||
npm: | |||
ifeq (,$(wildcard $(CURDIR)/package.json)) | |||
cd js && $(npm) run build | |||
else | |||
npm run build | |||
endif | |||
# Removes the appstore build | |||
.PHONY: clean | |||
clean: | |||
rm -rf ./build | |||
# Same as clean but also removes dependencies installed by composer, bower and | |||
# npm | |||
.PHONY: distclean | |||
distclean: clean | |||
rm -rf vendor | |||
rm -rf node_modules | |||
rm -rf js/vendor | |||
rm -rf js/node_modules | |||
# Builds the source and appstore package | |||
.PHONY: dist | |||
dist: | |||
make source | |||
make appstore | |||
# Builds the source package | |||
.PHONY: source | |||
source: | |||
rm -rf $(source_build_directory) | |||
mkdir -p $(source_build_directory) | |||
tar cvzf $(source_package_name).tar.gz ../$(app_name) \ | |||
--exclude-vcs \ | |||
--exclude="../$(app_name)/build" \ | |||
--exclude="../$(app_name)/js/node_modules" \ | |||
--exclude="../$(app_name)/node_modules" \ | |||
--exclude="../$(app_name)/*.log" \ | |||
--exclude="../$(app_name)/js/*.log" \ | |||
# Builds the source package for the app store, ignores php and js tests | |||
.PHONY: appstore | |||
appstore: | |||
rm -rf $(appstore_build_directory) | |||
mkdir -p $(appstore_build_directory) | |||
tar cvzf $(appstore_package_name).tar.gz ../$(app_name) \ | |||
--exclude-vcs \ | |||
--exclude="../$(app_name)/build" \ | |||
--exclude="../$(app_name)/tests" \ | |||
--exclude="../$(app_name)/Makefile" \ | |||
--exclude="../$(app_name)/*.log" \ | |||
--exclude="../$(app_name)/phpunit*xml" \ | |||
--exclude="../$(app_name)/composer.*" \ | |||
--exclude="../$(app_name)/js/node_modules" \ | |||
--exclude="../$(app_name)/js/tests" \ | |||
--exclude="../$(app_name)/js/test" \ | |||
--exclude="../$(app_name)/js/*.log" \ | |||
--exclude="../$(app_name)/js/package.json" \ | |||
--exclude="../$(app_name)/js/bower.json" \ | |||
--exclude="../$(app_name)/js/karma.*" \ | |||
--exclude="../$(app_name)/js/protractor.*" \ | |||
--exclude="../$(app_name)/package.json" \ | |||
--exclude="../$(app_name)/bower.json" \ | |||
--exclude="../$(app_name)/karma.*" \ | |||
--exclude="../$(app_name)/protractor\.*" \ | |||
--exclude="../$(app_name)/.*" \ | |||
--exclude="../$(app_name)/js/.*" \ | |||
.PHONY: test | |||
test: composer | |||
$(CURDIR)/vendor/phpunit/phpunit/phpunit -c phpunit.xml | |||
$(CURDIR)/vendor/phpunit/phpunit/phpunit -c phpunit.integration.xml |
@@ -1,15 +0,0 @@ | |||
{ | |||
"name": "Memento", | |||
"description": "a", | |||
"type": "project", | |||
"license": "AGPL", | |||
"authors": [ | |||
{ | |||
"name": "a" | |||
} | |||
], | |||
"require": {}, | |||
"require-dev": { | |||
"phpunit/phpunit": "^5.4" | |||
} | |||
} |
@@ -1,3 +0,0 @@ | |||
#hello { | |||
color: red; | |||
} |
@@ -1,56 +0,0 @@ | |||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
<svg | |||
xmlns:dc="http://purl.org/dc/elements/1.1/" | |||
xmlns:cc="http://creativecommons.org/ns#" | |||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |||
xmlns:svg="http://www.w3.org/2000/svg" | |||
xmlns="http://www.w3.org/2000/svg" | |||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||
height="32" | |||
width="32" | |||
version="1" | |||
viewBox="0 0 32 32" | |||
id="svg4" | |||
sodipodi:docname="app.svg" | |||
inkscape:version="0.92.1 r"> | |||
<metadata | |||
id="metadata10"> | |||
<rdf:RDF> | |||
<cc:Work | |||
rdf:about=""> | |||
<dc:format>image/svg+xml</dc:format> | |||
<dc:type | |||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||
</cc:Work> | |||
</rdf:RDF> | |||
</metadata> | |||
<defs | |||
id="defs8" /> | |||
<sodipodi:namedview | |||
pagecolor="#ffffff" | |||
bordercolor="#666666" | |||
borderopacity="1" | |||
objecttolerance="10" | |||
gridtolerance="10" | |||
guidetolerance="10" | |||
inkscape:pageopacity="0" | |||
inkscape:pageshadow="2" | |||
inkscape:window-width="789" | |||
inkscape:window-height="480" | |||
id="namedview6" | |||
showgrid="false" | |||
inkscape:zoom="7.375" | |||
inkscape:cx="-8.3389831" | |||
inkscape:cy="16" | |||
inkscape:window-x="0" | |||
inkscape:window-y="27" | |||
inkscape:window-maximized="0" | |||
inkscape:current-layer="svg4" /> | |||
<path | |||
d="M13.733 0a.915.915 0 0 0-.933.934V3.6c-1.182.304-2.243.794-3.267 1.4L7.6 3.068a.93.93 0 0 0-1.334 0l-3.2 3.2a.93.93 0 0 0 0 1.334L5 9.535c-.607 1.024-1.097 2.085-1.4 3.267H.933a.915.915 0 0 0-.933.934v4.533c0 .53.403.934.933.934H3.6c.303 1.182.793 2.243 1.4 3.267l-1.934 1.935a.93.93 0 0 0 0 1.333l3.2 3.2a.93.93 0 0 0 1.333 0L9.532 27c1.024.61 2.085 1.097 3.266 1.4v2.667c0 .53.402.933.932.933h4.534c.53 0 .933-.403.933-.935V28.4c1.18-.305 2.24-.795 3.265-1.4L24.4 28.93a.93.93 0 0 0 1.332 0l3.2-3.2a.93.93 0 0 0 0-1.333L27 22.465c.607-1.024 1.096-2.085 1.4-3.266h2.665a.915.915 0 0 0 .935-.933v-4.534a.915.915 0 0 0-.934-.933H28.4c-.304-1.182-.792-2.243-1.4-3.267L28.932 7.6a.93.93 0 0 0 0-1.334l-3.2-3.2a.93.93 0 0 0-1.333 0L22.465 5c-1.024-.607-2.084-1.097-3.266-1.4V.933A.915.915 0 0 0 18.267 0zM16 8.87A7.134 7.134 0 0 1 23.13 16 7.134 7.134 0 0 1 16 23.133c-3.936 0-7.13-3.196-7.13-7.132S12.063 8.87 16 8.87z" | |||
display="block" | |||
fill="#fff" | |||
id="path2" | |||
style="fill:#ffffff" /> | |||
</svg> |
@@ -1,7 +0,0 @@ | |||
<phpunit bootstrap="tests/bootstrap.php" colors="true"> | |||
<testsuites> | |||
<testsuite name="integration"> | |||
<directory>./tests/Integration</directory> | |||
</testsuite> | |||
</testsuites> | |||
</phpunit> |
@@ -1,7 +0,0 @@ | |||
<phpunit bootstrap="tests/bootstrap.php" colors="true"> | |||
<testsuites> | |||
<testsuite name="unit"> | |||
<directory>./tests/Unit</directory> | |||
</testsuite> | |||
</testsuites> | |||
</phpunit> |
@@ -1 +0,0 @@ | |||
<h1>Hello world</h1> |
@@ -1,18 +0,0 @@ | |||
<?php | |||
script('memento', 'script'); | |||
style('memento', 'style'); | |||
?> | |||
<div id="app"> | |||
<div id="app-navigation"> | |||
<?php print_unescaped($this->inc('navigation/index')); ?> | |||
<?php print_unescaped($this->inc('settings/index')); ?> | |||
</div> | |||
<div id="app-content"> | |||
<div id="app-content-wrapper"> | |||
<?php print_unescaped($this->inc('content/index')); ?> | |||
</div> | |||
</div> | |||
</div> | |||
@@ -1,10 +0,0 @@ | |||
<ul> | |||
<li><a href="#">First level entry</a></li> | |||
<li> | |||
<a href="#">First level container</a> | |||
<ul> | |||
<li><a href="#">Second level entry</a></li> | |||
<li><a href="#">Second level entry</a></li> | |||
</ul> | |||
</li> | |||
</ul> |
@@ -1,10 +0,0 @@ | |||
<div id="app-settings"> | |||
<div id="app-settings-header"> | |||
<button class="settings-button" | |||
data-apps-slide-toggle="#app-settings-content" | |||
></button> | |||
</div> | |||
<div id="app-settings-content"> | |||
<!-- Your settings in here --> | |||
</div> | |||
</div> |
@@ -1,29 +0,0 @@ | |||
<?php | |||
namespace OCA\Memento\Tests\Integration\Controller; | |||
use OCP\AppFramework\App; | |||
use Test\TestCase; | |||
/** | |||
* This test shows how to make a small Integration Test. Query your class | |||
* directly from the container, only pass in mocks if needed and run your tests | |||
* against the database | |||
*/ | |||
class AppTest extends TestCase { | |||
private $container; | |||
public function setUp() { | |||
parent::setUp(); | |||
$app = new App('memento'); | |||
$this->container = $app->getContainer(); | |||
} | |||
public function testAppInstalled() { | |||
$appManager = $this->container->query('OCP\App\IAppManager'); | |||
$this->assertTrue($appManager->isInstalled('memento')); | |||
} | |||
} |
@@ -1,31 +0,0 @@ | |||
<?php | |||
namespace OCA\Memento\Tests\Unit\Controller; | |||
use PHPUnit_Framework_TestCase; | |||
use OCP\AppFramework\Http\TemplateResponse; | |||
use OCA\Memento\Controller\PageController; | |||
class PageControllerTest extends PHPUnit_Framework_TestCase { | |||
private $controller; | |||
private $userId = 'john'; | |||
public function setUp() { | |||
$request = $this->getMockBuilder('OCP\IRequest')->getMock(); | |||
$this->controller = new PageController( | |||
'memento', $request, $this->userId | |||
); | |||
} | |||
public function testIndex() { | |||
$result = $this->controller->index(); | |||
$this->assertEquals('index', $result->getTemplateName()); | |||
$this->assertTrue($result instanceof TemplateResponse); | |||
} | |||
} |
@@ -1,19 +0,0 @@ | |||
<?php | |||
if (!defined('PHPUNIT_RUN')) { | |||
define('PHPUNIT_RUN', 1); | |||
} | |||
require_once __DIR__.'/../../../lib/base.php'; | |||
// Fix for "Autoload path not allowed: .../tests/lib/testcase.php" | |||
\OC::$loader->addValidRoot(OC::$SERVERROOT . '/tests'); | |||
// Fix for "Autoload path not allowed: .../memento/tests/testcase.php" | |||
\OC_App::loadApp('memento'); | |||
if(!class_exists('PHPUnit_Framework_TestCase')) { | |||
require_once('PHPUnit/Autoload.php'); | |||
} | |||
OC_Hook::clear(); |