kopia lustrzana https://github.com/c9/core
534 wiersze
20 KiB
JavaScript
534 wiersze
20 KiB
JavaScript
var bar; // Intended global
|
|
|
|
require([
|
|
"lib/chai/chai",
|
|
"text!plugins/c9.ide.layout.classic/skins.xml",
|
|
"events",
|
|
"text!/static/standalone/skin/default/dark.css",
|
|
"lib/architect/architect"
|
|
], function (chai, skin, events, theme, architect) {
|
|
"use strict";
|
|
chai.Assertion.includeStack = true; // enable stack trace in errors
|
|
var expect = chai.expect;
|
|
var EventEmitter = events.EventEmitter;
|
|
|
|
function html(path, message) {
|
|
var htmlNode;
|
|
if (typeof path != "object" || !(path instanceof HTMLElement))
|
|
htmlNode = html.constr(path);
|
|
else
|
|
htmlNode = path;
|
|
var not = false;
|
|
|
|
function testOk(value) {
|
|
if (not)
|
|
expect(value, message || path).not.ok;
|
|
else
|
|
expect(value, message || path).ok;
|
|
not = false;
|
|
}
|
|
|
|
var obj = {
|
|
get is(){ return obj; },
|
|
get has(){ return obj; },
|
|
get have(){ return obj; },
|
|
get and(){ return obj; },
|
|
get to(){ return obj; },
|
|
get not(){ not = true; return obj; },
|
|
|
|
get ok(){ testOk(htmlNode); return obj; },
|
|
get exists(){ testOk(htmlNode); return obj; },
|
|
get exist(){ testOk(htmlNode); return obj; },
|
|
get node(){ return htmlNode },
|
|
|
|
get visible() {
|
|
testOk(htmlNode && (htmlNode.offsetWidth || htmlNode.offsetHeight));
|
|
return obj;
|
|
},
|
|
|
|
text: function(text) {
|
|
testOk(htmlNode.textContent.match(text));
|
|
return obj;
|
|
},
|
|
|
|
icon: function(icon) {
|
|
testOk(htmlNode.innerHTML.indexOf(icon) > -1);
|
|
return obj;
|
|
},
|
|
|
|
className: function(name) {
|
|
testOk(htmlNode.className.indexOf(name) > -1);
|
|
return obj;
|
|
},
|
|
child: function(query) {
|
|
if (typeof query == "number") {
|
|
if (query < 0)
|
|
query = htmlNode.children.length + query;
|
|
htmlNode = htmlNode.children[query];
|
|
} else {
|
|
htmlNode = htmlNode.querySelector(query);
|
|
}
|
|
return obj;
|
|
}
|
|
};
|
|
return obj;
|
|
}
|
|
expect.html = html;
|
|
expect.html.setConstructor = function(fn) {
|
|
html.constr = fn;
|
|
};
|
|
|
|
expect.html.mocked = function(options, imports, register) {
|
|
register(null, {
|
|
c9 : (function(){
|
|
var x = new EventEmitter();
|
|
x.location = "";
|
|
x.has = function(){ return false; };
|
|
x.toInternalPath = x.toExternalPath = function(p) {
|
|
return p;
|
|
};
|
|
x.connected = true;
|
|
return x;
|
|
})(),
|
|
vfs: (function(){
|
|
var x = new EventEmitter();
|
|
return x;
|
|
})(),
|
|
anims: (function(){
|
|
var x = new EventEmitter();
|
|
x.animateSplitBoxNode = function(node, opt) {
|
|
node.setAttribute("height", parseInt(opt.height, 10));
|
|
};
|
|
return x;
|
|
})(),
|
|
watcher: (function(){
|
|
var x = new EventEmitter();
|
|
x.watch = function(){};
|
|
x.unwatch = function(){};
|
|
x.check = function(){};
|
|
return x;
|
|
})(),
|
|
"watcher.gui": (function(){
|
|
var x = new EventEmitter();
|
|
return x;
|
|
})(),
|
|
save: (function(){
|
|
var x = new EventEmitter();
|
|
x.saveAll = function(c){ c(); };
|
|
x.getSavingState = function(tab) { return "saved"; };
|
|
return x;
|
|
})(),
|
|
findreplace: {
|
|
|
|
},
|
|
ace: (function() {
|
|
var x = new EventEmitter();
|
|
x.getElement = function(){};
|
|
return x;
|
|
})(),
|
|
css: {
|
|
get packed() { return true; },
|
|
get packedThemes() { return true; },
|
|
defineLessLibrary: function(){},
|
|
insert: function() {},
|
|
insertLess: function() {}
|
|
},
|
|
settings: (function(){
|
|
var obj = new EventEmitter();
|
|
obj.save = function(){};
|
|
obj.set = function(){};
|
|
obj.get = function(){};
|
|
obj.getNumber = function() {};
|
|
obj.emit("read", {});
|
|
return obj;
|
|
})(),
|
|
fs: (function(){
|
|
var obj = new EventEmitter();
|
|
obj.writeFile = function(){};
|
|
obj.watch = function(){};
|
|
return obj;
|
|
})(),
|
|
tooltip: {
|
|
add: function(){}
|
|
},
|
|
clipboard: (function(){
|
|
var cb = new EventEmitter();
|
|
cb.registerHandler = function(){};
|
|
return cb;
|
|
})(),
|
|
preferences: (function(){
|
|
var prefs = new EventEmitter();
|
|
prefs.add = function(){};
|
|
return prefs;
|
|
})(),
|
|
analytics: {
|
|
updateTraits: function() {}
|
|
},
|
|
commands: (function(){
|
|
var commands = {};
|
|
|
|
if (typeof apf != "undefined") {
|
|
apf.button.prototype.$propHandlers["command"] =
|
|
apf.item.prototype.$propHandlers["command"] = function(value) {
|
|
this.onclick = function(){
|
|
commands[value].exec(
|
|
apf.getPlugin("tabManager").focussedPage.editor
|
|
);
|
|
};
|
|
};
|
|
}
|
|
|
|
var c = new EventEmitter();
|
|
|
|
c.commands = commands;
|
|
c.addCommands = function(a, b, c) {
|
|
a.forEach(function(o) {
|
|
commands[o.name] = o;
|
|
});
|
|
};
|
|
c.addCommand = function(o) {
|
|
commands[o.name] = o;
|
|
};
|
|
c.removeCommand = function(o) {
|
|
delete commands[o.name];
|
|
};
|
|
c.exec = function(name) {
|
|
commands[name].exec();
|
|
};
|
|
c.getExceptionList = function(){ return []; };
|
|
|
|
return c;
|
|
})(),
|
|
log: {},
|
|
http: {},
|
|
ui: {},
|
|
api: {
|
|
stats: {
|
|
post: function(type, message, cb) {
|
|
cb && cb();
|
|
}
|
|
}
|
|
},
|
|
layout: (function(){
|
|
// Load the skin
|
|
if (imports.ui) {
|
|
var plugin = new imports.Plugin();
|
|
|
|
imports.ui.insertCss(theme, false, plugin);
|
|
|
|
imports.ui.insertSkin({
|
|
"data" : skin,
|
|
"media-path" : "plugins/c9.ide.layout.classic/images/",
|
|
"icon-path" : "plugins/c9.ide.layout.classic/icons/"
|
|
}, {addElement: function(){}});
|
|
|
|
document.documentElement.style.background = "white";
|
|
}
|
|
|
|
var layout = plugin || new EventEmitter();
|
|
|
|
layout.initMenus = function() {};
|
|
layout.findParent = function(){
|
|
if (!bar || bar.$amlDestroyed) {
|
|
bar = apf.document.documentElement.appendChild(
|
|
new imports.ui.bar());
|
|
bar.$ext.style.position = "fixed";
|
|
bar.$ext.style.left = "20px";
|
|
bar.$ext.style.right = "320px";
|
|
bar.$ext.style.bottom = "20px";
|
|
bar.$ext.style.height = "200px";
|
|
bar.$ext.style.minHeight = "200px";
|
|
plugin.addElement(bar);
|
|
}
|
|
bar.setAttribute("resizable", true);
|
|
|
|
return bar;
|
|
};
|
|
layout.getElement = function(){
|
|
return new apf.bar();
|
|
};
|
|
layout.setFindArea = function(active, callback, isDefault) {
|
|
// callback();
|
|
};
|
|
layout.proposeLayoutChange = function(){};
|
|
return layout;
|
|
})(),
|
|
panels: (function(){
|
|
var panel, column;
|
|
|
|
var api = {
|
|
register: function(p, o) {
|
|
if (!column) {
|
|
column = apf.document.documentElement.appendChild(
|
|
new imports.ui.bar({style:"background : #303130;"}));
|
|
column.$ext.style.position = "fixed";
|
|
column.$ext.style.top = "75px";
|
|
column.$ext.style.right = "20px";
|
|
column.$ext.style.left = "";
|
|
column.$ext.style.bottom = "20px";
|
|
column.$ext.style.width = "300px";
|
|
column.$ext.style.height = "";
|
|
}
|
|
|
|
panel = p;
|
|
p.draw({container: column.$ext, aml: column});
|
|
},
|
|
isActive: function() { return false; },
|
|
unregister: function(){},
|
|
activate: function(){
|
|
// panel.panel.show()
|
|
},
|
|
deactivate: function(){
|
|
// panel.panel.hide()
|
|
},
|
|
on: function(){
|
|
|
|
}
|
|
};
|
|
if (imports.Plugin) {
|
|
var plugin = new imports.Plugin();
|
|
plugin.freezePublicAPI(api);
|
|
return plugin;
|
|
} else {
|
|
return api;
|
|
}
|
|
})(),
|
|
Panel: function(developer, deps, options) {
|
|
var plugin = new imports.Plugin(developer, deps);
|
|
var emit = plugin.getEmitter();
|
|
var drawn = false;
|
|
var where;
|
|
plugin.on("load", function(){
|
|
where = options.where || "left";
|
|
var panels = apf.getPlugin("panels");
|
|
panels.register(plugin);
|
|
});
|
|
plugin.freezePublicAPI.baseclass();
|
|
plugin.freezePublicAPI({
|
|
get autohide(){ return false; },
|
|
get width(){ return options.width; },
|
|
get minWidth(){ return options.minWidth; },
|
|
get aml(){ return plugin.getElement(options.elementName); },
|
|
get area(){ return ""; },
|
|
get where(){ return where; },
|
|
setCommand: function(){},
|
|
attachTo: function(){},
|
|
detach: function(){},
|
|
emit: emit,
|
|
show: function(){ emit("show"); },
|
|
hide: function(){ emit("hide"); },
|
|
draw: function draw(area) {
|
|
if (drawn) return false;
|
|
drawn = true;
|
|
|
|
emit.sticky("draw", {
|
|
html: area.container,
|
|
aml: area.aml
|
|
});
|
|
|
|
return true;
|
|
}
|
|
});
|
|
|
|
return plugin;
|
|
},
|
|
tree: (function(){
|
|
var tree = new EventEmitter();
|
|
tree.createFolder = function(){};
|
|
tree.getElement = function(){};
|
|
tree.getAllExpanded = function(){ return []; };
|
|
return tree;
|
|
})(),
|
|
"tree.favorites" : (function(){
|
|
var tree = new EventEmitter();
|
|
tree.addFavorites = function(){};
|
|
tree.getFavoritePaths = function(){ return [] };
|
|
return tree;
|
|
})(),
|
|
tabManager: (function(){
|
|
var tabManager = new EventEmitter();
|
|
tabManager.open = function(){ tabManager.emit("open") };
|
|
tabManager.openFile = function(){ tabManager.emit("open") };
|
|
tabManager.findPage = function(){};
|
|
tabManager.getPanes = function(){ return [] };
|
|
tabManager.checkAllTabs = function(){};
|
|
return tabManager;
|
|
})(),
|
|
tabbehavior: (function(){
|
|
var x = new EventEmitter();
|
|
x.getElement = function(){};
|
|
return x;
|
|
})(),
|
|
menus: (function(){
|
|
var menus = new EventEmitter();
|
|
menus.addItemByPath = function(x, aml, y, plugin) {
|
|
aml && (plugin || y).addElement(aml);
|
|
return aml;
|
|
};
|
|
menus.addItemToMenu = menus.addItemByPath;
|
|
menus.get = function(){return {}};
|
|
menus.remove = function(){};
|
|
menus.enableItem = function(){};
|
|
menus.disableItem = function(){};
|
|
return menus;
|
|
})(),
|
|
util: {
|
|
alert: function() {},
|
|
escapeXml: function(s) { return s; },
|
|
stableStringify: function(s) { return JSON.stringify(s); },
|
|
},
|
|
gotoline: {
|
|
toggle: function(){ }
|
|
},
|
|
"auth.bootstrap": {
|
|
login: function(callback) { callback(); }
|
|
},
|
|
"auth": {},
|
|
"info": {
|
|
getUser: function(callback) {
|
|
var user = { id: 1 };
|
|
return callback ? callback(null, user) : user;
|
|
},
|
|
getWorkspace: function(callback) {
|
|
var ws = { id: 2 };
|
|
return callback ? callback(null, ws) : ws;
|
|
}
|
|
},
|
|
"ace.gotoline": {},
|
|
"ace.stripws": {
|
|
disable: function(){},
|
|
enable: function(){}
|
|
},
|
|
"dialog.alert": {show: function() { console.log(console, Array.prototype.slice.apply(arguments)); }},
|
|
"dialog.confirm": {show: function() {}},
|
|
"dialog.question": {show: function() {}},
|
|
"dialog.file": {show: function() {}},
|
|
"dialog.fileremove": {show: function() {}},
|
|
"dialog.fileoverwrite": {show: function() {}},
|
|
"dialog.error": {
|
|
showError: function(msg) { console.warn(msg); },
|
|
show: function(msg) { console.warn(msg); },
|
|
hide: function(msg) { },
|
|
},
|
|
"installer": { createSession : function(){}, reinstall: function(){}, isInstalled: function(){ return true; } },
|
|
"run.gui": { getElement : function(){} },
|
|
"debugger": {debug: function() {}, stop: function(){}},
|
|
"focusManager": {
|
|
focus: function() {
|
|
|
|
}
|
|
},
|
|
"metrics": {
|
|
getLastPing: function() { throw Error("Not implemented"); },
|
|
getLastest: function() { throw Error("Not implemented"); },
|
|
log: function() {},
|
|
increment: function() {}
|
|
},
|
|
error_handler: {
|
|
log: function() {},
|
|
reportError: function(){}
|
|
},
|
|
proc: {
|
|
execFile: function() {},
|
|
spawn: function() {}
|
|
},
|
|
threewaymerge: {
|
|
patchAce: function(oldVal, newVal, doc) {
|
|
if (doc == undefined) {
|
|
doc = newVal;
|
|
newVal = oldVal;
|
|
}
|
|
doc.setValue(newVal);
|
|
}
|
|
},
|
|
metadata: (function(){
|
|
var x = new EventEmitter();
|
|
return x;
|
|
})(),
|
|
editors: (function(){
|
|
var x = new EventEmitter();
|
|
return x;
|
|
})(),
|
|
timeslider: (function(){
|
|
var x = new EventEmitter();
|
|
return x;
|
|
})(),
|
|
OTDocument: (function(){
|
|
var x = new EventEmitter();
|
|
return x;
|
|
})(),
|
|
"notification.bubble": (function(){
|
|
var x = new EventEmitter();
|
|
return x;
|
|
})(),
|
|
"collab": (function(){
|
|
var x = new EventEmitter();
|
|
return x;
|
|
})(),
|
|
"collab.connect": (function(){
|
|
var x = new EventEmitter();
|
|
return x;
|
|
})(),
|
|
"collab.workspace": (function(){
|
|
var x = new EventEmitter();
|
|
x.users = [];
|
|
return x;
|
|
})(),
|
|
"collab.util": (function(){
|
|
var x = new EventEmitter();
|
|
return x;
|
|
})(),
|
|
"scm": (function(){
|
|
var x = new EventEmitter();
|
|
x.register = function(){};
|
|
x.unregister = function(){};
|
|
return x;
|
|
})(),
|
|
});
|
|
};
|
|
|
|
expect.setupArchitectTest = function(config, _, options) {
|
|
if (options && options.mockPlugins) {
|
|
config.push({
|
|
consumes: [],
|
|
provides: options.mockPlugins,
|
|
setup: expect.html.mocked
|
|
});
|
|
}
|
|
architect.resolveConfig(config, function(err, config) {
|
|
/*global describe it before after = */
|
|
if (err) throw err;
|
|
var app = architect.createApp(config, function(err, app) {
|
|
if (err && err.unresolved && !config.unresolved) {
|
|
console.warn("Adding mock services for " + err.unresolved);
|
|
config.unresolved = err.unresolved;
|
|
return expect.setupArchitectTest(config, architect, {
|
|
mockPlugins: config.unresolved
|
|
});
|
|
}
|
|
if (typeof describe == "function") {
|
|
describe('app', function() {
|
|
it('should load test app', function(done) {
|
|
expect(err).not.ok;
|
|
done();
|
|
});
|
|
});
|
|
}
|
|
onload && onload();
|
|
|
|
});
|
|
if (app) {
|
|
app.on("service", function(name, plugin) {
|
|
if (!plugin.name && typeof plugin != "function")
|
|
plugin.name = name;
|
|
});
|
|
app.rerun = function() {
|
|
expect.setupArchitectTest(config, architect);
|
|
};
|
|
window.app = app;
|
|
}
|
|
return app;
|
|
});
|
|
};
|
|
|
|
}); |