@@ -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(); |