xultestrunner 0.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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,129 @@
1
+ /**
2
+ * @fileOverview
3
+ * @name JsTestrun
4
+ * @author Michael Mathews micmath@gmail.com
5
+ * @url $HeadURL: https://jsdoc-toolkit.googlecode.com/svn/trunk/jsdoc-toolkit/app/frame/Testrun.js $
6
+ * @revision $Id: Testrun.js 418 2008-01-15 21:40:33Z micmath $
7
+ * @license <a href="http://en.wikipedia.org/wiki/MIT_License">X11/MIT License</a>
8
+ * (See the accompanying README file for full details.)
9
+ */
10
+
11
+ /**
12
+ Yet another unit testing tool for JavaScript.
13
+ @author Michael Mathews <a href="mailto:micmath@gmail.com">micmath@gmail.com</a>
14
+ @param {object} testCases Properties are testcase names, values are functions to execute as tests.
15
+ */
16
+ function testrun(testCases) {
17
+ var ran = 0;
18
+ for (t in testCases) {
19
+ var result = testCases[t]();
20
+ ran++;
21
+ }
22
+
23
+ return testrun.reportOut+"-------------------------------\n"+((testrun.fails>0)? ":( Failed "+testrun.fails+"/" : ":) Passed all ")+testrun.count+" test"+((testrun.count == 1)? "":"s")+".\n";
24
+ }
25
+
26
+
27
+ testrun.count = 0;
28
+ testrun.current = null;
29
+ testrun.passes = 0;
30
+ testrun.fails = 0;
31
+ testrun.reportOut = "";
32
+
33
+ /** @private */
34
+ testrun.report = function(text) {
35
+ testrun.reportOut += text+"\n";
36
+ }
37
+
38
+ /**
39
+ Check if test evaluates to true.
40
+ @param {string} test To be evaluated.
41
+ @param {string} message Optional. To be displayed in the report.
42
+ @return {boolean} True if the string test evaluates to true.
43
+ */
44
+ ok = function(test, message) {
45
+ testrun.count++;
46
+
47
+ var result;
48
+ try {
49
+ result = eval(test);
50
+
51
+ if (result) {
52
+ testrun.passes++;
53
+ testrun.report(" OK "+testrun.count+" - "+((message != null)? message : ""));
54
+ }
55
+ else {
56
+ testrun.fails++;
57
+ testrun.report("NOT OK "+testrun.count+" - "+((message != null)? message : ""));
58
+ }
59
+ }
60
+ catch(e) {
61
+ testrun.fails++
62
+ testrun.report("NOT OK "+testrun.count+" - "+((message != null)? message : ""));
63
+
64
+ }
65
+ }
66
+
67
+ /**
68
+ Check if test is same as expected.
69
+ @param {string} test To be evaluated.
70
+ @param {string} expected
71
+ @param {string} message Optional. To be displayed in the report.
72
+ @return {boolean} True if (test == expected). Note that the comparison is not a strict equality check.
73
+ */
74
+ is = function(test, expected, message) {
75
+ testrun.count++;
76
+
77
+ var result;
78
+ try {
79
+ result = eval(test);
80
+
81
+ if (result == expected) {
82
+ testrun.passes++
83
+ testrun.report(" OK "+testrun.count+" - "+((message != null)? message : ""));
84
+ }
85
+ else {
86
+ testrun.fails++
87
+ testrun.report("NOT OK "+testrun.count+" - "+((message != null)? message : ""));
88
+ testrun.report("expected: "+expected);
89
+ testrun.report(" got: "+result);
90
+ }
91
+ }
92
+ catch(e) {
93
+ testrun.fails++
94
+ testrun.report("NOT OK "+testrun.count+" - "+((message != null)? message : ""));
95
+ testrun.report("expected: "+expected);
96
+ testrun.report(" got: "+result);}
97
+ }
98
+
99
+ /**
100
+ Check if test matches pattern.
101
+ @param {string} test To be evaluated.
102
+ @param {string} pattern Used to create a RegExp.
103
+ @param {string} message Optional. To be displayed in the report.
104
+ @return {boolean} True if test matches pattern.
105
+ */
106
+ like = function(test, pattern, message) {
107
+ testrun.count++;
108
+
109
+ var result;
110
+ try {
111
+ result = eval(test);
112
+ var rgx = new RegExp(pattern);
113
+
114
+ if (rgx.test(result)) {
115
+ testrun.passes++
116
+ testrun.report(" OK "+testrun.count+" - "+((message != null)? message : ""));
117
+ }
118
+ else {
119
+ testrun.fails++
120
+ testrun.report("NOT OK "+testrun.count+" - "+((message != null)? message : ""));
121
+ testrun.report(" this: "+result);
122
+ testrun.report("is not like: "+pattern);
123
+ }
124
+ }
125
+ catch(e) {
126
+ testrun.fails++
127
+ testrun.report("NOT OK "+testrun.count+" - "+((message != null)? message : ""));
128
+ }
129
+ }
@@ -0,0 +1,26 @@
1
+ /**
2
+ This is the main container for the FOODOC handler.
3
+ @namespace
4
+ */
5
+ FOODOC = {
6
+ };
7
+
8
+ /** The current version string of this application. */
9
+ FOODOC.VERSION = "1.0";
10
+
11
+ FOODOC.handle = function(srcFile, src) {
12
+ LOG.inform("Handling file '" + srcFile + "'");
13
+
14
+ return [
15
+ new JSDOC.Symbol(
16
+ "foo",
17
+ [],
18
+ "VIRTUAL",
19
+ new JSDOC.DocComment("/** This is a foo. */")
20
+ )
21
+ ];
22
+ };
23
+
24
+ FOODOC.publish = function(symbolgroup) {
25
+ LOG.inform("Publishing symbolgroup.");
26
+ };
@@ -0,0 +1,26 @@
1
+ /**
2
+ * This is the main container for the XMLDOC handler.
3
+ * @namespace
4
+ * @author Brett Fattori (bfattori@fry.com)
5
+ * @version $Revision: 498 $
6
+ */
7
+ XMLDOC = {
8
+
9
+ };
10
+
11
+ /** The current version string of this application. */
12
+ XMLDOC.VERSION = "1.0";
13
+
14
+ /** Include the library necessary to handle XML files */
15
+ IO.includeDir("handlers/XMLDOC/");
16
+
17
+ /**
18
+ * @type Symbol[]
19
+ */
20
+ XMLDOC.handle = function(srcFile, src) {
21
+
22
+ };
23
+
24
+ XMLDOC.publish = function(symbolgroup) {
25
+
26
+ }
@@ -0,0 +1,159 @@
1
+ LOG.inform("XMLDOC.DomReader loaded");
2
+
3
+ XMLDOC.DomReader = function(root) {
4
+
5
+ this.dom = root;
6
+
7
+ /**
8
+ * The current node the reader is on
9
+ */
10
+ this.node = root;
11
+
12
+ /**
13
+ * Get the current node the reader is on
14
+ * @type XMLDOC.Parser.node
15
+ */
16
+ XMLDOC.DomReader.prototype.getNode = function() {
17
+ return this.node;
18
+ };
19
+
20
+ /**
21
+ * Set the node the reader should be positioned on.
22
+ * @param node {XMLDOC.Parser.node}
23
+ */
24
+ XMLDOC.DomReader.prototype.setNode = function(node) {
25
+ this.node = node;
26
+ };
27
+
28
+ /**
29
+ * A helper method to make sure the current node will
30
+ * never return null, unless null is passed as the root.
31
+ * @param step {String} An expression to evaluate - should return a node or null
32
+ */
33
+ XMLDOC.DomReader.prototype.navigate = function(step) {
34
+ var n;
35
+ if ((n = step) != null)
36
+ {
37
+ this.node = n;
38
+ return this.node;
39
+ }
40
+ return null;
41
+ };
42
+
43
+ /**
44
+ * Get the root node of the current node's document.
45
+ */
46
+ XMLDOC.DomReader.prototype.root = function() {
47
+ this.navigate(this.dom);
48
+ };
49
+
50
+ /**
51
+ * Get the parent of the current node.
52
+ */
53
+ XMLDOC.DomReader.prototype.parent = function() {
54
+ return this.navigate(this.node.parentNode());
55
+ };
56
+
57
+ /**
58
+ * Get the first child of the current node.
59
+ */
60
+ XMLDOC.DomReader.prototype.firstChild = function() {
61
+ return this.navigate(this.node.firstChild());
62
+ };
63
+
64
+ /**
65
+ * Get the last child of the current node.
66
+ */
67
+ XMLDOC.DomReader.prototype.lastChild = function() {
68
+ return this.navigate(this.node.lastChild());
69
+ };
70
+
71
+ /**
72
+ * Get the next sibling of the current node.
73
+ */
74
+ XMLDOC.DomReader.prototype.nextSibling = function() {
75
+ return this.navigate(this.node.nextSibling());
76
+ };
77
+
78
+ /**
79
+ * Get the previous sibling of the current node.
80
+ */
81
+ XMLDOC.DomReader.prototype.prevSibling = function() {
82
+ return this.navigate(this.node.prevSibling());
83
+ };
84
+
85
+ //===============================================================================================
86
+ // Support methods
87
+
88
+ /**
89
+ * Walk the tree starting with the current node, calling the plug-in for
90
+ * each node visited. Each time the plug-in is called, the DomReader
91
+ * is passed as the only parameter. Use the {@link XMLDOC.DomReader#getNode} method
92
+ * to access the current node. <i>This method uses a depth first traversal pattern.</i>
93
+ *
94
+ * @param srcFile {String} The source file being evaluated
95
+ */
96
+ XMLDOC.DomReader.prototype.getSymbols = function(srcFile)
97
+ {
98
+ XMLDOC.DomReader.symbols = [];
99
+ XMLDOC.DomReader.currentFile = srcFile;
100
+ JSDOC.Symbol.srcFile = (srcFile || "");
101
+
102
+ if (defined(JSDOC.PluginManager)) {
103
+ JSDOC.PluginManager.run("onDomGetSymbols", this);
104
+ }
105
+
106
+ return XMLDOC.DomReader.symbols;
107
+ };
108
+
109
+ /**
110
+ * Find the node with the given name using a depth first traversal.
111
+ * Does not modify the DomReader's current node.
112
+ *
113
+ * @param name {String} The name of the node to find
114
+ * @return the node that was found, or null if not found
115
+ */
116
+ XMLDOC.DomReader.prototype.findNode = function(name)
117
+ {
118
+ var findNode = null;
119
+
120
+ // Start at the current node and move into the subtree,
121
+ // looking for the node with the given name
122
+ function deeper(node, find)
123
+ {
124
+ var look = null;
125
+
126
+ if (node) {
127
+ if (node.name == find)
128
+ {
129
+ return node;
130
+ }
131
+
132
+ if (node.firstChild())
133
+ {
134
+ look = deeper(node.firstChild(), find);
135
+ }
136
+
137
+ if (!look && node.nextSibling())
138
+ {
139
+ look = deeper(node.nextSibling(), find);
140
+ }
141
+ }
142
+
143
+ return look;
144
+ }
145
+
146
+ return deeper(this.getNode().firstChild(), name);
147
+ };
148
+
149
+ /**
150
+ * Find the next node with the given name using a depth first traversal.
151
+ *
152
+ * @param name {String} The name of the node to find
153
+ */
154
+ XMLDOC.DomReader.prototype.findPreviousNode = function(name)
155
+ {
156
+ };
157
+
158
+ };
159
+
@@ -0,0 +1,16 @@
1
+ LOG.inform("XMLDOC.symbolize loaded");
2
+
3
+ /**
4
+ * Convert the source file to a set of symbols
5
+ */
6
+ XMLDOC.symbolize = function(srcFile, src) {
7
+
8
+ LOG.inform("Symbolizing file '" + srcFile + "'");
9
+
10
+ // XML files already have a defined structure, so we don't need to
11
+ // do anything but parse them. The DOM reader can create a symbol
12
+ // table from the parsed XML.
13
+ var dr = new XMLDOC.DomReader(XMLDOC.Parser.parse(src));
14
+ return dr.getSymbols(srcFile);
15
+
16
+ };
@@ -0,0 +1,292 @@
1
+ LOG.inform("XMLDOC.Parser loaded");
2
+
3
+ /**
4
+ * XML Parser object. Returns an {@link #XMLDOC.Parser.node} which is
5
+ * the root element of the parsed document.
6
+ * <p/>
7
+ * By default, this parser will only handle well formed XML. To
8
+ * allow the parser to handle HTML, set the <tt>XMLDOC.Parser.strictMode</tt>
9
+ * variable to <tt>false</tt> before calling <tt>XMLDOC.Parser.parse()</tt>.
10
+ * <p/>
11
+ * <i>Note: If you pass poorly formed XML, it will cause the parser to throw
12
+ * an exception.</i>
13
+ *
14
+ * @author Brett Fattori (bfattori@fry.com)
15
+ * @author $Author: micmath $
16
+ * @version $Revision: 497 $
17
+ */
18
+ XMLDOC.Parser = {};
19
+
20
+ /**
21
+ * Strict mode setting. Setting this to false allows HTML-style source to
22
+ * be parsed. Normally, well formed XML has defined end tags, or empty tags
23
+ * are properly formed. Default: <tt>true</tt>
24
+ * @type Boolean
25
+ */
26
+ XMLDOC.Parser.strictMode = true;
27
+
28
+ /**
29
+ * A node in an XML Document. Node types are ROOT, ELEMENT, COMMENT, PI, and TEXT.
30
+ * @param parent {XMLDOC.Parser.node} The parent node
31
+ * @param name {String} The node name
32
+ * @param type {String} One of the types
33
+ */
34
+ XMLDOC.Parser.node = function(parent, name, type)
35
+ {
36
+ this.name = name;
37
+ this.type = type || "ELEMENT";
38
+ this.parent = parent;
39
+ this.charData = "";
40
+ this.attrs = {};
41
+ this.nodes = [];
42
+ this.cPtr = 0;
43
+
44
+ XMLDOC.Parser.node.prototype.getAttributeNames = function() {
45
+ var a = [];
46
+ for (var o in this.attrs)
47
+ {
48
+ a.push(o);
49
+ }
50
+
51
+ return a;
52
+ };
53
+
54
+ XMLDOC.Parser.node.prototype.getAttribute = function(attr) {
55
+ return this.attrs[attr];
56
+ };
57
+
58
+ XMLDOC.Parser.node.prototype.setAttribute = function(attr, val) {
59
+ this.attrs[attr] = val;
60
+ };
61
+
62
+ XMLDOC.Parser.node.prototype.getChild = function(idx) {
63
+ return this.nodes[idx];
64
+ };
65
+
66
+ XMLDOC.Parser.node.prototype.parentNode = function() {
67
+ return this.parent;
68
+ };
69
+
70
+ XMLDOC.Parser.node.prototype.firstChild = function() {
71
+ return this.nodes[0];
72
+ };
73
+
74
+ XMLDOC.Parser.node.prototype.lastChild = function() {
75
+ return this.nodes[this.nodes.length - 1];
76
+ };
77
+
78
+ XMLDOC.Parser.node.prototype.nextSibling = function() {
79
+ var p = this.parent;
80
+ if (p && (p.nodes.indexOf(this) + 1 != p.nodes.length))
81
+ {
82
+ return p.getChild(p.nodes.indexOf(this) + 1);
83
+ }
84
+ return null;
85
+ };
86
+
87
+ XMLDOC.Parser.node.prototype.prevSibling = function() {
88
+ var p = this.parent;
89
+ if (p && (p.nodes.indexOf(this) - 1 >= 0))
90
+ {
91
+ return p.getChild(p.nodes.indexOf(this) - 1);
92
+ }
93
+ return null;
94
+ };
95
+ };
96
+
97
+ /**
98
+ * Parse an XML Document from the specified source. The XML should be
99
+ * well formed, unless strict mode is disabled, then the parser will
100
+ * handle HTML-style XML documents.
101
+ * @param src {String} The source to parse
102
+ */
103
+ XMLDOC.Parser.parse = function(src)
104
+ {
105
+ var A = [];
106
+
107
+ // Normailize whitespace
108
+ A = src.split("\r\n");
109
+ src = A.join("\n");
110
+ A = src.split("\r");
111
+ src = A.join("\n");
112
+
113
+ // Remove XML and DOCTYPE specifier
114
+ src.replace(/<\?XML .*\?>/i, "");
115
+ src.replace(/<!DOCTYPE .*\>/i, "");
116
+
117
+ // The document is the root node and cannot be modified or removed
118
+ var doc = new XMLDOC.Parser.node(null, "ROOT", "DOCUMENT");
119
+
120
+ // Let's break it down
121
+ XMLDOC.Parser.eat(doc, src);
122
+
123
+ return doc;
124
+ };
125
+
126
+ /**
127
+ * The XML fragment processing routine. This method is private and should not be called
128
+ * directly.
129
+ * @param parentNode {XMLDOC.Parser.node} The node which is the parent of this fragment
130
+ * @param src {String} The source within the fragment to process
131
+ * @private
132
+ */
133
+ XMLDOC.Parser.eat = function(parentNode, src)
134
+ {
135
+ // A simple tag def
136
+ var reTag = new RegExp("<(!|)(\\?|--|)((.|\\s)*?)\\2>","g");
137
+
138
+ // Special tag types
139
+ var reCommentTag = /<!--((.|\s)*?)-->/;
140
+ var rePITag = /<\?((.|\s)*?)\?>/;
141
+
142
+ // A start tag (with potential empty marker)
143
+ var reStartTag = /<(.*?)( +([\w_\-]*)=(\"|')(.*)\4)*(\/)?>/;
144
+
145
+ // An empty HTML style tag (not proper XML, but we'll accept it so we can process HTML)
146
+ var reHTMLEmptyTag = /<(.*?)( +([\w_\-]*)=(\"|')(.*)\4)*>/;
147
+
148
+ // Fully enclosing tag with nested tags
149
+ var reEnclosingTag = /<(.*?)( +([\w_\-]*)=(\"|')(.*?)\4)*>((.|\s)*?)<\/\1>/;
150
+
151
+ // Breaks down attributes
152
+ var reAttributes = new RegExp(" +([\\w_\\-]*)=(\"|')(.*?)\\2","g");
153
+
154
+ // Find us a tag
155
+ var tag;
156
+ while ((tag = reTag.exec(src)) != null)
157
+ {
158
+ if (tag.index > 0)
159
+ {
160
+ // The next tag has some text before it
161
+ var text = src.substring(0, tag.index).replace(/^[ \t\n]+((.|\n)*?)[ \t\n]+$/, "$1");
162
+
163
+ if (text.length > 0 && (text != "\n"))
164
+ {
165
+ var txtnode = new XMLDOC.Parser.node(parentNode, "", "TEXT");
166
+ txtnode.charData = text;
167
+
168
+ // Append the new text node
169
+ parentNode.nodes.push(txtnode);
170
+ }
171
+
172
+ // Reset the lastIndex of reTag
173
+ reTag.lastIndex -= src.substring(0, tag.index).length;
174
+
175
+ // Eat the text
176
+ src = src.substring(tag.index);
177
+ }
178
+
179
+ if (reCommentTag.test(tag[0]))
180
+ {
181
+ // Is this a comment?
182
+ var comment = new XMLDOC.Parser.node(parentNode, "", "COMMENT");
183
+ comment.charData = reCommentTag.exec(tag[0])[1];
184
+
185
+ // Append the comment
186
+ parentNode.nodes.push(comment);
187
+
188
+ // Move the lastIndex of reTag
189
+ reTag.lastIndex -= tag[0].length;
190
+
191
+ // Eat the tag
192
+ src = src.replace(reCommentTag, "");
193
+ }
194
+ else if (rePITag.test(tag[0]))
195
+ {
196
+ // Is this a processing instruction?
197
+ var pi = new XMLDOC.Parser.node(parentNode, "", "PI");
198
+ pi.charData = rePITag.exec(tag[0])[1];
199
+
200
+ // Append the processing instruction
201
+ parentNode.nodes.push(pi);
202
+
203
+ // Move the lastIndex of reTag
204
+ reTag.lastIndex -= tag[0].length;
205
+
206
+ // Eat the tag
207
+ src = src.replace(rePITag, "");
208
+ }
209
+ else if (reStartTag.test(tag[0]))
210
+ {
211
+ // Break it down
212
+ var e = reStartTag.exec(tag[0]);
213
+ var elem = new XMLDOC.Parser.node(parentNode, e[1], "ELEMENT");
214
+
215
+ // Get attributes from the tag
216
+ var a;
217
+ while ((a = reAttributes.exec(e[2])) != null )
218
+ {
219
+ elem.attrs[a[1]] = a[3];
220
+ }
221
+
222
+ // Is this an empty XML-style tag?
223
+ if (e[6] == "/")
224
+ {
225
+ // Append the empty element
226
+ parentNode.nodes.push(elem);
227
+
228
+ // Move the lastIndex of reTag (include the start tag length)
229
+ reTag.lastIndex -= e[0].length;
230
+
231
+ // Eat the tag
232
+ src = src.replace(reStartTag, "");
233
+ }
234
+ else
235
+ {
236
+ // Check for malformed XML tags
237
+ var htmlParsed = false;
238
+ var htmlStartTag = reHTMLEmptyTag.exec(src);
239
+
240
+ // See if there isn't an end tag within this block
241
+ var reHTMLEndTag = new RegExp("</" + htmlStartTag[1] + ">");
242
+ var htmlEndTag = reHTMLEndTag.exec(src);
243
+
244
+ if (XMLDOC.Parser.strictMode && htmlEndTag == null)
245
+ {
246
+ // Poorly formed XML fails in strict mode
247
+ var err = new Error("Malformed XML passed to XMLDOC.Parser... Error contains malformed 'src'");
248
+ err.src = src;
249
+ throw err;
250
+ }
251
+ else if (htmlEndTag == null)
252
+ {
253
+ // This is an HTML-style empty tag, store the element for it in non-strict mode
254
+ parentNode.nodes.push(elem);
255
+
256
+ // Eat the tag
257
+ src = src.replace(reHTMLEmptyTag, "");
258
+ htmlParsed = true;
259
+ }
260
+
261
+ // If we didn't parse HTML-style, it must be an enclosing tag
262
+ if (!htmlParsed)
263
+ {
264
+ var enc = reEnclosingTag.exec(src);
265
+
266
+ // Go deeper into the document
267
+ XMLDOC.Parser.eat(elem, enc[6]);
268
+
269
+ // Append the new element node
270
+ parentNode.nodes.push(elem);
271
+
272
+ // Eat the tag
273
+ src = src.replace(reEnclosingTag, "");
274
+ }
275
+ }
276
+
277
+ // Reset the lastIndex of reTag
278
+ reTag.lastIndex = 0;
279
+ }
280
+ }
281
+
282
+ // No tag was found... append the text if there is any
283
+ src = src.replace(/^[ \t\n]+((.|\n)*?)[ \t\n]+$/, "$1");
284
+ if (src.length > 0 && (src != "\n"))
285
+ {
286
+ var txtNode = new XMLDOC.Parser.node(parentNode, "", "TEXT");
287
+ txtNode.charData = src;
288
+
289
+ // Append the new text node
290
+ parentNode.nodes.push(txtNode);
291
+ }
292
+ };