xultestrunner 0.2.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (153) hide show
  1. data/.gitignore +2 -0
  2. data/.gitmodules +3 -0
  3. data/LICENSE +21 -0
  4. data/README +17 -0
  5. data/Rakefile +50 -0
  6. data/VERSION +1 -0
  7. data/bin/xultest +13 -0
  8. data/lib/xultestrunner.rb +1 -0
  9. data/xulapp/application.ini +9 -0
  10. data/xulapp/chrome/chrome.manifest +2 -0
  11. data/xulapp/chrome/content/interface/boot.xul +20 -0
  12. data/xulapp/chrome/content/interface/testharness.html +30 -0
  13. data/xulapp/chrome/content/lib/xultestcase.js +140 -0
  14. data/xulapp/chrome/content/lib/xultestrunner.js +120 -0
  15. data/xulapp/chrome/content/vendor/prototype/LICENSE +16 -0
  16. data/xulapp/chrome/content/vendor/prototype/prototype.js +4874 -0
  17. data/xulapp/chrome/content/vendor/scriptaculous/LICENSE +20 -0
  18. data/xulapp/chrome/content/vendor/scriptaculous/test.css +90 -0
  19. data/xulapp/chrome/content/vendor/scriptaculous/unittest.js +566 -0
  20. data/xulapp/chrome/content/vendor/xpcomcore/LICENSE +21 -0
  21. data/xulapp/chrome/content/vendor/xpcomcore/README +27 -0
  22. data/xulapp/chrome/content/vendor/xpcomcore/Rakefile +83 -0
  23. data/xulapp/chrome/content/vendor/xpcomcore/VERSION.yml +5 -0
  24. data/xulapp/chrome/content/vendor/xpcomcore/bootstrapper.js +32 -0
  25. data/xulapp/chrome/content/vendor/xpcomcore/components/XPCOMCore.js +120 -0
  26. data/xulapp/chrome/content/vendor/xpcomcore/doc/files.html +241 -0
  27. data/xulapp/chrome/content/vendor/xpcomcore/doc/index.html +243 -0
  28. data/xulapp/chrome/content/vendor/xpcomcore/doc/symbols/Error.html +256 -0
  29. data/xulapp/chrome/content/vendor/xpcomcore/doc/symbols/Kernel.html +1030 -0
  30. data/xulapp/chrome/content/vendor/xpcomcore/doc/symbols/LoadError.html +319 -0
  31. data/xulapp/chrome/content/vendor/xpcomcore/doc/symbols/SelfConceptError.html +319 -0
  32. data/xulapp/chrome/content/vendor/xpcomcore/doc/symbols/_global_.html +316 -0
  33. data/xulapp/chrome/content/vendor/xpcomcore/doc/symbols/src/lib_file.js.html +53 -0
  34. data/xulapp/chrome/content/vendor/xpcomcore/doc/symbols/src/lib_kernel.js.html +251 -0
  35. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/README.txt +186 -0
  36. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/frame.js +33 -0
  37. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/frame/Chain.js +102 -0
  38. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/frame/Dumper.js +144 -0
  39. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/frame/Hash.js +84 -0
  40. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/frame/Link.js +153 -0
  41. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/frame/Namespace.js +10 -0
  42. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/frame/Opt.js +134 -0
  43. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/frame/Reflection.js +26 -0
  44. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/frame/String.js +93 -0
  45. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/frame/Testrun.js +129 -0
  46. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/handlers/FOODOC.js +26 -0
  47. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/handlers/XMLDOC.js +26 -0
  48. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/handlers/XMLDOC/DomReader.js +159 -0
  49. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/handlers/XMLDOC/XMLDoc.js +16 -0
  50. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/handlers/XMLDOC/XMLParse.js +292 -0
  51. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/lib/JSDOC.js +104 -0
  52. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/lib/JSDOC/DocComment.js +200 -0
  53. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/lib/JSDOC/DocTag.js +294 -0
  54. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/lib/JSDOC/JsDoc.js +126 -0
  55. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/lib/JSDOC/JsPlate.js +109 -0
  56. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/lib/JSDOC/Lang.js +144 -0
  57. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/lib/JSDOC/Parser.js +145 -0
  58. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/lib/JSDOC/PluginManager.js +33 -0
  59. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/lib/JSDOC/Symbol.js +645 -0
  60. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/lib/JSDOC/SymbolSet.js +241 -0
  61. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/lib/JSDOC/TextStream.js +41 -0
  62. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/lib/JSDOC/Token.js +18 -0
  63. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/lib/JSDOC/TokenReader.js +332 -0
  64. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/lib/JSDOC/TokenStream.js +133 -0
  65. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/lib/JSDOC/Util.js +32 -0
  66. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/lib/JSDOC/Walker.js +474 -0
  67. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/main.js +111 -0
  68. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/plugins/commentSrcJson.js +20 -0
  69. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/plugins/frameworkPrototype.js +16 -0
  70. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/plugins/functionCall.js +10 -0
  71. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/plugins/publishSrcHilite.js +62 -0
  72. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/plugins/symbolLink.js +10 -0
  73. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/plugins/tagParamConfig.js +31 -0
  74. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/plugins/tagSynonyms.js +43 -0
  75. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/run.js +348 -0
  76. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/t/TestDoc.js +144 -0
  77. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/t/runner.js +13 -0
  78. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test.js +325 -0
  79. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/addon.js +24 -0
  80. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/anon_inner.js +14 -0
  81. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/augments.js +31 -0
  82. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/augments2.js +26 -0
  83. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/borrows.js +46 -0
  84. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/borrows2.js +23 -0
  85. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/config.js +22 -0
  86. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/constructs.js +18 -0
  87. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/encoding.js +10 -0
  88. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/encoding_other.js +12 -0
  89. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/event.js +54 -0
  90. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/exports.js +14 -0
  91. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/functions_anon.js +39 -0
  92. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/functions_nested.js +33 -0
  93. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/global.js +13 -0
  94. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/globals.js +25 -0
  95. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/ignore.js +10 -0
  96. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/inner.js +16 -0
  97. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/jsdoc_test.js +477 -0
  98. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/lend.js +33 -0
  99. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/memberof.js +19 -0
  100. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/memberof_constructor.js +17 -0
  101. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/module.js +17 -0
  102. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/name.js +19 -0
  103. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/namespace_nested.js +23 -0
  104. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/nocode.js +13 -0
  105. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/oblit_anon.js +20 -0
  106. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/overview.js +20 -0
  107. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/param_inline.js +37 -0
  108. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/params_optional.js +8 -0
  109. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/prototype.js +17 -0
  110. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/prototype_nested.js +9 -0
  111. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/prototype_oblit.js +13 -0
  112. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/prototype_oblit_constructor.js +24 -0
  113. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/public.js +10 -0
  114. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/scripts/code.js +5 -0
  115. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/scripts/notcode.txt +5 -0
  116. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/shared.js +42 -0
  117. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/shared2.js +2 -0
  118. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/shortcuts.js +22 -0
  119. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/static_this.js +13 -0
  120. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/synonyms.js +31 -0
  121. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/tosource.js +23 -0
  122. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/app/test/variable_redefine.js +14 -0
  123. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/changes.txt +96 -0
  124. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/conf/sample.conf +31 -0
  125. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/java/build.xml +36 -0
  126. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/java/build_1.4.xml +36 -0
  127. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/java/classes/js.jar +0 -0
  128. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/java/src/JsDebugRun.java +21 -0
  129. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/java/src/JsRun.java +21 -0
  130. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/jsdebug.jar +0 -0
  131. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/jsrun.jar +0 -0
  132. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/jsrun.sh +52 -0
  133. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/templates/jsdoc/allclasses.tmpl +17 -0
  134. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/templates/jsdoc/allfiles.tmpl +56 -0
  135. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/templates/jsdoc/class.tmpl +646 -0
  136. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/templates/jsdoc/index.tmpl +39 -0
  137. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/templates/jsdoc/publish.js +200 -0
  138. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/templates/jsdoc/static/default.css +162 -0
  139. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/templates/jsdoc/static/header.html +2 -0
  140. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/templates/jsdoc/static/index.html +19 -0
  141. data/xulapp/chrome/content/vendor/xpcomcore/etc/jsdoc-toolkit/templates/jsdoc/symbol.tmpl +35 -0
  142. data/xulapp/chrome/content/vendor/xpcomcore/lib/file.js +46 -0
  143. data/xulapp/chrome/content/vendor/xpcomcore/lib/kernel.js +244 -0
  144. data/xulapp/chrome/content/vendor/xpcomcore/test/file_test.js +16 -0
  145. data/xulapp/chrome/content/vendor/xpcomcore/test/fixtures/love.js +1 -0
  146. data/xulapp/chrome/content/vendor/xpcomcore/test/fixtures/mad_love.js +1 -0
  147. data/xulapp/chrome/content/vendor/xpcomcore/test/fixtures/mad_world.js +1 -0
  148. data/xulapp/chrome/content/vendor/xpcomcore/test/fixtures/syntax_error.js +1 -0
  149. data/xulapp/chrome/content/vendor/xpcomcore/test/kernel_test.js +88 -0
  150. data/xulapp/components/bootstrap.js +93 -0
  151. data/xulapp/defaults/preferences/prefs.js +14 -0
  152. data/xultestrunner.gemspec +190 -0
  153. metadata +207 -0
@@ -0,0 +1,33 @@
1
+ /**
2
+ @namespace Holds functionality related to running plugins.
3
+ */
4
+ JSDOC.PluginManager = {
5
+ }
6
+
7
+ /**
8
+ @param name A unique name that identifies that plugin.
9
+ @param handlers A collection of named functions. The names correspond to hooks in the core code.
10
+ */
11
+ JSDOC.PluginManager.registerPlugin = function(/**String*/name, /**Object*/handlers) {
12
+ if (!defined(JSDOC.PluginManager.plugins))
13
+ /** The collection of all plugins. Requires a unique name for each.
14
+ */
15
+ JSDOC.PluginManager.plugins = {};
16
+
17
+
18
+ JSDOC.PluginManager.plugins[name] = handlers;
19
+ }
20
+
21
+ /**
22
+ @param hook The name of the hook that is being caught.
23
+ @param target Any object. This will be passed as the only argument to the handler whose
24
+ name matches the hook name. Handlers cannot return a value, so must modify the target
25
+ object to have an effect.
26
+ */
27
+ JSDOC.PluginManager.run = function(/**String*/hook, /**Mixed*/target) {
28
+ for (var name in JSDOC.PluginManager.plugins) {
29
+ if (defined(JSDOC.PluginManager.plugins[name][hook])) {
30
+ JSDOC.PluginManager.plugins[name][hook](target);
31
+ }
32
+ }
33
+ }
@@ -0,0 +1,645 @@
1
+ if (typeof JSDOC == "undefined") JSDOC = {};
2
+
3
+ /**
4
+ Create a new Symbol.
5
+ @class Represents a symbol in the source code.
6
+ */
7
+ JSDOC.Symbol = function() {
8
+ this.init();
9
+ if (arguments.length) this.populate.apply(this, arguments);
10
+ }
11
+
12
+ JSDOC.Symbol.count = 0;
13
+
14
+ JSDOC.Symbol.prototype.init = function() {
15
+ this._name = "";
16
+ this._params = [];
17
+ this.$args = [];
18
+ this.addOn = "";
19
+ this.alias = "";
20
+ this.augments = [];
21
+ this.author = "";
22
+ this.classDesc = "";
23
+ this.comment = {};
24
+ this.defaultValue = undefined;
25
+ this.deprecated = "";
26
+ this.desc = "";
27
+ this.example = [];
28
+ this.exceptions = [];
29
+ this.fires = [];
30
+ this.id = JSDOC.Symbol.count++;
31
+ this.inherits = [];
32
+ this.inheritsFrom = [];
33
+ this.isa = "OBJECT";
34
+ this.isConstant = false;
35
+ this.isEvent = false;
36
+ this.isIgnored = false;
37
+ this.isInner = false;
38
+ this.isNamespace = false;
39
+ this.isPrivate = false;
40
+ this.isStatic = false;
41
+ this.memberOf = "";
42
+ this.methods = [];
43
+ this.properties = [];
44
+ this.requires = [];
45
+ this.returns = [];
46
+ this.see = [];
47
+ this.since = "";
48
+ this.srcFile = {};
49
+ this.type = "";
50
+ this.version = "";
51
+ }
52
+
53
+ JSDOC.Symbol.prototype.serialize = function() {
54
+ var keys = [];
55
+ for (var p in this) {
56
+ keys.push (p);
57
+ }
58
+ keys = keys.sort();
59
+
60
+ var out = "";
61
+ for (var i in keys) {
62
+ if (typeof this[keys[i]] == "function") continue;
63
+ out += keys[i]+" => "+Dumper.dump(this[keys[i]])+",\n";
64
+ }
65
+ return "\n{\n" + out + "}\n";
66
+ }
67
+
68
+ JSDOC.Symbol.prototype.clone = function() {
69
+ var clone = new JSDOC.Symbol();
70
+ clone.populate.apply(clone, this.$args); // repopulate using the original arguments
71
+ clone.srcFile = this.srcFile; // not the current srcFile, the one when the original was made
72
+ return clone;
73
+ }
74
+
75
+ JSDOC.Symbol.prototype.__defineSetter__("name",
76
+ function(n) { n = n.replace(/^_global_[.#-]/, ""); n = n.replace(/\.prototype\.?/g, '#'); this._name = n; }
77
+ );
78
+ JSDOC.Symbol.prototype.__defineGetter__("name",
79
+ function() { return this._name; }
80
+ );
81
+ JSDOC.Symbol.prototype.__defineSetter__("params",
82
+ function(v) {
83
+ for (var i = 0, l = v.length; i < l; i++) {
84
+ if (v[i].constructor != JSDOC.DocTag) { // may be a generic object parsed from signature, like {type:..., name:...}
85
+ this._params[i] = new JSDOC.DocTag("param"+((v[i].type)?" {"+v[i].type+"}":"")+" "+v[i].name);
86
+ }
87
+ else {
88
+ this._params[i] = v[i];
89
+ }
90
+ }
91
+ }
92
+ );
93
+ JSDOC.Symbol.prototype.__defineGetter__("params",
94
+ function() { return this._params; }
95
+ );
96
+
97
+ JSDOC.Symbol.prototype.getEvents = function() {
98
+ var events = [];
99
+ for (var i = 0, l = this.methods.length; i < l; i++) {
100
+ if (this.methods[i].isEvent) {
101
+ this.methods[i].name = this.methods[i].name.replace("event:", "");
102
+ events.push(this.methods[i]);
103
+ }
104
+ }
105
+ return events;
106
+ }
107
+
108
+ JSDOC.Symbol.prototype.getMethods = function() {
109
+ var nonEvents = [];
110
+ for (var i = 0, l = this.methods.length; i < l; i++) {
111
+ if (!this.methods[i].isEvent) {
112
+ nonEvents.push(this.methods[i]);
113
+ }
114
+ }
115
+ return nonEvents;
116
+ }
117
+
118
+
119
+ JSDOC.Symbol.prototype.populate = function(
120
+ /** String */ name,
121
+ /** Object[] */ params,
122
+ /** String */ isa,
123
+ /** JSDOC.DocComment */ comment
124
+ ) {
125
+ this.$args = arguments;
126
+
127
+ this.name = name;
128
+ this.alias = this.name;
129
+
130
+ this.params = params;
131
+ this.isa = (isa == "VIRTUAL")? "OBJECT":isa;
132
+ this.comment = comment || new JSDOC.DocComment("");
133
+ this.srcFile = JSDOC.Symbol.srcFile;
134
+
135
+ if (this.is("FILE") && !this.alias) this.alias = this.srcFile;
136
+
137
+ this.setTags();
138
+
139
+ if (typeof JSDOC.PluginManager != "undefined") {
140
+ JSDOC.PluginManager.run("onSymbol", this);
141
+ }
142
+ }
143
+
144
+ JSDOC.Symbol.prototype.setTags = function() {
145
+ // @author
146
+ var authors = this.comment.getTag("author");
147
+ if (authors.length) {
148
+ this.author = authors.map(function($){return $.desc;}).join(", ");
149
+ }
150
+
151
+ /*t:
152
+ plan(34, "testing JSDOC.Symbol");
153
+
154
+ requires("../lib/JSDOC/DocComment.js");
155
+ requires("../frame/String.js");
156
+ requires("../lib/JSDOC/DocTag.js");
157
+
158
+ var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@author Joe Smith*"+"/"));
159
+ is(sym.author, "Joe Smith", "@author tag, author is found.");
160
+ */
161
+
162
+ // @desc
163
+ var descs = this.comment.getTag("desc");
164
+ if (descs.length) {
165
+ this.desc = descs.map(function($){return $.desc;}).join("\n"); // multiple descriptions are concatenated into one
166
+ }
167
+
168
+ /*t:
169
+ var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@desc This is a description.*"+"/"));
170
+ is(sym.desc, "This is a description.", "@desc tag, description is found.");
171
+ */
172
+
173
+ // @overview
174
+ if (this.is("FILE")) {
175
+ if (!this.alias) this.alias = this.srcFile;
176
+
177
+ var overviews = this.comment.getTag("overview");
178
+ if (overviews.length) {
179
+ this.desc = [this.desc].concat(overviews.map(function($){return $.desc;})).join("\n");
180
+ }
181
+ }
182
+
183
+ /*t:
184
+ var sym = new JSDOC.Symbol("foo", [], "FILE", new JSDOC.DocComment("/**@overview This is an overview.*"+"/"));
185
+ is(sym.desc, "\nThis is an overview.", "@overview tag, description is found.");
186
+ */
187
+
188
+ // @since
189
+ var sinces = this.comment.getTag("since");
190
+ if (sinces.length) {
191
+ this.since = sinces.map(function($){return $.desc;}).join(", ");
192
+ }
193
+
194
+ /*t:
195
+ var sym = new JSDOC.Symbol("foo", [], "FILE", new JSDOC.DocComment("/**@since 1.01*"+"/"));
196
+ is(sym.since, "1.01", "@since tag, description is found.");
197
+ */
198
+
199
+ // @constant
200
+ if (this.comment.getTag("constant").length) {
201
+ this.isConstant = true;
202
+ }
203
+
204
+ /*t:
205
+ var sym = new JSDOC.Symbol("foo", [], "FILE", new JSDOC.DocComment("/**@constant*"+"/"));
206
+ is(sym.isConstant, true, "@constant tag, isConstant set.");
207
+ */
208
+
209
+ // @version
210
+ var versions = this.comment.getTag("version");
211
+ if (versions.length) {
212
+ this.version = versions.map(function($){return $.desc;}).join(", ");
213
+ }
214
+
215
+ /*t:
216
+ var sym = new JSDOC.Symbol("foo", [], "FILE", new JSDOC.DocComment("/**@version 2.0x*"+"/"));
217
+ is(sym.version, "2.0x", "@version tag, version is found.");
218
+ */
219
+
220
+ // @deprecated
221
+ var deprecateds = this.comment.getTag("deprecated");
222
+ if (deprecateds.length) {
223
+ this.deprecated = deprecateds.map(function($){return $.desc;}).join("\n");
224
+ }
225
+
226
+ /*t:
227
+ var sym = new JSDOC.Symbol("foo", [], "FILE", new JSDOC.DocComment("/**@deprecated Use other method.*"+"/"));
228
+ is(sym.deprecated, "Use other method.", "@deprecated tag, desc is found.");
229
+ */
230
+
231
+ // @example
232
+ var examples = this.comment.getTag("example");
233
+ if (examples.length) {
234
+ this.example = examples.map(
235
+ // trim trailing whitespace
236
+ function($) {
237
+ $.desc = $.desc.replace(/\s+$/, "");
238
+ return $;
239
+ }
240
+ );
241
+ }
242
+
243
+ /*t:
244
+ var sym = new JSDOC.Symbol("foo", [], "FILE", new JSDOC.DocComment("/**@example This\n is an example. \n*"+"/"));
245
+ isnt(typeof sym.example[0], "undefined", "@example tag, creates sym.example array.");
246
+ is(sym.example[0], "This\n is an example.", "@example tag, desc is found.");
247
+ */
248
+
249
+ // @see
250
+ var sees = this.comment.getTag("see");
251
+ if (sees.length) {
252
+ var thisSee = this.see;
253
+ sees.map(function($){thisSee.push($.desc);});
254
+ }
255
+
256
+ /*t:
257
+ var sym = new JSDOC.Symbol("foo", [], "FILE", new JSDOC.DocComment("/**@see The other thing.*"+"/"));
258
+ is(sym.see, "The other thing.", "@see tag, desc is found.");
259
+ */
260
+
261
+ // @class
262
+ var classes = this.comment.getTag("class");
263
+ if (classes.length) {
264
+ this.isa = "CONSTRUCTOR";
265
+ this.classDesc = classes[0].desc; // desc can't apply to the constructor as there is none.
266
+ }
267
+
268
+ /*t:
269
+ var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@class This describes the class.*"+"/"));
270
+ is(sym.isa, "CONSTRUCTOR", "@class tag, makes symbol a constructor.");
271
+ is(sym.classDesc, "This describes the class.", "@class tag, class description is found.");
272
+ */
273
+
274
+ // @namespace
275
+ var namespaces = this.comment.getTag("namespace");
276
+ if (namespaces.length) {
277
+ this.classDesc = namespaces[0].desc;
278
+ this.isNamespace = true;
279
+ }
280
+
281
+ /*t:
282
+ var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@namespace This describes the namespace.*"+"/"));
283
+ is(sym.classDesc, "This describes the namespace.", "@namespace tag, class description is found.");
284
+ */
285
+
286
+ // @param
287
+ var params = this.comment.getTag("param");
288
+ if (params.length) {
289
+ // user-defined params overwrite those with same name defined by the parser
290
+ var thisParams = this.params;
291
+
292
+ if (thisParams.length == 0) { // none exist yet, so just bung all these user-defined params straight in
293
+ this.params = params;
294
+ }
295
+ else { // need to overlay these user-defined params on to existing parser-defined params
296
+ for (var i = 0, l = params.length; i < l; i++) {
297
+ if (thisParams[i]) {
298
+ if (params[i].type) thisParams[i].type = params[i].type;
299
+ thisParams[i].name = params[i].name;
300
+ thisParams[i].desc = params[i].desc;
301
+ thisParams[i].isOptional = params[i].isOptional;
302
+ thisParams[i].defaultValue = params[i].defaultValue;
303
+ }
304
+ else thisParams[i] = params[i];
305
+ }
306
+ }
307
+ }
308
+
309
+ /*t:
310
+ var sym = new JSDOC.Symbol("foo", [{type: "array", name: "pages"}], "FUNCTION", new JSDOC.DocComment("/**Description.*"+"/"));
311
+ is(sym.params.length, 1, "parser defined param is found.");
312
+
313
+ sym = new JSDOC.Symbol("foo", [], "FUNCTION", new JSDOC.DocComment("/**Description.\n@param {array} pages*"+"/"));
314
+ is(sym.params.length, 1, "user defined param is found.");
315
+ is(sym.params[0].type, "array", "user defined param type is found.");
316
+ is(sym.params[0].name, "pages", "user defined param name is found.");
317
+
318
+ sym = new JSDOC.Symbol("foo", [{type: "array", name: "pages"}], "FUNCTION", new JSDOC.DocComment("/**Description.\n@param {string} uid*"+"/"));
319
+ is(sym.params.length, 1, "user defined param overwrites parser defined param.");
320
+ is(sym.params[0].type, "string", "user defined param type overwrites parser defined param type.");
321
+ is(sym.params[0].name, "uid", "user defined param name overwrites parser defined param name.");
322
+
323
+ sym = new JSDOC.Symbol("foo", [{type: "array", name: "pages"}, {type: "number", name: "count"}], "FUNCTION", new JSDOC.DocComment("/**Description.\n@param {string} uid*"+"/"));
324
+ is(sym.params.length, 2, "user defined params overlay parser defined params.");
325
+ is(sym.params[1].type, "number", "user defined param type overlays parser defined param type.");
326
+ is(sym.params[1].name, "count", "user defined param name overlays parser defined param name.");
327
+
328
+ sym = new JSDOC.Symbol("foo", [], "FUNCTION", new JSDOC.DocComment("/**Description.\n@param {array} pages The pages description.*"+"/"));
329
+ is(sym.params.length, 1, "user defined param with description is found.");
330
+ is(sym.params[0].desc, "The pages description.", "user defined param description is found.");
331
+ */
332
+
333
+ // @constructor
334
+ if (this.comment.getTag("constructor").length) {
335
+ this.isa = "CONSTRUCTOR";
336
+ }
337
+
338
+ /*t:
339
+ var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@constructor*"+"/"));
340
+ is(sym.isa, "CONSTRUCTOR", "@constructor tag, makes symbol a constructor.");
341
+ */
342
+
343
+ // @static
344
+ if (this.comment.getTag("static").length) {
345
+ this.isStatic = true;
346
+ if (this.isa == "CONSTRUCTOR") {
347
+ this.isNamespace = true;
348
+ }
349
+ }
350
+
351
+ /*t:
352
+ var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@static\n@constructor*"+"/"));
353
+ is(sym.isStatic, true, "@static tag, makes isStatic true.");
354
+ is(sym.isNamespace, true, "@static and @constructor tag, makes isNamespace true.");
355
+ */
356
+
357
+ // @inner
358
+ if (this.comment.getTag("inner").length) {
359
+ this.isInner = true;
360
+ this.isStatic = false;
361
+ }
362
+
363
+ /*t:
364
+ var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@inner*"+"/"));
365
+ is(sym.isStatic, false, "@inner tag, makes isStatic false.");
366
+ is(sym.isInner, true, "@inner makes isInner true.");
367
+ */
368
+
369
+ // @name
370
+ var names = this.comment.getTag("name");
371
+ if (names.length) {
372
+ this.name = names[0].desc;
373
+ }
374
+
375
+ /*t:
376
+ // todo
377
+ */
378
+
379
+ // @field
380
+ if (this.comment.getTag("field").length) {
381
+ this.isa = "OBJECT";
382
+ }
383
+
384
+ /*t:
385
+ var sym = new JSDOC.Symbol("foo", [], "FUNCTION", new JSDOC.DocComment("/**@field*"+"/"));
386
+ is(sym.isa, "OBJECT", "@field tag, makes symbol an object.");
387
+ */
388
+
389
+ // @function
390
+ if (this.comment.getTag("function").length) {
391
+ this.isa = "FUNCTION";
392
+ if (/event:/.test(this.alias)) this.isEvent = true;
393
+ }
394
+
395
+ /*t:
396
+ var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@function*"+"/"));
397
+ is(sym.isa, "FUNCTION", "@function tag, makes symbol a function.");
398
+ */
399
+
400
+ // @event
401
+ var events = this.comment.getTag("event");
402
+ if (events.length) {
403
+ this.isa = "FUNCTION";
404
+ this.isEvent = true;
405
+ if (!/event:/.test(this.alias))
406
+ this.alias = this.alias.replace(/^(.*[.#-])([^.#-]+)$/, "$1event:$2");
407
+ }
408
+
409
+ /*t:
410
+ var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@event*"+"/"));
411
+ is(sym.isa, "FUNCTION", "@event tag, makes symbol a function.");
412
+ is(sym.isEvent, true, "@event makes isEvent true.");
413
+ */
414
+
415
+ // @fires
416
+ var fires = this.comment.getTag("fires");
417
+ if (fires.length) {
418
+ for (var i = 0; i < fires.length; i++) {
419
+ this.fires.push(fires[i].desc);
420
+ }
421
+ }
422
+
423
+ /*t:
424
+ // todo
425
+ */
426
+
427
+ // @property
428
+ var properties = this.comment.getTag("property");
429
+ if (properties.length) {
430
+ thisProperties = this.properties;
431
+ for (var i = 0; i < properties.length; i++) {
432
+ var property = new JSDOC.Symbol(this.alias+"#"+properties[i].name, [], "OBJECT", new JSDOC.DocComment("/**"+properties[i].desc+"\n@name "+properties[i].name+"\n@memberOf "+this.alias+"#*/"));
433
+ // TODO: shouldn't the following happen in the addProperty method of Symbol?
434
+ property.name = properties[i].name;
435
+ property.memberOf = this.alias;
436
+ if (properties[i].type) property.type = properties[i].type;
437
+ if (properties[i].defaultValue) property.defaultValue = properties[i].defaultValue;
438
+ this.addProperty(property);
439
+ JSDOC.Parser.addSymbol(property);
440
+ }
441
+ }
442
+
443
+ /*t:
444
+ // todo
445
+ */
446
+
447
+ // @return
448
+ var returns = this.comment.getTag("return");
449
+ if (returns.length) { // there can be many return tags in a single doclet
450
+ this.returns = returns;
451
+ this.type = returns.map(function($){return $.type}).join(", ");
452
+ }
453
+
454
+ /*t:
455
+ // todo
456
+ */
457
+
458
+ // @exception
459
+ this.exceptions = this.comment.getTag("throws");
460
+
461
+ /*t:
462
+ // todo
463
+ */
464
+
465
+ // @requires
466
+ var requires = this.comment.getTag("requires");
467
+ if (requires.length) {
468
+ this.requires = requires.map(function($){return $.desc});
469
+ }
470
+
471
+ /*t:
472
+ // todo
473
+ */
474
+
475
+ // @type
476
+ var types = this.comment.getTag("type");
477
+ if (types.length) {
478
+ this.type = types[0].desc; //multiple type tags are ignored
479
+ }
480
+
481
+ /*t:
482
+ // todo
483
+ */
484
+
485
+ // @private
486
+ if (this.comment.getTag("private").length || this.isInner) {
487
+ this.isPrivate = true;
488
+ }
489
+
490
+ // @ignore
491
+ if (this.comment.getTag("ignore").length) {
492
+ this.isIgnored = true;
493
+ }
494
+
495
+ /*t:
496
+ // todo
497
+ */
498
+
499
+ // @inherits ... as ...
500
+ var inherits = this.comment.getTag("inherits");
501
+ if (inherits.length) {
502
+ for (var i = 0; i < inherits.length; i++) {
503
+ if (/^\s*([a-z$0-9_.#:-]+)(?:\s+as\s+([a-z$0-9_.#:-]+))?/i.test(inherits[i].desc)) {
504
+ var inAlias = RegExp.$1;
505
+ var inAs = RegExp.$2 || inAlias;
506
+
507
+ if (inAlias) inAlias = inAlias.replace(/\.prototype\.?/g, "#");
508
+
509
+ if (inAs) {
510
+ inAs = inAs.replace(/\.prototype\.?/g, "#");
511
+ inAs = inAs.replace(/^this\.?/, "#");
512
+ }
513
+
514
+ if (inAs.indexOf(inAlias) != 0) { //not a full namepath
515
+ var joiner = ".";
516
+ if (this.alias.charAt(this.alias.length-1) == "#" || inAs.charAt(0) == "#") {
517
+ joiner = "";
518
+ }
519
+ inAs = this.alias + joiner + inAs;
520
+ }
521
+ }
522
+ this.inherits.push({alias: inAlias, as: inAs});
523
+ }
524
+ }
525
+
526
+ /*t:
527
+ // todo
528
+ */
529
+
530
+ // @augments
531
+ this.augments = this.comment.getTag("augments");
532
+
533
+ // @default
534
+ var defaults = this.comment.getTag("default");
535
+ if (defaults.length) {
536
+ if (this.is("OBJECT")) {
537
+ this.defaultValue = defaults[0].desc;
538
+ }
539
+ }
540
+
541
+ /*t:
542
+ // todo
543
+ */
544
+
545
+ // @memberOf
546
+ var memberOfs = this.comment.getTag("memberOf");
547
+ if (memberOfs.length) {
548
+ this.memberOf = memberOfs[0].desc;
549
+ this.memberOf = this.memberOf.replace(/\.prototype\.?/g, "#");
550
+ }
551
+
552
+ /*t:
553
+ // todo
554
+ */
555
+
556
+ // @public
557
+ if (this.comment.getTag("public").length) {
558
+ this.isPrivate = false;
559
+ }
560
+
561
+ /*t:
562
+ // todo
563
+ */
564
+
565
+ if (JSDOC.PluginManager) {
566
+ JSDOC.PluginManager.run("onSetTags", this);
567
+ }
568
+ }
569
+
570
+ JSDOC.Symbol.prototype.is = function(what) {
571
+ return this.isa === what;
572
+ }
573
+
574
+ JSDOC.Symbol.prototype.isBuiltin = function() {
575
+ return JSDOC.Lang.isBuiltin(this.alias);
576
+ }
577
+
578
+ JSDOC.Symbol.prototype.setType = function(/**String*/comment, /**Boolean*/overwrite) {
579
+ if (!overwrite && this.type) return;
580
+ var typeComment = JSDOC.DocComment.unwrapComment(comment);
581
+ this.type = typeComment;
582
+ }
583
+
584
+ JSDOC.Symbol.prototype.inherit = function(symbol) {
585
+ if (!this.hasMember(symbol.name) && !symbol.isInner) {
586
+ if (symbol.is("FUNCTION"))
587
+ this.methods.push(symbol);
588
+ else if (symbol.is("OBJECT"))
589
+ this.properties.push(symbol);
590
+ }
591
+ }
592
+
593
+ JSDOC.Symbol.prototype.hasMember = function(name) {
594
+ return (this.hasMethod(name) || this.hasProperty(name));
595
+ }
596
+
597
+ JSDOC.Symbol.prototype.addMember = function(symbol) {
598
+ if (symbol.is("FUNCTION")) { this.addMethod(symbol); }
599
+ else if (symbol.is("OBJECT")) { this.addProperty(symbol); }
600
+ }
601
+
602
+ JSDOC.Symbol.prototype.hasMethod = function(name) {
603
+ var thisMethods = this.methods;
604
+ for (var i = 0, l = thisMethods.length; i < l; i++) {
605
+ if (thisMethods[i].name == name) return true;
606
+ if (thisMethods[i].alias == name) return true;
607
+ }
608
+ return false;
609
+ }
610
+
611
+ JSDOC.Symbol.prototype.addMethod = function(symbol) {
612
+ var methodAlias = symbol.alias;
613
+ var thisMethods = this.methods;
614
+ for (var i = 0, l = thisMethods.length; i < l; i++) {
615
+ if (thisMethods[i].alias == methodAlias) {
616
+ thisMethods[i] = symbol; // overwriting previous method
617
+ return;
618
+ }
619
+ }
620
+ thisMethods.push(symbol); // new method with this alias
621
+ }
622
+
623
+ JSDOC.Symbol.prototype.hasProperty = function(name) {
624
+ var thisProperties = this.properties;
625
+ for (var i = 0, l = thisProperties.length; i < l; i++) {
626
+ if (thisProperties[i].name == name) return true;
627
+ if (thisProperties[i].alias == name) return true;
628
+ }
629
+ return false;
630
+ }
631
+
632
+ JSDOC.Symbol.prototype.addProperty = function(symbol) {
633
+ var propertyAlias = symbol.alias;
634
+ var thisProperties = this.properties;
635
+ for (var i = 0, l = thisProperties.length; i < l; i++) {
636
+ if (thisProperties[i].alias == propertyAlias) {
637
+ thisProperties[i] = symbol; // overwriting previous property
638
+ return;
639
+ }
640
+ }
641
+
642
+ thisProperties.push(symbol); // new property with this alias
643
+ }
644
+
645
+ JSDOC.Symbol.srcFile = ""; //running reference to the current file being parsed