mirror of
https://github.com/Jermolene/TiddlyWiki5
synced 2024-12-28 02:50:27 +00:00
d3aca065ab
This is the beginnings of a new core plugin to add geospatial capabilities, building on the JSON operators that we now have in the core. It uses the libraries leaflet.js for mapping and turf.js for geospatial calculations.
94 lines
2.7 KiB
JavaScript
94 lines
2.7 KiB
JavaScript
/*\
|
|
title: $:/plugins/tiddlywiki/jasmine/run-wiki-based-tests.js
|
|
type: application/javascript
|
|
tags: [[$:/tags/test-spec]]
|
|
|
|
Tests the wiki based tests
|
|
|
|
\*/
|
|
(function(){
|
|
|
|
/*jslint node: true, browser: true */
|
|
/*global $tw: false */
|
|
"use strict";
|
|
|
|
var TEST_WIKI_TIDDLER_FILTER = "[all[tiddlers+shadows]type[text/vnd.tiddlywiki-multiple]tag[$:/tags/wiki-test-spec]]";
|
|
|
|
var widget = require("$:/core/modules/widgets/widget.js");
|
|
|
|
describe("Wiki-based tests", function() {
|
|
|
|
// Step through the test tiddlers
|
|
var tests = $tw.wiki.filterTiddlers(TEST_WIKI_TIDDLER_FILTER);
|
|
$tw.utils.each(tests,function(title) {
|
|
var tiddler = $tw.wiki.getTiddler(title);
|
|
it(tiddler.fields.title + ": " + tiddler.fields.description, function() {
|
|
// Add our tiddlers
|
|
var wiki = new $tw.Wiki();
|
|
wiki.addTiddlers(readMultipleTiddlersTiddler(title));
|
|
// Complain if we don't have the ouput and expected results
|
|
if(!wiki.tiddlerExists("Output")) {
|
|
throw "Missing 'Output' tiddler";
|
|
}
|
|
if(!wiki.tiddlerExists("ExpectedResult")) {
|
|
throw "Missing 'ExpectedResult' tiddler";
|
|
}
|
|
// Construct the widget node
|
|
var text = "{{Output}}\n\n";
|
|
var widgetNode = createWidgetNode(parseText(text,wiki),wiki);
|
|
// Render the widget node to the DOM
|
|
var wrapper = renderWidgetNode(widgetNode);
|
|
// Clear changes queue
|
|
wiki.clearTiddlerEventQueue();
|
|
// Run the actions if provided
|
|
if(wiki.tiddlerExists("Actions")) {
|
|
widgetNode.invokeActionString(wiki.getTiddlerText("Actions"));
|
|
refreshWidgetNode(widgetNode,wrapper);
|
|
}
|
|
// Test the rendering
|
|
expect(wrapper.innerHTML).toBe(wiki.getTiddlerText("ExpectedResult"));
|
|
});
|
|
});
|
|
|
|
function readMultipleTiddlersTiddler(title) {
|
|
var rawTiddlers = $tw.wiki.getTiddlerText(title).split("\n+\n");
|
|
var tiddlers = [];
|
|
$tw.utils.each(rawTiddlers,function(rawTiddler) {
|
|
var fields = Object.create(null),
|
|
split = rawTiddler.split(/\r?\n\r?\n/mg);
|
|
if(split.length >= 1) {
|
|
fields = $tw.utils.parseFields(split[0],fields);
|
|
}
|
|
if(split.length >= 2) {
|
|
fields.text = split.slice(1).join("\n\n");
|
|
}
|
|
tiddlers.push(fields);
|
|
});
|
|
return tiddlers;
|
|
}
|
|
|
|
function createWidgetNode(parser,wiki) {
|
|
return wiki.makeWidget(parser);
|
|
}
|
|
|
|
function parseText(text,wiki,options) {
|
|
return wiki.parseText("text/vnd.tiddlywiki",text,options);
|
|
}
|
|
|
|
function renderWidgetNode(widgetNode) {
|
|
$tw.fakeDocument.setSequenceNumber(0);
|
|
var wrapper = $tw.fakeDocument.createElement("div");
|
|
widgetNode.render(wrapper,null);
|
|
// console.log(require("util").inspect(wrapper,{depth: 8}));
|
|
return wrapper;
|
|
}
|
|
|
|
function refreshWidgetNode(widgetNode,wrapper) {
|
|
widgetNode.refresh(widgetNode.wiki.changedTiddlers,wrapper);
|
|
// console.log(require("util").inspect(wrapper,{depth: 8}));
|
|
}
|
|
|
|
});
|
|
|
|
})();
|