--- title: Vaadin Libraries order: 20 layout: page --- [[getting-started.libraries]] = Vaadin Libraries Vaadin Framework comes as a set of library JARs, of which some are optional or alternative ones, depending on whether you are developing server-side or client-side applications, whether you use add-on components, or use CSS or Sass themes. [filename]#vaadin-server-8.x.x.jar#:: The main library for developing server-side Vaadin applications, as described in <>. It requires the [filename]#vaadin-shared# and the [filename]#vaadin-themes# libraries. You can use the pre-built [filename]#vaadin-client-compiled# for server-side development, unless you need add-on components or custom widgets. [filename]#vaadin-themes-8.x.x.jar#:: Vaadin Framework built-in themes both as SCSS source files and precompiled CSS files. The library is required both for basic use with CSS themes and for compiling custom Sass themes. [filename]#vaadin-push-8.x.x.jar#:: The implementation of server push for Vaadin Framework. This is needed for web applications which use server push (e.g. using the @Push annotation in a Servlet class). [filename]#vaadin-shared-8.x.x.jar#:: A shared library for server-side and client-side development. It is always needed. [filename]#vaadin-client-compiled-8.x.x.jar#:: A pre-compiled Vaadin Client-Side Engine (widget set) that includes all the basic built-in widgets in Vaadin. This library is not needed if you compile the application widget set with the Vaadin Client Compiler. [filename]#vaadin-client-8.x.x.jar#:: The client-side Vaadin Framework, including the basic GWT API and Vaadin-specific widgets and other additions. It is required when using the [filename]#vaadin-client-compiler# to compile client-side modules. It is not needed if you just use the server-side framework with the pre-compiled Client-Side Engine. You should not deploy it with a web application. [filename]#vaadin-client-compiler-8.x.x.jar#:: The Vaadin Client Compiler is a Java-to-JavaScript compiler that allows building client-side modules, such as the Client-Side Engine (widget set) required for server-side applications. The compiler is needed, for example, for compiling add-on components to the application widget set, as described in <>. + For detailed information regarding the compiler, see <>. Note that you should not deploy this library with a web application. [filename]#vaadin-compatibility-*-8.x.x.jar#:: The Vaadin Framework 7 compatibility packages contain the components and themes that are present in framework version 7, but not in version 8. These packages exist for making it easier to migrate from version 7 to 8. There is a compatibility package for everything except [filename]#vaadin-client-compiler#. Some of the libraries depend on each other, for instance [filename]#vaadin-shared# is included as a dependency of [filename]#vaadin-server#. The different ways to install the libraries are described in the subsequent sections. Note that the [filename]#vaadin-client-compiler# and [filename]#vaadin-client# JARs should not be deployed with the web application. The Maven scope [filename]#provided# can be used. Some other libraries, such as [filename]#vaadin-sass-compiler#, are not needed in production deployment. lder'>appStoreCacheFolder Nextcloud server, a safe home for all your data: https://github.com/nextcloud/serverwww-data
summaryrefslogtreecommitdiffstats
blob: 595a556a9a8c13185c4e05fd06fb142a9af49edb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
<?php

/**
 * ownCloud - App Framework
 *
 * @author Bernhard Posselt
 * @copyright 2012 Bernhard Posselt <dev@bernhard-posselt.com>
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
 * License as published by the Free Software Foundation; either
 * version 3 of the License, or any later version.
 *
 * This library 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 AFFERO GENERAL PUBLIC LICENSE for more details.
 *
 * You should have received a copy of the GNU Affero General Public
 * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
 *
 */

namespace Test\AppFramework;

use OC\AppFramework\App;
use OC\AppFramework\Http\Dispatcher;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\Response;

function rrmdir($directory) {
	$files = array_diff(scandir($directory), ['.','..']);
	foreach ($files as $file) {
		if (is_dir($directory . '/' . $file)) {
			rrmdir($directory . '/' . $file);
		} else {
			unlink($directory . '/' . $file);
		}
	}
	return rmdir($directory);
}


class AppTest extends \Test\TestCase {
	private $container;
	private $io;
	private $api;
	private $controller;
	private $dispatcher;
	private $params;
	private $headers;
	private $output;
	private $controllerName;
	private $controllerMethod;
	private $appPath;

	protected function setUp(): void {
		parent::setUp();

		$this->container = new \OC\AppFramework\DependencyInjection\DIContainer('test', []);
		$this->controller = $this->createMock(Controller::class);
		$this->dispatcher = $this->createMock(Dispatcher::class);
		$this->io = $this->createMock(Http\IOutput::class);

		$this->headers = ['key' => 'value'];
		$this->output = 'hi';
		$this->controllerName = 'Controller';
		$this->controllerMethod = 'method';

		$this->container[$this->controllerName] = $this->controller;
		$this->container['Dispatcher'] = $this->dispatcher;
		$this->container['OCP\\AppFramework\\Http\\IOutput'] = $this->io;
		$this->container['urlParams'] = [];

		$this->appPath = __DIR__ . '/../../../apps/namespacetestapp';
		$infoXmlPath = $this->appPath . '/appinfo/info.xml';
		mkdir($this->appPath . '/appinfo', 0777, true);

		$xml = '<?xml version="1.0" encoding="UTF-8"?>' .
		'<info>' .
			'<id>namespacetestapp</id>' .
			'<namespace>NameSpaceTestApp</namespace>' .
		'</info>';
		file_put_contents($infoXmlPath, $xml);
	}


	public function testControllerNameAndMethodAreBeingPassed() {
		$return = ['HTTP/2.0 200 OK', [], [], null, new Response()];
		$this->dispatcher->expects($this->once())
			->method('dispatch')
			->with($this->equalTo($this->controller),
				$this->equalTo($this->controllerMethod))
			->willReturn($return);

		$this->io->expects($this->never())
			->method('setOutput');

		App::main($this->controllerName, $this->controllerMethod,
			$this->container);
	}


	public function testBuildAppNamespace() {
		$ns = App::buildAppNamespace('someapp');
		$this->assertEquals('OCA\Someapp', $ns);
	}


	public function testBuildAppNamespaceCore() {
		$ns = App::buildAppNamespace('someapp', 'OC\\');
		$this->assertEquals('OC\Someapp', $ns);
	}


	public function testBuildAppNamespaceInfoXml() {
		$ns = App::buildAppNamespace('namespacetestapp', 'OCA\\');
		$this->assertEquals('OCA\NameSpaceTestApp', $ns);
	}


	protected function tearDown(): void {
		rrmdir($this->appPath);
		parent::tearDown();
	}


	public function testOutputIsPrinted() {
		$return = ['HTTP/2.0 200 OK', [], [], $this->output, new Response()];
		$this->dispatcher->expects($this->once())
			->method('dispatch')
			->with($this->equalTo($this->controller),
				$this->equalTo($this->controllerMethod))
			->willReturn($return);
		$this->io->expects($this->once())
			->method('setOutput')
			->with($this->equalTo($this->output));
		App::main($this->controllerName, $this->controllerMethod, $this->container, []);
	}

	public function dataNoOutput() {
		return [
			['HTTP/2.0 204 No content'],
			['HTTP/2.0 304 Not modified'],
		];
	}

	/**
	 * @dataProvider dataNoOutput
	 */
	public function testNoOutput(string $statusCode) {
		$return = [$statusCode, [], [], $this->output, new Response()];
		$this->dispatcher->expects($this->once())
			->method('dispatch')
			->with($this->equalTo($this->controller),
				$this->equalTo($this->controllerMethod))
			->willReturn($return);
		$this->io->expects($this->once())
			->method('setHeader')
			->with($this->equalTo($statusCode));
		$this->io->expects($this->never())
			->method('setOutput');
		App::main($this->controllerName, $this->controllerMethod, $this->container, []);
	}


	public function testCallbackIsCalled() {
		$mock = $this->getMockBuilder('OCP\AppFramework\Http\ICallbackResponse')
			->getMock();

		$return = ['HTTP/2.0 200 OK', [], [], $this->output, $mock];
		$this->dispatcher->expects($this->once())
			->method('dispatch')
			->with($this->equalTo($this->controller),
				$this->equalTo($this->controllerMethod))
			->willReturn($return);
		$mock->expects($this->once())
			->method('callback');
		App::main($this->controllerName, $this->controllerMethod, $this->container, []);
	}

	public function testCoreApp() {
		$this->container['AppName'] = 'core';
		$this->container['OC\Core\Controller\Foo'] = $this->controller;

		$return = ['HTTP/2.0 200 OK', [], [], null, new Response()];
		$this->dispatcher->expects($this->once())
			->method('dispatch')
			->with($this->equalTo($this->controller),
				$this->equalTo($this->controllerMethod))
			->willReturn($return);

		$this->io->expects($this->never())
			->method('setOutput');

		App::main('Foo', $this->controllerMethod, $this->container);
	}

	public function testSettingsApp() {
		$this->container['AppName'] = 'settings';
		$this->container['OCA\Settings\Controller\Foo'] = $this->controller;

		$return = ['HTTP/2.0 200 OK', [], [], null, new Response()];
		$this->dispatcher->expects($this->once())
			->method('dispatch')
			->with($this->equalTo($this->controller),
				$this->equalTo($this->controllerMethod))
			->willReturn($return);

		$this->io->expects($this->never())
			->method('setOutput');

		App::main('Foo', $this->controllerMethod, $this->container);
	}

	public function testApp() {
		$this->container['AppName'] = 'bar';
		$this->container['OCA\Bar\Controller\Foo'] = $this->controller;

		$return = ['HTTP/2.0 200 OK', [], [], null, new Response()];
		$this->dispatcher->expects($this->once())
			->method('dispatch')
			->with($this->equalTo($this->controller),
				$this->equalTo($this->controllerMethod))
			->willReturn($return);

		$this->io->expects($this->never())
			->method('setOutput');

		App::main('Foo', $this->controllerMethod, $this->container);
	}
}