MINOR: update references to sapphiredocs to docviewer. ENHANCEMENT: introduce DOCVIEWER_PATH and DOCVIEWER_DIR consts

This commit is contained in:
Will Rossiter 2012-04-08 21:23:49 +12:00
parent 4a40b51ab2
commit 34d46b7a5b
23 changed files with 276 additions and 217 deletions

View File

@ -3,7 +3,7 @@
## Maintainer Contact
* Will Rossiter (Nickname: willr, wrossiter)
<will@silverstripe.com>
<will@fullscreen.io>
## Requirements
@ -11,57 +11,13 @@
## Summary
Reads markdown documentation files from the /docs/ folder in . To read documentation go to yoursite.com/dev/docs/.
Reads text files from a given list of folders from your installation and
provides a web interface for viewing.
To read documentation go to yoursite.com/dev/docs/
For more documentation on how to use the module please read /docs/Writing-Documentation.md
(or via this in /dev/docs/sapphiredocs/Writing-Documentation in your webbrowser)
**Note** This module assumes you are using numeric values for your versions.
## Search ##
Search needs to be indexed manually with `dev/tasks/RebuildLuceneDocsIndex`.
## Syntax Highlighting ##
The custom Markdown parser can render custom prefixes for code blocks,
and render it via a [javascript syntax highlighter](http://alexgorbatchev.com/SyntaxHighlighter).
In:
:::php
my sourcecode
Out:
<pre class="brush: php">
my sourcecode
</pre>
To include the syntax highlighter source, add the following to your `DocumentationViewer->init()`:
Requirements::javascript(THIRDPARTY_DIR .'/jquery/jquery.js');
Requirements::javascript('sapphiredocs/thirdparty/syntaxhighlighter/scripts/shCore.js');
Requirements::javascript('sapphiredocs/thirdparty/syntaxhighlighter/scripts/shBrushJScript.js');
Requirements::javascript('sapphiredocs/thirdparty/syntaxhighlighter/scripts/shBrushPHP.js');
Requirements::javascript('sapphiredocs/thirdparty/syntaxhighlighter/scripts/shBrushXML.js');
// ... any additional syntaxes you want to support
Requirements::combine_files(
'syntaxhighlighter.js',
array(
'sapphiredocs/thirdparty/syntaxhighlighter/scripts/shCore.js',
'sapphiredocs/thirdparty/syntaxhighlighter/scripts/shBrushJScript.js',
'sapphiredocs/thirdparty/syntaxhighlighter/scripts/shBrushPHP.js',
'sapphiredocs/thirdparty/syntaxhighlighter/scripts/shBrushXML.js'
)
);
Requirements::javascript('sapphiredocs/javascript/DocumentationViewer.js');
// css
Requirements::css('sapphiredocs/thirdparty/syntaxhighlighter/styles/shCore.css');
Requirements::css('sapphiredocs/thirdparty/syntaxhighlighter/styles/shCoreDefault.css');
Requirements::css('sapphiredocs/thirdparty/syntaxhighlighter/styles/shThemeRDark.css');
You can overload the `DocumentationViewer` class and add a custom route through `Director::addRule()`
if you prefer not to modify the module file.

View File

@ -1,12 +1,20 @@
<?php
/**
* Documentation Configuration
*
* Please override any of these options in your own projects _config.php file.
* For more information and documentation see sapphiredocs/docs/en
* For more information and documentation see docviewer/docs/en
*/
if(!defined('DOCVIEWER_PATH')) {
define('DOCVIEWER_PATH', dirname(__FILE__));
}
if(!defined('DOCVIEWER_DIR')) {
define('DOCVIEWER_DIR', array_pop(explode(DIRECTORY_SEPARATOR, DOCVIEWER_PATH)));
}
// default location for documentation. If you want this under a custom url
// define your own rule in your mysite/_config.php
Director::addRules(100, array(

View File

@ -3,7 +3,7 @@
/**
* Parser wrapping the Markdown Extra parser (see http://michelf.com/projects/php-markdown/extra/).
*
* @package sapphiredocs
* @package docviewer
*/
class DocumentationParser {
@ -15,9 +15,10 @@ class DocumentationParser {
static $heading_counts = array();
/**
* Parse a given path to the documentation for a file. Performs a case insensitive
* lookup on the file system. Automatically appends the file extension to one of the markdown
* extensions as well so /install/ in a web browser will match /install.md or /INSTALL.md
* Parse a given path to the documentation for a file. Performs a case
* insensitive lookup on the file system. Automatically appends the file
* extension to one of the markdown extensions as well so /install/ in a
* web browser will match /install.md or /INSTALL.md
*
* Filepath: /var/www/myproject/src/cms/en/folder/subfolder/page.md
* URL: http://myhost/mywebroot/dev/docs/2.4/cms/en/folder/subfolder/page
@ -44,7 +45,7 @@ class DocumentationParser {
$md = self::rewrite_heading_anchors($md, $page);
$md = self::rewrite_code_blocks($md, $page);
require_once(BASE_PATH . '/sapphiredocs/thirdparty/markdown/markdown.php');
require_once(DOCVIEWER_PATH .'/thirdparty/markdown/markdown.php');
$parser = new MarkdownExtra_Parser();
$parser->no_markup = true;

View File

@ -1,12 +1,12 @@
<?php
/**
* A mapping store of given permalinks to the full documentation path or useful for customizing the
* shortcut URLs used in the viewer.
* A mapping store of given permalinks to the full documentation path or useful
* for customizing the shortcut URLs used in the viewer.
*
* Redirects the user from example.com/foo to example.com/en/module/foo
*
* @module sapphiredocs
* @package docviewer
*/
class DocumentationPermalinks {
@ -19,13 +19,14 @@ class DocumentationPermalinks {
/**
* Add a mapping of nice short permalinks to a full long path
*
* DocumentationPermalinks::add(array(
* 'debugging' => 'current/en/sapphire/topics/debugging'
* ));
* <code>
* DocumentationPermalinks::add(array(
* 'debugging' => 'current/en/sapphire/topics/debugging'
* ));
* </code>
*
*
* You do not need to include the language or the version current as it will add it
* based off the language or version in the session
* Do not need to include the language or the version current as it
* will add it based off the language or version in the session
*/
public static function add($map = array()) {
if(ArrayLib::is_associative($map)) {

View File

@ -1,23 +1,27 @@
<?php
/**
* Documentation Search powered by Lucene. You will need Zend_Lucene installed on your path
* to rebuild the indexes run the {@link RebuildLuceneDocsIndex} task. You may wish to setup
* a cron job to remake the indexes on a regular basis.
* Documentation Search powered by Lucene. You will need Zend_Lucene installed
* on your path.
*
* It has the ability to generate an OpenSearch RSS formatted feeds simply by using the URL
* To rebuild the indexes run the {@link RebuildLuceneDocsIndex} task. You may
* wish to setup a cron job to remake the indexes on a regular basis.
*
* This class has the ability to generate an OpenSearch RSS formatted feeds
* simply by using the URL:
*
* <code>
* yoursite.com/search/?q=Foo&format=rss. // Format can either be specified as rss or left off.
* </code>
*
* To get a specific amount of results you can also use the modifiers start and limit
* To get a specific amount of results you can also use the modifiers start and
* limit:
*
* <code>
* yoursite.com/search/?q=Foo&start=10&limit=10
* </code>
*
* @package sapphiredocs
* @package docviewer
*/
class DocumentationSearch {
@ -108,7 +112,7 @@ class DocumentationSearch {
*
* @var string
*/
private static $index_location = 'sapphiredocs';
private static $index_location;
/**
* Generate an array of every single documentation page installed on the system.
@ -178,7 +182,13 @@ class DocumentationSearch {
* @return string
*/
public function get_index_location() {
return TEMP_FOLDER . '/'. trim(self::$index_location, '/');
if(!self::$index_location)
self::$index_location = DOCVIEWER_DIR;
return Controller::join_links(
TEMP_FOLDER,
trim(self::$index_location, '/')
);
}
/**

View File

@ -4,10 +4,11 @@
* DocumentationService
*
* Handles the management of the documentation services delivered by the entity.
* Includes registering which components to document and handles the entities being
* documented
*
* @package sapphiredocs
* Includes registering which components to document and handles the entities being
* documented.
*
* @package docviewer
*/
class DocumentationService {
@ -28,7 +29,10 @@ class DocumentationService {
*
* @var array
*/
private static $ignored_files = array('.', '..', '.DS_Store', '.svn', '.git', 'assets', 'themes', '_images');
private static $ignored_files = array(
'.', '..', '.DS_Store',
'.svn', '.git', 'assets', 'themes', '_images'
);
/**
* Case insenstive values to use as extensions on markdown pages. The
@ -39,8 +43,12 @@ class DocumentationService {
public static $valid_markdown_extensions = array('md', 'txt', 'markdown');
/**
* Registered {@link DocumentationEntity} objects to include in the documentation.
* Either pre-filled by the automatic filesystem parser or via {@link DocumentationService::register()}.
* Registered {@link DocumentationEntity} objects to include in the
* documentation.
*
* Either pre-filled by the automatic filesystem parser or via
* {@link DocumentationService::register()}.
*
* Stores the {@link DocumentEntity} objects which contain the languages
* and versions of each entity.
*
@ -132,8 +140,8 @@ class DocumentationService {
}
/**
* Return the entities which are listed for documentation. Optionally only get
* entities which have a version or language given
* Return the entities which are listed for documentation. Optionally only
* get entities which have a version or language given.
*
* @return array
*/
@ -157,7 +165,7 @@ class DocumentationService {
}
/**
* Check to see if a entity is registered with the documenter
* Check to see if a entity is registered with the documenter.
*
* @param String $entity entity name
* @param String $version version
@ -250,7 +258,8 @@ class DocumentationService {
}
/**
* Register the docs from off a file system if automatic registration is turned on.
* Register the docs from off a file system if automatic registration is
* turned on.
*
* @see {@link DocumentationService::set_automatic_registration()}
*/
@ -294,8 +303,8 @@ class DocumentationService {
/**
* Find a documentation page given a path and a file name. It ignores the extensions
* and simply compares the title.
* Find a documentation page given a path and a file name. It ignores the
* extensions and simply compares the title.
*
* Name may also be a path /install/foo/bar.
*

View File

@ -4,7 +4,7 @@
* Public facing controller for handling an opensearch interface based on
* the standard search form.
*
* @package sapphiredocs
* @package docviewer
*/
class DocumentationOpenSearchController extends ContentController {

View File

@ -3,12 +3,13 @@
/**
* Documentation Viewer.
*
* Reads the bundled markdown files from documentation folders and displays the output (either
* via markdown or plain text)
* Reads the bundled markdown files from documentation folders and displays the
* output (either via markdown or plain text)
*
* For more documentation on how to use this class see the documentation in /sapphiredocs/docs folder
* For more documentation on how to use this class see the documentation in the
* docs folder
*
* @package sapphiredocs
* @package docviewer
*/
class DocumentationViewer extends Controller {
@ -35,6 +36,7 @@ class DocumentationViewer extends Controller {
/**
* The string name of the currently accessed {@link DocumentationEntity}
* object. To access the entire object use {@link getEntity()}
*
* @var string
*/
public $entity = '';
@ -59,41 +61,46 @@ class DocumentationViewer extends Controller {
if(!$this->canView()) return Security::permissionFailure($this);
// javascript
Requirements::javascript(THIRDPARTY_DIR .'/jquery/jquery.js');
Requirements::combine_files(
'syntaxhighlighter.js',
array(
'sapphiredocs/thirdparty/syntaxhighlighter/scripts/shCore.js',
'sapphiredocs/thirdparty/syntaxhighlighter/scripts/shBrushJScript.js',
'sapphiredocs/thirdparty/syntaxhighlighter/scripts/shBrushPhp.js',
'sapphiredocs/thirdparty/syntaxhighlighter/scripts/shBrushXml.js',
'sapphiredocs/thirdparty/syntaxhighlighter/scripts/shBrushCss.js',
'sapphiredocs/javascript/shBrushSS.js'
DOCVIEWER_DIR .'/thirdparty/syntaxhighlighter/scripts/shCore.js',
DOCVIEWER_DIR . '/thirdparty/syntaxhighlighter/scripts/shBrushJScript.js',
DOCVIEWER_DIR . '/thirdparty/syntaxhighlighter/scripts/shBrushPhp.js',
DOCVIEWER_DIR . '/thirdparty/syntaxhighlighter/scripts/shBrushXml.js',
DOCVIEWER_DIR . '/thirdparty/syntaxhighlighter/scripts/shBrushCss.js',
DOCVIEWER_DIR . '/javascript/shBrushSS.js'
)
);
Requirements::javascript('sapphiredocs/javascript/DocumentationViewer.js');
Requirements::javascript(DOCVIEWER_DIR .'/javascript/DocumentationViewer.js');
Requirements::css(DOCVIEWER_DIR .'/css/shSilverStripeDocs.css');
// css
Requirements::css('sapphiredocs/css/shSilverStripeDocs.css');
Requirements::customScript('jQuery(document).ready(function() {SyntaxHighlighter.all();});');
Requirements::css(DOCVIEWER_DIR .'/css/DocumentationViewer.css');
}
/**
* Can the user view this documentation. Hides all functionality for private wikis
* Can the user view this documentation. Hides all functionality for
* private wikis.
*
* @return bool
*/
public function canView() {
return (Director::isDev() || Director::is_cli() || !self::$check_permission || Permission::check(self::$check_permission));
return (Director::isDev() || Director::is_cli() ||
!self::$check_permission ||
Permission::check(self::$check_permission)
);
}
/**
* Overloaded to avoid "action doesn't exist" errors - all URL parts in this
* controller are virtual and handled through handleRequest(), not controller methods.
* Overloaded to avoid "action doesn't exist" errors - all URL parts in
* this controller are virtual and handled through handleRequest(), not
* controller methods.
*
* @param SS_HTTPRequest
*
* @return SS_HTTPResponse
*/
public function handleAction($request) {
try {
@ -123,7 +130,8 @@ class DocumentationViewer extends Controller {
*/
public function handleRequest(SS_HTTPRequest $request) {
// if we submitted a form, let that pass
if(!$request->isGET() || isset($_GET['action_results'])) return parent::handleRequest($request);
if(!$request->isGET() || isset($_GET['action_results']))
return parent::handleRequest($request);
$firstParam = ($request->param('Action')) ? $request->param('Action') : $request->shift();
$secondParam = $request->shift();

View File

@ -13,9 +13,11 @@
* Versions are assumed to be in numeric format (e.g. '2.4'),
*
* They're also parsed through version_compare() in {@link getStableVersion()}
* which assumes a certain format {@link http://php.net/manual/en/function.version-compare.php}
* which assumes a certain format:
*
* @package sapphiredocs
* @see http://php.net/manual/en/function.version-compare.php
*
* @package docviewer
* @subpackage models
*/

View File

@ -4,7 +4,7 @@
* A specific page within a {@link DocumentationEntity}. Maps 1 to 1 to a file on the
* filesystem.
*
* @package sapphiredocs
* @package docviewer
* @subpackage model
*/
class DocumentationPage extends ViewableData {

View File

@ -5,7 +5,7 @@
*
* For the hourly cron rebuild use RebuildLuceneDocusIndex_Hourly
*
* @package sapphiredocs
* @package docviewer
* @subpackage tasks
*/
@ -13,14 +13,15 @@ class RebuildLuceneDocsIndex extends BuildTask {
protected $title = "Rebuild Documentation Search Indexes";
protected $description = "Rebuilds the indexes used for the search engine in sapphiredocs. Gathers all documentation files from your modules";
protected $description = "
Rebuilds the indexes used for the search engine in the docviewer.";
function run($request) {
$this->rebuildIndexes();
}
function rebuildIndexes($quiet = false) {
require_once(BASE_PATH . '/sapphiredocs/thirdparty/markdown/markdown.php');
require_once(DOCVIEWER_PATH .'/thirdparty/markdown/markdown.php');
require_once 'Zend/Search/Lucene.php';
ini_set("memory_limit", -1);
@ -106,7 +107,7 @@ class RebuildLuceneDocsIndex extends BuildTask {
}
/**
* @package sapphiredocs
* @package docviewer
* @subpackage tasks
*/
class RebuildLuceneDocusIndex_Hourly extends HourlyTask {

View File

@ -0,0 +1,43 @@
# Syntax Highlighting
The custom Markdown parser can render custom prefixes for code blocks, and
render it via a [javascript syntax highlighter](http://alexgorbatchev.com/SyntaxHighlighter).
In:
:::php
my sourcecode
Out:
<pre class="brush: php">
my sourcecode
</pre>
To include the syntax highlighter source, add the following to your `DocumentationViewer->init()`:
Requirements::javascript(THIRDPARTY_DIR .'/jquery/jquery.js');
Requirements::javascript('sapphiredocs/thirdparty/syntaxhighlighter/scripts/shCore.js');
Requirements::javascript('sapphiredocs/thirdparty/syntaxhighlighter/scripts/shBrushJScript.js');
Requirements::javascript('sapphiredocs/thirdparty/syntaxhighlighter/scripts/shBrushPHP.js');
Requirements::javascript('sapphiredocs/thirdparty/syntaxhighlighter/scripts/shBrushXML.js');
// ... any additional syntaxes you want to support
Requirements::combine_files(
'syntaxhighlighter.js',
array(
'sapphiredocs/thirdparty/syntaxhighlighter/scripts/shCore.js',
'sapphiredocs/thirdparty/syntaxhighlighter/scripts/shBrushJScript.js',
'sapphiredocs/thirdparty/syntaxhighlighter/scripts/shBrushPHP.js',
'sapphiredocs/thirdparty/syntaxhighlighter/scripts/shBrushXML.js'
)
);
Requirements::javascript('sapphiredocs/javascript/DocumentationViewer.js');
// css
Requirements::css('sapphiredocs/thirdparty/syntaxhighlighter/styles/shCore.css');
Requirements::css('sapphiredocs/thirdparty/syntaxhighlighter/styles/shCoreDefault.css');
Requirements::css('sapphiredocs/thirdparty/syntaxhighlighter/styles/shThemeRDark.css');
You can overload the `DocumentationViewer` class and add a custom route through `Director::addRule()`
if you prefer not to modify the module file.

View File

@ -1,11 +1,7 @@
# Writing Documentation
Your documentation needs to go in the specific modules docs folder which it
refers mostly too. For example if you want to document a feature of your
custom module 'mymodule' you need to create markdown files in mymodule/docs/en/.
The files have to end with the __.md__ extension. The documentation viewer will
automatically replace hyphens (-) with spaces.
The files have to end with the __.md__ or __.markdown__ extension. The
documentation viewer will automatically replace hyphens (-) with spaces.
my-documentation-file.md
@ -60,7 +56,6 @@ default behaviour is to display an ordered list of links.
The table of contents on each module page is generated based on where and what
headers you use.
## Images and Files
If you want to attach images and other assets to a page you need to bundle those

View File

@ -1,38 +1,79 @@
# Sapphire Documentation Module
# Docviewer Module
This module has been developed to read and display content from markdown files in webbrowser. It is an easy
way to bundle end user documentation within a SilverStripe installation.
See [Writing Documentation](dev/docs/en/sapphiredocs/writing-documentation) for more information on how to write markdown files which
are available here.
To include your docs file here create a __docs/en/index.md__ file. You can also include custom paths and versions. To configure the documentation system the configuration information is available on the [Configurations](dev/docs/en/sapphiredocs/configuration-options)
page.
This module has been developed to read and display content from markdown and
plain text files in web browser. It provides an easy way to bundle end user
documentation within a SilverStripe installation or module.
## Setup
### Enabling Search
The module includes the ability to read documentation from any folder on your
file system. By standard, documentation should go in a __docs__ folder in the
root of your module or project documentation.
The module provides automatic search functionality via [Lucene Search](http://lucene.apache.org/java/docs/index.html). To enable search
you need to add the following to your applications _config.php file:
### Standard
If you follow the standard setup create a file in /<<module>>/__docs/_en/index.md__
file then include the following in your config file:
DocumentationService::set_automatic_registration(true);
Now visit yoursite.com/dev/docs you should see your module.
### Custom Folders
If you wish to register specific folders only, or folders in a non standard
location then you can register paths directly:
try {
DocumentationService::register(
$name = "sapphire",
$path = "/src/sapphire_master/docs/",
$version = 'trunk'
);
} catch(InvalidArgumentException $e) {
// Silence if path is not found (for CI environment)
}
To configure the documentation system the configuration information is
available on the [Configurations](dev/docs/en/docviewer/configuration-options)
page.
## Writing documentation
See [Writing Documentation](dev/docs/en/sapphiredocs/writing-documentation)
for more information on how to write markdown files which are available here.
## Enabling Search
The module provides automatic search functionality via [Lucene Search](http://lucene.apache.org/java/docs/index.html).
To enable search you need to add the following to your applications _config.php
file:
DocumentationSearch::enable();
After adding that line you will also need to build the indexes of the search. You can do this either via your web browser by accessing
After adding that line you will also need to build the indexes of the search.
You can do this either via your web browser by accessing
http://yoursite.com/dev/tasks/RebuildLuceneDocsIndex?flush=1
Or rebuild it via sake. You will want to set this up as a cron job if your documentation search needs to be updated on the fly
Or rebuild it via sake. You will want to set this up as a cron job if your
documentation search needs to be updated on the fly
sake dev/tasks/RebuildLuceneDocsIndex flush=1
### Using a URL other than /dev/docs/
## Using a URL other than /dev/docs/
By default, the documentation is available in `dev/docs`. If you want it to live on the webroot instead of a subfolder,
add the following configuration to your.
By default, the documentation is available in `dev/docs`. If you want it to
live on the webroot instead of a subfolder or on another url address, add the
following configuration to your _config.php file:
DocumentationViewer::set_link_base('');
Director::addRules(1, array(
'$Action' => 'DocumentationViewer',
'' => 'DocumentationViewer'

View File

@ -1,4 +1,4 @@
(function($) {
;(function($) {
$(document).ready(function() {
/** -----------------------------------------------
@ -52,8 +52,8 @@
$("#Form_LanguageForm select").change(function() {
$("#Form_LanguageForm").submit();
});
});
// Syntaxhighlighter defaults
SyntaxHighlighter.defaults.toolbar = false;
SyntaxHighlighter.defaults.toolbar = false;
SyntaxHighlighter.all();
});
})(jQuery);

View File

@ -5,11 +5,6 @@
<% base_tag %>
<meta charset="utf-8" />
<title>SilverStripe Documentation</title>
<% require themedCSS(DocumentationViewer) %>
<% require javascript(sapphire/thirdparty/jquery/jquery.js) %>
<% require javascript(sapphiredocs/javascript/DocumentationViewer.js) %>
</head>
<body>

View File

@ -1,11 +0,0 @@
Permission:
admin:
Code: ADMIN
Group:
admins:
Code: admins
Permissions: =>Permission.admin
Member:
admin:
Email: admin@test.com
Groups: =>Group.admins

View File

@ -1,11 +1,12 @@
<?php
/**
* @package sapphiredocs
* @package docviewer
* @subpackage tests
*/
class DocumentationEntityTest extends SapphireTest {
function testDocumentationEntityAccessing() {
$entity = new DocumentationEntity('docs', '1.0', '../sapphiredocs/tests/docs/', 'My Test');
$entity = new DocumentationEntity('docs', '1.0', DOCVIEWER_PATH .'/tests/docs/', 'My Test');
$this->assertEquals($entity->getTitle(), 'My Test');
$this->assertEquals($entity->getVersions(), array('1.0'));
@ -20,13 +21,13 @@ class DocumentationEntityTest extends SapphireTest {
}
function testgetStableVersion() {
$entity = new DocumentationEntity('docs', '1.0', '../sapphiredocs/tests/docs/', 'My Test');
$entity->addVersion('1.1', '../sapphiredocs/tests/docs-v2.4/');
$entity->addVersion('0.0', '../sapphiredocs/tests/docs-v3.0/');
$entity = new DocumentationEntity('docs', '1.0', DOCVIEWER_PATH. '/tests/docs/', 'My Test');
$entity->addVersion('1.1', DOCVIEWER_PATH. '/tests/docs-v2.4/');
$entity->addVersion('0.0', DOCVIEWER_PATH. '/tests/docs-v3.0/');
$this->assertEquals('1.1', $entity->getStableVersion(), 'Automatic version sorting');
$entity = new DocumentationEntity('docs', '1.0', '../sapphiredocs/tests/docs/', 'My Test');
$entity->addVersion('1.1.', '../sapphiredocs/tests/docs-v2.4/');
$entity = new DocumentationEntity('docs', '1.0', DOCVIEWER_PATH. '/tests/docs/', 'My Test');
$entity->addVersion('1.1.', DOCVIEWER_PATH .'/tests/docs-v2.4/');
$entity->setStableVersion('1.0');
$this->assertEquals('1.0', $entity->getStableVersion(), 'Manual setting');
}

View File

@ -1,14 +1,14 @@
<?php
/**
* @package sapphiredocs
* @package docviewer
* @subpackage tests
*/
class DocumentationPageTest extends SapphireTest {
function testGetLink() {
$entity = new DocumentationEntity('testmodule', null, BASE_PATH . '/sapphiredocs/tests/docs/');
$entity = new DocumentationEntity('testmodule', null, DOCVIEWER_PATH .'/tests/docs/');
$page = new DocumentationPage();
$page->setRelativePath('test.md');
@ -32,8 +32,8 @@ class DocumentationPageTest extends SapphireTest {
$this->assertStringEndsWith('testmodule/en/subfolder/subpage', $nested->Link());
// test with version.
$entity = DocumentationService::register("versionlinks", BASE_PATH . "/sapphiredocs/tests/docs-v2.4/", '1');
$entity->addVersion('2', BASE_PATH . "/sapphiredocs/tests/docs-v3.0/");
$entity = DocumentationService::register("versionlinks", DOCVIEWER_PATH ."/tests/docs-v2.4/", '1');
$entity->addVersion('2', DOCVIEWER_PATH ."/tests/docs-v3.0/");
$entity->setStableVersion('2');
$page = new DocumentationPage();
@ -47,19 +47,19 @@ class DocumentationPageTest extends SapphireTest {
function testGetRelativePath() {
$page = new DocumentationPage();
$page->setRelativePath('test.md');
$page->setEntity(new DocumentationEntity('mymodule', null, BASE_PATH . '/sapphiredocs/tests/docs/'));
$page->setEntity(new DocumentationEntity('mymodule', null, DOCVIEWER_PATH . '/tests/docs/'));
$this->assertEquals('test.md', $page->getRelativePath());
$page = new DocumentationPage();
$page->setRelativePath('subfolder/subpage.md');
$page->setEntity(new DocumentationEntity('mymodule', null, BASE_PATH . '/sapphiredocs/tests/docs/'));
$page->setEntity(new DocumentationEntity('mymodule', null, DOCVIEWER_PATH . '/tests/docs/'));
$this->assertEquals('subfolder/subpage.md', $page->getRelativePath());
}
function testGetPath() {
$absPath = BASE_PATH . '/sapphiredocs/tests/docs/';
$absPath = DOCVIEWER_PATH .'/tests/docs/';
$page = new DocumentationPage();
$page->setRelativePath('test.md');
$page->setEntity(new DocumentationEntity('mymodule', null, $absPath));
@ -74,7 +74,7 @@ class DocumentationPageTest extends SapphireTest {
}
function testGetBreadcrumbTitle() {
$entity = new DocumentationEntity('testmodule', null, BASE_PATH . '/sapphiredocs/tests/docs/');
$entity = new DocumentationEntity('testmodule', null, DOCVIEWER_PATH . '/tests/docs/');
$page = new DocumentationPage();
$page->setRelativePath('test.md');
@ -84,7 +84,7 @@ class DocumentationPageTest extends SapphireTest {
$page = new DocumentationPage();
$page->setRelativePath('subfolder/subpage.md');
$page->setEntity(new DocumentationEntity('mymodule', null, BASE_PATH . '/sapphiredocs/tests/docs/'));
$page->setEntity(new DocumentationEntity('mymodule', null, DOCVIEWER_PATH . '/tests/docs/'));
$this->assertEquals('Mymodule - Subfolder - Subpage', $page->getBreadcrumbTitle());
}

View File

@ -1,13 +1,13 @@
<?php
/**
* @package sapphiredocs
* @package docviewer
*/
class DocumentationParserTest extends SapphireTest {
function testRewriteCodeBlocks() {
$page = new DocumentationPage();
$page->setRelativePath('test.md');
$page->setEntity(new DocumentationEntity('mymodule', '2.4', BASE_PATH . '/sapphiredocs/tests/docs/'));
$page->setEntity(new DocumentationEntity('mymodule', '2.4', DOCVIEWER_PATH . '/tests/docs/'));
$page->setLang('en');
$page->setVersion('2.4');
$result = DocumentationParser::rewrite_code_blocks($page->getMarkdown());
@ -38,24 +38,24 @@ HTML;
// Page on toplevel
$page = new DocumentationPage();
$page->setRelativePath('subfolder/subpage.md');
$page->setEntity(new DocumentationEntity('mymodule', '2.4', BASE_PATH . '/sapphiredocs/tests/docs/'));
$page->setEntity(new DocumentationEntity('mymodule', '2.4', DOCVIEWER_PATH . '/tests/docs/'));
$page->setLang('en');
$page->setVersion('2.4');
$result = DocumentationParser::rewrite_image_links($page->getMarkdown(), $page, 'mycontroller/cms/2.4/en/');
$this->assertContains(
'[relative image link](' . Director::absoluteBaseURL() . '/sapphiredocs/tests/docs/en/subfolder/_images/image.png)',
'[relative image link](' . Director::absoluteBaseURL() .'/'. DOCVIEWER_DIR . '/tests/docs/en/subfolder/_images/image.png)',
$result
);
$this->assertContains(
'[parent image link](' . Director::absoluteBaseURL() . '/sapphiredocs/tests/docs/en/_images/image.png)',
'[parent image link](' . Director::absoluteBaseURL() . '/'. DOCVIEWER_DIR. '/tests/docs/en/_images/image.png)',
$result
);
// TODO Fix absolute image references
// $this->assertContains(
// '[absolute image link](' . Director::absoluteBaseURL() . '/sapphiredocs/tests/docs/en/_images/image.png)',
// $result
// '[absolute image link](' . Director::absoluteBaseURL() . '/'. DOCVIEWER_DIR. '/tests/docs/en/_images/image.png)',
// $result
// );
}
@ -63,7 +63,7 @@ HTML;
// Page on toplevel
$page = new DocumentationPage();
$page->setRelativePath('test.md');
$page->setEntity(new DocumentationEntity('mymodule', '2.4', BASE_PATH . '/sapphiredocs/tests/docs/'));
$page->setEntity(new DocumentationEntity('mymodule', '2.4', DOCVIEWER_PATH .'/tests/docs/'));
$page->setLang('en');
$page->setVersion('2.4');
@ -81,7 +81,7 @@ HTML;
function testHeadlineAnchors() {
$page = new DocumentationPage();
$page->setRelativePath('test.md');
$page->setEntity(new DocumentationEntity('mymodule', '2.4', BASE_PATH . '/sapphiredocs/tests/docs/'));
$page->setEntity(new DocumentationEntity('mymodule', '2.4', DOCVIEWER_PATH . '/tests/docs/'));
$page->setLang('en');
$page->setVersion('2.4');
@ -119,7 +119,7 @@ HTML;
// Page on toplevel
$page = new DocumentationPage();
$page->setRelativePath('test.md');
$page->setEntity(new DocumentationEntity('mymodule', '2.4', BASE_PATH . '/sapphiredocs/tests/docs/'));
$page->setEntity(new DocumentationEntity('mymodule', '2.4', DOCVIEWER_PATH . '/tests/docs/'));
$result = DocumentationParser::rewrite_relative_links($page->getMarkdown(), $page, 'mycontroller/cms/2.4/en/');
@ -147,7 +147,7 @@ HTML;
// Page in subfolder
$page = new DocumentationPage();
$page->setRelativePath('subfolder/subpage.md');
$page->setEntity(new DocumentationEntity('mymodule', '2.4', BASE_PATH . '/sapphiredocs/tests/docs/'));
$page->setEntity(new DocumentationEntity('mymodule', '2.4', DOCVIEWER_PATH . '/tests/docs/'));
$result = DocumentationParser::rewrite_relative_links($page->getMarkdown(), $page, 'mycontroller/cms/2.4/en/');
@ -180,7 +180,7 @@ HTML;
// Page in nested subfolder
$page = new DocumentationPage();
$page->setRelativePath('subfolder/subsubfolder/subsubpage.md');
$page->setEntity(new DocumentationEntity('mymodule', '2.4', BASE_PATH . '/sapphiredocs/tests/docs/'));
$page->setEntity(new DocumentationEntity('mymodule', '2.4', DOCVIEWER_PATH . '/tests/docs/'));
$result = DocumentationParser::rewrite_relative_links($page->getMarkdown(), $page, 'mycontroller/cms/2.4/en/');
@ -209,7 +209,7 @@ HTML;
function testRetrieveMetaData() {
$page = new DocumentationPage();
$page->setRelativePath('MetaDataTest.md');
$page->setEntity(new DocumentationEntity('parser', '2.4', BASE_PATH . '/sapphiredocs/tests/docs-parser/'));
$page->setEntity(new DocumentationEntity('parser', '2.4', DOCVIEWER_PATH . '/tests/docs-parser/'));
DocumentationParser::retrieve_meta_data($page);
@ -221,9 +221,9 @@ HTML;
function testParserConvertsSpecialCharacters() {
$page = new DocumentationPage();
$page->setRelativePath('CodeSnippets.md');
$page->setEntity(new DocumentationEntity('parser', '2.4', BASE_PATH . '/sapphiredocs/tests/docs-parser/'));
$page->setEntity(new DocumentationEntity('parser', '2.4', DOCVIEWER_PATH . '/tests/docs-parser/'));
$parsed = DocumentationParser::parse($page, '/sapphiredocs/tests/docs-parser/');
$parsed = DocumentationParser::parse($page, '/'.DOCVIEWER_DIR .'/tests/docs-parser/');
// header elements parsed
$this->assertContains(
@ -239,21 +239,21 @@ HTML;
}
function testRewritingRelativeLinksToFiles() {
$folder = '/sapphiredocs/tests/docs-parser/';
$folder = DOCVIEWER_PATH . '/tests/docs-parser/';
$page = new DocumentationPage();
$page->setRelativePath('file-download.md');
$page->setEntity(new DocumentationEntity('parser', '2.4', BASE_PATH . $folder));
$page->setEntity(new DocumentationEntity('parser', '2.4', $folder));
$parsed = DocumentationParser::parse($page, $folder);
$this->assertContains(
Controller::join_links($folder, '/en/_images/external_link.png'),
DOCVIEWER_DIR .'/tests/docs-parser/en/_images/external_link.png',
$parsed
);
$this->assertContains(
Controller::join_links($folder, '/en/_images/test.tar.gz'),
DOCVIEWER_DIR .'/tests/docs-parser/en/_images/test.tar.gz',
$parsed
);
}

View File

@ -1,7 +1,7 @@
<?php
/**
* @package sapphiredocs
* @package docviewer
* @subpackage tests
*/
@ -13,14 +13,14 @@ class DocumentationSearchTest extends FunctionalTest {
if(!DocumentationSearch::enabled()) return;
DocumentationService::set_automatic_registration(false);
DocumentationService::register('docs-search', BASE_PATH . '/sapphiredocs/tests/docs-search/');
DocumentationService::register('docs-search', DOCVIEWER_PATH . '/tests/docs-search/');
}
function testGetAllPages() {
if(!DocumentationSearch::enabled()) return;
DocumentationService::set_automatic_registration(false);
DocumentationService::register('docs-search', BASE_PATH . '/sapphiredocs/tests/docs-search/');
DocumentationService::register('docs-search', DOCVIEWER_PATH . '/tests/docs-search/');
$search = DocumentationSearch::get_all_documentation_pages();

View File

@ -1,14 +1,14 @@
<?php
/**
* @package sapphiredocs
* @package docviewer
* @subpackage tests
*/
class DocumentationServiceTest extends SapphireTest {
function testGetPagesFromFolder() {
$entity = DocumentationService::register('testdocs', BASE_PATH . '/sapphiredocs/tests/docs/');
$entity = DocumentationService::register('testdocs', DOCVIEWER_PATH . '/tests/docs/');
$pages = DocumentationService::get_pages_from_folder($entity);
$this->assertContains('index.md', $pages->column('Filename'), 'The tests/docs/en folder should contain a index file');
@ -28,7 +28,7 @@ class DocumentationServiceTest extends SapphireTest {
function testGetPagesFromFolderRecursive() {
$entity = DocumentationService::register('testdocsrecursive', BASE_PATH . '/sapphiredocs/tests/docs-recursive/');
$entity = DocumentationService::register('testdocsrecursive', DOCVIEWER_PATH . '/tests/docs-recursive/');
$pages = DocumentationService::get_pages_from_folder($entity, null, true);
@ -43,19 +43,19 @@ class DocumentationServiceTest extends SapphireTest {
}
function testFindPath() {
DocumentationService::register("DocumentationViewerTests", BASE_PATH . "/sapphiredocs/tests/docs/");
DocumentationService::register("DocumentationViewerTests", DOCVIEWER_PATH . "/tests/docs/");
// file
$path = DocumentationService::find_page('DocumentationViewerTests', array('test'));
$this->assertEquals(BASE_PATH . "/sapphiredocs/tests/docs/en/test.md", $path);
$this->assertEquals(DOCVIEWER_PATH . "/tests/docs/en/test.md", $path);
// the home page. The path finder should go to the index.md file in the default language
$path = DocumentationService::find_page('DocumentationViewerTests', array(''));
$this->assertEquals(BASE_PATH . "/sapphiredocs/tests/docs/en/index.md", $path);
$this->assertEquals(DOCVIEWER_PATH . "/tests/docs/en/index.md", $path);
// second level
$path = DocumentationService::find_page('DocumentationViewerTests', array('subfolder', 'subpage'));
$this->assertEquals(BASE_PATH . "/sapphiredocs/tests/docs/en/subfolder/subpage.md", $path);
$this->assertEquals(DOCVIEWER_PATH . "/tests/docs/en/subfolder/subpage.md", $path);
// subsubfolder has no index file. It should fail instead the viewer should pick up on this
// and display the listing of the folder
@ -64,11 +64,11 @@ class DocumentationServiceTest extends SapphireTest {
// third level
$path = DocumentationService::find_page('DocumentationViewerTests', array('subfolder', 'subsubfolder', 'subsubpage'));
$this->assertEquals(BASE_PATH . "/sapphiredocs/tests/docs/en/subfolder/subsubfolder/subsubpage.md", $path);
$this->assertEquals(DOCVIEWER_PATH . "/tests/docs/en/subfolder/subsubfolder/subsubpage.md", $path);
// with trailing slash
$path = DocumentationService::find_page('DocumentationViewerTests', array('subfolder', 'subsubfolder', 'subsubpage'));
$this->assertEquals(BASE_PATH . "/sapphiredocs/tests/docs/en/subfolder/subsubfolder/subsubpage.md", $path);
$this->assertEquals(DOCVIEWER_PATH . "/tests/docs/en/subfolder/subsubfolder/subsubpage.md", $path);
}

View File

@ -4,13 +4,12 @@
* Some of these tests are simply checking that pages load. They should not assume
* somethings working.
*
* @package sapphiredocs
* @package docviewer
* @subpackage tests
*/
class DocumentationViewerTest extends FunctionalTest {
static $fixture_file = 'sapphiredocs/tests/DocumentTests.yml';
protected $autoFollowRedirection = false;
function setUpOnce() {
@ -26,12 +25,12 @@ class DocumentationViewerTest extends FunctionalTest {
}
// We set 3.0 as current, and test most assertions against 2.4 - to avoid 'current' rewriting issues
DocumentationService::register("DocumentationViewerTests", BASE_PATH . "/sapphiredocs/tests/docs/", '2.3');
DocumentationService::register("DocumentationViewerTests", BASE_PATH . "/sapphiredocs/tests/docs-v2.4/", '2.4', 'Doc Test', true);
DocumentationService::register("DocumentationViewerTests", BASE_PATH . "/sapphiredocs/tests/docs-v3.0/", '3.0', 'Doc Test');
DocumentationService::register("DocumentationViewerTests", DOCVIEWER_PATH . "/tests/docs/", '2.3');
DocumentationService::register("DocumentationViewerTests", DOCVIEWER_PATH . "/tests/docs-v2.4/", '2.4', 'Doc Test', true);
DocumentationService::register("DocumentationViewerTests", DOCVIEWER_PATH . "/tests/docs-v3.0/", '3.0', 'Doc Test');
DocumentationService::register("DocumentationViewerAltModule1", BASE_PATH . "/sapphiredocs/tests/docs-parser/", '1.0');
DocumentationService::register("DocumentationViewerAltModule2", BASE_PATH . "/sapphiredocs/tests/docs-search/", '1.0');
DocumentationService::register("DocumentationViewerAltModule1", DOCVIEWER_PATH . "/tests/docs-parser/", '1.0');
DocumentationService::register("DocumentationViewerAltModule2", DOCVIEWER_PATH . "/tests/docs-search/", '1.0');
}
function tearDownOnce() {