el4r 1.0.4

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 (249) hide show
  1. data/BUGS +2 -0
  2. data/Changes +2412 -0
  3. data/bin/el4r +26 -0
  4. data/bin/el4r-instance +1105 -0
  5. data/bin/el4r-rctool +279 -0
  6. data/bin/el4r-runtest +26 -0
  7. data/data/emacs/site-lisp/el4r.el +441 -0
  8. data/doc/classes/El4r.html +200 -0
  9. data/doc/classes/El4r.src/M000004.html +25 -0
  10. data/doc/classes/El4r.src/M000005.html +25 -0
  11. data/doc/classes/El4r.src/M000006.html +18 -0
  12. data/doc/classes/El4r.src/M000008.html +25 -0
  13. data/doc/classes/El4r.src/M000009.html +18 -0
  14. data/doc/classes/El4r/ELConsCell.html +145 -0
  15. data/doc/classes/El4r/ELConsCell.src/M000044.html +16 -0
  16. data/doc/classes/El4r/ELConsCell.src/M000046.html +16 -0
  17. data/doc/classes/El4r/ELConsCell.src/M000050.html +16 -0
  18. data/doc/classes/El4r/ELInstance.html +755 -0
  19. data/doc/classes/El4r/ELInstance.src/M000046.html +36 -0
  20. data/doc/classes/El4r/ELInstance.src/M000047.html +41 -0
  21. data/doc/classes/El4r/ELInstance.src/M000048.html +31 -0
  22. data/doc/classes/El4r/ELInstance.src/M000049.html +22 -0
  23. data/doc/classes/El4r/ELInstance.src/M000050.html +25 -0
  24. data/doc/classes/El4r/ELInstance.src/M000051.html +35 -0
  25. data/doc/classes/El4r/ELInstance.src/M000052.html +31 -0
  26. data/doc/classes/El4r/ELInstance.src/M000053.html +23 -0
  27. data/doc/classes/El4r/ELInstance.src/M000054.html +41 -0
  28. data/doc/classes/El4r/ELInstance.src/M000055.html +31 -0
  29. data/doc/classes/El4r/ELInstance.src/M000056.html +43 -0
  30. data/doc/classes/El4r/ELInstance.src/M000057.html +31 -0
  31. data/doc/classes/El4r/ELInstance.src/M000058.html +22 -0
  32. data/doc/classes/El4r/ELInstance.src/M000059.html +25 -0
  33. data/doc/classes/El4r/ELInstance.src/M000060.html +43 -0
  34. data/doc/classes/El4r/ELInstance.src/M000061.html +31 -0
  35. data/doc/classes/El4r/ELInstance.src/M000062.html +22 -0
  36. data/doc/classes/El4r/ELInstance.src/M000063.html +25 -0
  37. data/doc/classes/El4r/ELInstance.src/M000064.html +35 -0
  38. data/doc/classes/El4r/ELInstance.src/M000065.html +23 -0
  39. data/doc/classes/El4r/ELInstance.src/M000066.html +23 -0
  40. data/doc/classes/El4r/ELInstance.src/M000067.html +19 -0
  41. data/doc/classes/El4r/ELInstance.src/M000068.html +18 -0
  42. data/doc/classes/El4r/ELInstance.src/M000069.html +20 -0
  43. data/doc/classes/El4r/ELInstance.src/M000070.html +18 -0
  44. data/doc/classes/El4r/ELInstance.src/M000071.html +19 -0
  45. data/doc/classes/El4r/ELInstance.src/M000072.html +30 -0
  46. data/doc/classes/El4r/ELInstance.src/M000073.html +20 -0
  47. data/doc/classes/El4r/ELInstance.src/M000074.html +20 -0
  48. data/doc/classes/El4r/ELInstance.src/M000075.html +17 -0
  49. data/doc/classes/El4r/ELInstance.src/M000076.html +18 -0
  50. data/doc/classes/El4r/ELInstance.src/M000077.html +21 -0
  51. data/doc/classes/El4r/ELInstance.src/M000078.html +18 -0
  52. data/doc/classes/El4r/ELInstance.src/M000079.html +18 -0
  53. data/doc/classes/El4r/ELInstance.src/M000080.html +35 -0
  54. data/doc/classes/El4r/ELInstance.src/M000081.html +24 -0
  55. data/doc/classes/El4r/ELInstance.src/M000082.html +22 -0
  56. data/doc/classes/El4r/ELInstance.src/M000083.html +21 -0
  57. data/doc/classes/El4r/ELInstance.src/M000084.html +19 -0
  58. data/doc/classes/El4r/ELInstance.src/M000085.html +18 -0
  59. data/doc/classes/El4r/ELInstance.src/M000086.html +21 -0
  60. data/doc/classes/El4r/ELInstance.src/M000087.html +18 -0
  61. data/doc/classes/El4r/ELInstance.src/M000088.html +24 -0
  62. data/doc/classes/El4r/ELInstance.src/M000089.html +23 -0
  63. data/doc/classes/El4r/ELInstance.src/M000090.html +18 -0
  64. data/doc/classes/El4r/ELInstance.src/M000091.html +20 -0
  65. data/doc/classes/El4r/ELInstance.src/M000092.html +18 -0
  66. data/doc/classes/El4r/ELInstance.src/M000093.html +19 -0
  67. data/doc/classes/El4r/ELListCell.html +163 -0
  68. data/doc/classes/El4r/ELListCell.src/M000026.html +16 -0
  69. data/doc/classes/El4r/ELListCell.src/M000027.html +16 -0
  70. data/doc/classes/El4r/ELListCell.src/M000028.html +23 -0
  71. data/doc/classes/El4r/ELListCell.src/M000031.html +16 -0
  72. data/doc/classes/El4r/ELListCell.src/M000032.html +23 -0
  73. data/doc/classes/El4r/ELListCell.src/M000033.html +16 -0
  74. data/doc/classes/El4r/ELListCell.src/M000034.html +23 -0
  75. data/doc/classes/El4r/ELListCell.src/M000037.html +16 -0
  76. data/doc/classes/El4r/ELListCell.src/M000038.html +23 -0
  77. data/doc/classes/El4r/ELMethodsMixin.html +648 -0
  78. data/doc/classes/El4r/ELMethodsMixin.src/M000006.html +27 -0
  79. data/doc/classes/El4r/ELMethodsMixin.src/M000007.html +27 -0
  80. data/doc/classes/El4r/ELMethodsMixin.src/M000008.html +18 -0
  81. data/doc/classes/El4r/ELMethodsMixin.src/M000009.html +18 -0
  82. data/doc/classes/El4r/ELMethodsMixin.src/M000010.html +27 -0
  83. data/doc/classes/El4r/ELMethodsMixin.src/M000011.html +19 -0
  84. data/doc/classes/El4r/ELMethodsMixin.src/M000012.html +18 -0
  85. data/doc/classes/El4r/ELMethodsMixin.src/M000013.html +19 -0
  86. data/doc/classes/El4r/ELMethodsMixin.src/M000014.html +19 -0
  87. data/doc/classes/El4r/ELMethodsMixin.src/M000015.html +18 -0
  88. data/doc/classes/El4r/ELMethodsMixin.src/M000016.html +21 -0
  89. data/doc/classes/El4r/ELMethodsMixin.src/M000017.html +18 -0
  90. data/doc/classes/El4r/ELMethodsMixin.src/M000018.html +23 -0
  91. data/doc/classes/El4r/ELMethodsMixin.src/M000019.html +18 -0
  92. data/doc/classes/El4r/ELMethodsMixin.src/M000020.html +46 -0
  93. data/doc/classes/El4r/ELMethodsMixin.src/M000021.html +18 -0
  94. data/doc/classes/El4r/ELMethodsMixin.src/M000022.html +23 -0
  95. data/doc/classes/El4r/ELMethodsMixin.src/M000023.html +28 -0
  96. data/doc/classes/El4r/ELMethodsMixin.src/M000024.html +46 -0
  97. data/doc/classes/El4r/ELMethodsMixin.src/M000025.html +18 -0
  98. data/doc/classes/El4r/ELMethodsMixin.src/M000026.html +18 -0
  99. data/doc/classes/El4r/ELMethodsMixin.src/M000027.html +28 -0
  100. data/doc/classes/El4r/ELMethodsMixin.src/M000028.html +31 -0
  101. data/doc/classes/El4r/ELMethodsMixin.src/M000029.html +24 -0
  102. data/doc/classes/El4r/ELMethodsMixin.src/M000030.html +18 -0
  103. data/doc/classes/El4r/ELMethodsMixin.src/M000031.html +18 -0
  104. data/doc/classes/El4r/ELMethodsMixin.src/M000032.html +18 -0
  105. data/doc/classes/El4r/ELMethodsMixin.src/M000033.html +18 -0
  106. data/doc/classes/El4r/ELMethodsMixin.src/M000034.html +18 -0
  107. data/doc/classes/El4r/ELMethodsMixin.src/M000035.html +18 -0
  108. data/doc/classes/El4r/ELMethodsMixin.src/M000036.html +25 -0
  109. data/doc/classes/El4r/ELObject.html +235 -0
  110. data/doc/classes/El4r/ELObject.src/M000078.html +19 -0
  111. data/doc/classes/El4r/ELObject.src/M000079.html +18 -0
  112. data/doc/classes/El4r/ELObject.src/M000080.html +19 -0
  113. data/doc/classes/El4r/ELObject.src/M000081.html +18 -0
  114. data/doc/classes/El4r/ELObject.src/M000082.html +19 -0
  115. data/doc/classes/El4r/ELObject.src/M000083.html +18 -0
  116. data/doc/classes/El4r/ELObject.src/M000084.html +18 -0
  117. data/doc/classes/El4r/ELObject.src/M000085.html +18 -0
  118. data/doc/classes/El4r/ELObject.src/M000086.html +20 -0
  119. data/doc/classes/El4r/ELObject.src/M000087.html +19 -0
  120. data/doc/classes/El4r/ELObject.src/M000088.html +20 -0
  121. data/doc/classes/El4r/ELObject.src/M000090.html +19 -0
  122. data/doc/classes/El4r/ELObject.src/M000091.html +19 -0
  123. data/doc/classes/El4r/ELObject.src/M000092.html +18 -0
  124. data/doc/classes/El4r/ELObject.src/M000093.html +19 -0
  125. data/doc/classes/El4r/ELObject.src/M000094.html +18 -0
  126. data/doc/classes/El4r/ELObject.src/M000095.html +18 -0
  127. data/doc/classes/El4r/ELObject.src/M000096.html +18 -0
  128. data/doc/classes/El4r/ELObject.src/M000097.html +19 -0
  129. data/doc/classes/El4r/ELObject.src/M000098.html +18 -0
  130. data/doc/classes/El4r/ELObject.src/M000099.html +18 -0
  131. data/doc/classes/El4r/ELObject.src/M000100.html +18 -0
  132. data/doc/classes/El4r/ELObject.src/M000102.html +19 -0
  133. data/doc/classes/El4r/ELObject.src/M000103.html +20 -0
  134. data/doc/classes/El4r/ELRubyObjectStock.html +283 -0
  135. data/doc/classes/El4r/ELRubyObjectStock.src/M000030.html +21 -0
  136. data/doc/classes/El4r/ELRubyObjectStock.src/M000031.html +22 -0
  137. data/doc/classes/El4r/ELRubyObjectStock.src/M000032.html +22 -0
  138. data/doc/classes/El4r/ELRubyObjectStock.src/M000033.html +42 -0
  139. data/doc/classes/El4r/ELRubyObjectStock.src/M000034.html +19 -0
  140. data/doc/classes/El4r/ELRubyObjectStock.src/M000035.html +22 -0
  141. data/doc/classes/El4r/ELRubyObjectStock.src/M000036.html +22 -0
  142. data/doc/classes/El4r/ELRubyObjectStock.src/M000037.html +22 -0
  143. data/doc/classes/El4r/ELRubyObjectStock.src/M000038.html +22 -0
  144. data/doc/classes/El4r/ELRubyObjectStock.src/M000039.html +17 -0
  145. data/doc/classes/El4r/ELRubyObjectStock.src/M000040.html +17 -0
  146. data/doc/classes/El4r/ELRubyObjectStock.src/M000041.html +22 -0
  147. data/doc/classes/El4r/ELRubyObjectStock.src/M000042.html +22 -0
  148. data/doc/classes/El4r/ELRubyObjectStock.src/M000043.html +17 -0
  149. data/doc/classes/El4r/ELRubyObjectStock.src/M000044.html +17 -0
  150. data/doc/classes/El4r/ELRubyObjectStock.src/M000045.html +46 -0
  151. data/doc/classes/El4r/ELRubyObjectStock.src/M000046.html +19 -0
  152. data/doc/classes/El4r/ELRubyObjectStock.src/M000047.html +21 -0
  153. data/doc/classes/El4r/ELRubyObjectStock.src/M000048.html +19 -0
  154. data/doc/classes/El4r/ELRubyObjectStock.src/M000049.html +18 -0
  155. data/doc/classes/El4r/ELSequence.html +221 -0
  156. data/doc/classes/El4r/ELSequence.src/M000040.html +18 -0
  157. data/doc/classes/El4r/ELSequence.src/M000041.html +18 -0
  158. data/doc/classes/El4r/ELSequence.src/M000042.html +20 -0
  159. data/doc/classes/El4r/ELSequence.src/M000043.html +19 -0
  160. data/doc/classes/El4r/ELSequence.src/M000044.html +18 -0
  161. data/doc/classes/El4r/ELSequence.src/M000045.html +19 -0
  162. data/doc/classes/El4r/ELSequence.src/M000048.html +18 -0
  163. data/doc/classes/El4r/ELSequence.src/M000049.html +20 -0
  164. data/doc/classes/El4r/ELSequence.src/M000050.html +18 -0
  165. data/doc/classes/El4r/ELSequence.src/M000051.html +20 -0
  166. data/doc/classes/El4r/ELSequence.src/M000052.html +19 -0
  167. data/doc/classes/El4r/ELSequence.src/M000053.html +18 -0
  168. data/doc/classes/El4r/ELSequence.src/M000054.html +18 -0
  169. data/doc/classes/El4r/ELSequence.src/M000055.html +20 -0
  170. data/doc/classes/El4r/ELSequence.src/M000056.html +19 -0
  171. data/doc/classes/El4r/ELSequence.src/M000057.html +18 -0
  172. data/doc/classes/El4r/ELSequence.src/M000058.html +19 -0
  173. data/doc/classes/El4r/ELVariables.html +173 -0
  174. data/doc/classes/El4r/ELVariables.src/M000037.html +18 -0
  175. data/doc/classes/El4r/ELVariables.src/M000038.html +18 -0
  176. data/doc/classes/El4r/ELVariables.src/M000039.html +18 -0
  177. data/doc/classes/El4r/ELVariables.src/M000040.html +23 -0
  178. data/doc/classes/El4r/ELVariables.src/M000045.html +18 -0
  179. data/doc/classes/El4r/ELVariables.src/M000046.html +18 -0
  180. data/doc/classes/El4r/ELVariables.src/M000047.html +18 -0
  181. data/doc/classes/El4r/ELVariables.src/M000048.html +18 -0
  182. data/doc/classes/El4r/ELVariables.src/M000049.html +23 -0
  183. data/doc/classes/El4r/ELVariables.src/M000051.html +18 -0
  184. data/doc/classes/El4r/ELVariables.src/M000052.html +18 -0
  185. data/doc/classes/El4r/ELVariables.src/M000053.html +23 -0
  186. data/doc/classes/El4r/ELVector.html +160 -0
  187. data/doc/classes/El4r/ELVector.src/M000028.html +22 -0
  188. data/doc/classes/El4r/ELVector.src/M000029.html +22 -0
  189. data/doc/classes/El4r/ELVector.src/M000030.html +16 -0
  190. data/doc/classes/El4r/ELVector.src/M000033.html +22 -0
  191. data/doc/classes/El4r/ELVector.src/M000034.html +16 -0
  192. data/doc/classes/El4r/ELVector.src/M000035.html +22 -0
  193. data/doc/classes/El4r/ELVector.src/M000036.html +16 -0
  194. data/doc/classes/El4r/ELVector.src/M000039.html +22 -0
  195. data/doc/classes/El4r/ELVector.src/M000040.html +16 -0
  196. data/doc/classes/El4r/El4rOutput.html +175 -0
  197. data/doc/classes/El4r/El4rOutput.src/M000080.html +18 -0
  198. data/doc/classes/El4r/El4rOutput.src/M000081.html +21 -0
  199. data/doc/classes/El4r/El4rOutput.src/M000088.html +18 -0
  200. data/doc/classes/El4r/El4rOutput.src/M000089.html +21 -0
  201. data/doc/classes/El4r/El4rOutput.src/M000090.html +18 -0
  202. data/doc/classes/El4r/El4rOutput.src/M000091.html +21 -0
  203. data/doc/classes/El4r/El4rOutput.src/M000092.html +18 -0
  204. data/doc/classes/El4r/El4rOutput.src/M000094.html +18 -0
  205. data/doc/classes/El4r/El4rOutput.src/M000095.html +21 -0
  206. data/doc/classes/El4r/El4rOutput.src/M000096.html +18 -0
  207. data/doc/classes/El4rAccessor.html +134 -0
  208. data/doc/classes/El4rAccessor.src/M000005.html +18 -0
  209. data/doc/classes/ElApp.html +211 -0
  210. data/doc/classes/ElApp.src/M000001.html +21 -0
  211. data/doc/classes/ElApp.src/M000002.html +17 -0
  212. data/doc/classes/ElApp.src/M000003.html +18 -0
  213. data/doc/classes/ElApp.src/M000004.html +18 -0
  214. data/doc/classes/ElMixin.html +163 -0
  215. data/doc/classes/ElMixin.src/M000001.html +19 -0
  216. data/doc/classes/ElMixin.src/M000002.html +19 -0
  217. data/doc/classes/ElMixin.src/M000003.html +18 -0
  218. data/doc/classes/ElMixin.src/M000004.html +18 -0
  219. data/doc/classes/ElMixin.src/M000006.html +19 -0
  220. data/doc/classes/ElMixin.src/M000007.html +18 -0
  221. data/doc/created.rid +1 -0
  222. data/doc/files/bin/el4r-instance.html +119 -0
  223. data/doc/fr_class_index.html +40 -0
  224. data/doc/fr_file_index.html +27 -0
  225. data/doc/fr_method_index.html +129 -0
  226. data/doc/index.html +24 -0
  227. data/doc/rdoc-style.css +208 -0
  228. data/el4r.en.html +468 -0
  229. data/el4r.ja.html +640 -0
  230. data/files +29 -0
  231. data/lib/el4r/el4r-sub.rb +1023 -0
  232. data/lib/el4r/emacsruby/autoload/70el4r-mode.rb +9 -0
  233. data/lib/el4r/emacsruby/el4r-mode.rb +35 -0
  234. data/lib/el4r/emacsruby/stdlib.rb +37 -0
  235. data/lib/el4r/exec-el4r.rb +182 -0
  236. data/man/el4r.1 +125 -0
  237. data/setup.rb +1551 -0
  238. data/testing/alltest.rb +5 -0
  239. data/testing/badcase.rb +50 -0
  240. data/testing/el4r.e +262 -0
  241. data/testing/euc.txt +1 -0
  242. data/testing/jis.txt +1 -0
  243. data/testing/sjis.txt +1 -0
  244. data/testing/test-el4r.rb +1053 -0
  245. data/testing/test-gc.rb +81 -0
  246. data/testing/test.el +16 -0
  247. data/testing/test.rb +97 -0
  248. data/testing/utf8.txt +1 -0
  249. metadata +311 -0
@@ -0,0 +1,5 @@
1
+ (ENV['TESTS'] || '').split(/:/).each {|p|
2
+ Dir[File.expand_path(p)].each {|rb|
3
+ load rb
4
+ }
5
+ }
@@ -0,0 +1,50 @@
1
+ #!/usr/bin/env ruby
2
+ require 'test/unit'
3
+
4
+ class Foo
5
+ include ElMixin
6
+
7
+ def foo
8
+ bar
9
+ end
10
+
11
+ def bar
12
+ baz
13
+ end
14
+
15
+ def baz
16
+ el{
17
+ point
18
+ hoge # LispError
19
+ }
20
+ end
21
+ end
22
+
23
+
24
+ class TestEl4rBadCase < Test::Unit::TestCase
25
+ include ElMixin
26
+
27
+ def setup
28
+ end
29
+
30
+ def teardown
31
+
32
+ end
33
+
34
+ def test_1
35
+ el {
36
+ with(:with_current_buffer, "*scratch*"){
37
+ buffer_string 1
38
+ }
39
+ }
40
+ end
41
+
42
+ def test_2
43
+ el {
44
+ buffer_string 1
45
+ }
46
+ end
47
+
48
+
49
+
50
+ end
@@ -0,0 +1,262 @@
1
+ #######
2
+ #
3
+ # E-scripts about el4r.
4
+ #
5
+ #######
6
+
7
+ # (eeindex)
8
+ ## INDEX
9
+ ## (to "lisp")
10
+ ## (to "test about define-derived-mode")
11
+ ## (to "test-derived")
12
+ ## (to "test about autoload")
13
+ ## (to "el4r-mode-with-ruby-mode")
14
+ ## (to "el4r-mode-without-ruby-mode")
15
+ ## (to "test about after-init-hook / ruby-mode")
16
+ ## (to "after-init-hook-test")
17
+ ## (to "%s")
18
+
19
+  (eevnow "cd ~/src/el4r")
20
+
21
+ #### lisp
22
+ #
23
+ # (eeb-el4r)
24
+ prc = lambda{ ["1","2"] }
25
+ defun(:fx, :interactive=>prc){|x,y| message x.class.inspect}
26
+ call_interactively :fx
27
+ fx(1)
28
+ fx(1,2)
29
+ #
30
+
31
+ ;;
32
+ ;; (eeb-eval)
33
+ (defun fgg (x)
34
+ (interactive (eval '(list 1)))
35
+ (message "%d" x))
36
+ (call-interactively 'fgg)
37
+ ;;
38
+
39
+ ;;
40
+ ;; (eeb-eval)
41
+ (defun fgh (x)
42
+ (interactive (list "1"))
43
+ (message x))
44
+ (call-interactively 'fgh)
45
+ ;;
46
+
47
+
48
+ #
49
+ # (eeb-el4r)
50
+
51
+ #
52
+
53
+
54
+ #### test about define-derived-mode
55
+ # (view-fline "/log/el4rlog")
56
+
57
+ # define_derived_mode OK
58
+  (eevnow-at "test-derived")
59
+  (eech "xmake-garbage\n")
60
+ xbar-mode
61
+  (eech "xkill-emacs\n")
62
+
63
+ # with NG!
64
+  (eevnow-at "test-derived")
65
+  (eech "xmake-garbage\n")
66
+ xfoo-mode
67
+  (eech "xkill-emacs\n")
68
+
69
+
70
+
71
+ #
72
+ # test-derived
73
+ # (eevnow-bounded)
74
+ cd ~/src/el4r
75
+ <<'%%%' > $EERUBY
76
+ el4r_rubyobj_stock.gc_trigger_count = 10
77
+ el4r_rubyobj_stock.gc_trigger_increment = 20
78
+
79
+
80
+ require 'bell'
81
+ class << el4r_rubyobj_stock
82
+ def pre_gc_hook
83
+ message "gc start (#{@oid_to_obj_hash.keys.length})"
84
+ end
85
+
86
+ def post_gc_hook
87
+ message "gc end (#{count_of_stocked_objects})"
88
+ end
89
+ end
90
+
91
+ $passed = 0
92
+ with(:define_derived_mode, el(:foo_mode), el(:fundamental_mode), "Foo") do
93
+ $passed += 1
94
+ end
95
+
96
+ define_derived_mode(:bar_mode, :fundamental_mode, "Bar") do
97
+ $passed += 1000
98
+ end
99
+
100
+ defun(:make_garbage, :interactive=>true) do
101
+ 10.times {
102
+ el4r_lisp_eval(el4r_ruby2lisp(Object.new))
103
+ }
104
+ end
105
+
106
+
107
+ self.el4r_is_debug = true
108
+
109
+ %%%
110
+ el4r -r. -l /log/el4rlog $EERUBY
111
+ #
112
+
113
+
114
+ #### test about autoload
115
+  (eevnow-at "el4r-mode-with-ruby-mode")
116
+  (eech "xkill-emacs\n")
117
+
118
+  (eevnow-at "el4r-mode-without-ruby-mode")
119
+ xlanghelp
120
+  (eech "print-length\C-f")
121
+  (eech "l")
122
+  (eech "xkill-emacs\n")
123
+
124
+
125
+ #
126
+ # el4r-mode-with-ruby-mode
127
+ cd ~/src/el4r
128
+ <<'%%%' > $EERUBY
129
+ el4r_process_autoloads
130
+ add_to_list :load_path, "~/emacs/lisp"
131
+ el4r_lisp_eval %((autoload 'ruby-mode "ruby-mode" "" t)) # '
132
+ ruby_mode
133
+ el4r_mode
134
+ %%%
135
+ el4r -r. $EERUBY
136
+ #
137
+
138
+ #
139
+ # el4r-mode-without-ruby-mode
140
+ cd ~/src/el4r
141
+ <<'%%%' > $EERUBY
142
+ el4r_process_autoloads
143
+ # el4r_mode
144
+ %%%
145
+ el4r -r. $EERUBY
146
+ #
147
+
148
+
149
+ #### test about after-init-hook / ruby-mode
150
+  (eevnow-at "after-init-hook-test")
151
+ pseudo-home
152
+ invoke-emacs
153
+  (eech "\exel4r-mode\n")
154
+  (eech "\exkill-emacs\n")
155
+ invoke-emacs-without-ruby-mode
156
+  (eech "\exkill-emacs\n")
157
+ restore-home
158
+
159
+
160
+ #
161
+ # after-init-hook-test
162
+ cd ~/src/el4r
163
+
164
+ pseudo-home () {
165
+ tmpdir
166
+ oldhome=$HOME
167
+ export HOME=`pwd`
168
+ }
169
+
170
+ restore-home () {
171
+ export HOME=$oldhome
172
+ tmpdir-clean
173
+ }
174
+
175
+ invoke-emacs () {
176
+ el4r-rctool -p ; el4r-rctool -i; cp -a /home/rubikitch/.langhelp/ .;
177
+
178
+ <<'%%%' > ~/.emacs
179
+ (add-to-list 'load-path "/home/rubikitch/src/el4r/data/emacs/site-lisp/")
180
+ (add-to-list 'load-path "/home/rubikitch/emacs/lisp")
181
+
182
+ (add-to-list 'load-path "/tmp/tmpdir00/elisp")
183
+ (require 'el4r)
184
+ ;; suppress loading ~/.el4r/init.rb
185
+ (el4r-boot t)
186
+ (el4r-ruby-eval "el4r_process_autoloads")
187
+
188
+ %%%
189
+
190
+ emacs -nw -no-site-file
191
+ }
192
+
193
+ invoke-emacs-without-ruby-mode () {
194
+ el4r-rctool -p ; el4r-rctool -i; cp -a /home/rubikitch/.langhelp/ .;
195
+
196
+ <<'%%%' > ~/.emacs
197
+ (add-to-list 'load-path "/home/rubikitch/src/el4r/data/emacs/site-lisp/")
198
+
199
+ (add-to-list 'load-path "/tmp/tmpdir00/elisp")
200
+ (require 'el4r)
201
+ ;; suppress loading ~/.el4r/init.rb
202
+ (el4r-boot t)
203
+ (el4r-ruby-eval "el4r_process_autoloads")
204
+
205
+ %%%
206
+
207
+ emacs -nw -no-site-file
208
+ }
209
+
210
+
211
+ #
212
+
213
+ cons cell
214
+ # (eeel4r "el4r_prin1_to_string(cons(1,2))")
215
+ # (eeel4r "cons(1,2).inspect")
216
+ # (nth 0 '(1 2))
217
+ # (nth 1 '(1 2))
218
+ # (cdr '(1 2))
219
+
220
+ # (nth 0 '(1 . 2))
221
+ # (nth 1 '(1 . 2))
222
+ # (cdr '(1 . 2))
223
+ # '(1 2 . 3)
224
+
225
+ # (eeel4r "list(1,2,cons(3,4)).inspect")
226
+ # (eeel4r "list(1,2,cons(3,4))")
227
+ # (eeel4r "cons(1,cons(2,3))")
228
+ # (eeel4r "cons(1,cons(2,3)).inspect")
229
+ # (cons 1 (cons 2 3 ))
230
+ # (el4r-list-to-rubyary (cons 1 (cons 2 3 )))
231
+ # (el4r-list-to-rubyary (list 2 3 ))
232
+ # (mapconcat 'el4r-lisp2ruby '(1 2) ", ")
233
+ # (mapconcat 'el4r-lisp2ruby '(1 . 2) ", ")
234
+ # (mapconcat 'el4r-lisp2ruby '(1 2 . 3) ", ")
235
+ # (listp '(1 2 . 3))
236
+ # (length '(1 2 . 3))
237
+ # (safe-length '(1 2 . 3))
238
+ # (nthcdr 2 '(1 2 . 3))
239
+ # '(1 2 3 . 4)
240
+ # (list 1 2 (cons 3 4))
241
+ # (eeel4r "el4r_lisp_eval(%!'(1 2 . 3)!).inspect")
242
+ # (car '(1 2 . 3))
243
+ # (cdr '(1 2 . 3))
244
+
245
+ pymacs-proper-list-p: nil, proper-list OK / cons NG
246
+
247
+ # (pymacs-proper-list-p nil)
248
+ # (pymacs-proper-list-p '(1 2))
249
+ # (pymacs-proper-list-p '(1 . 2))
250
+ # (pymacs-proper-list-p '(1 2 . 3))
251
+
252
+ # (last '(1 2))
253
+ # (last '(1 2 . 3))
254
+
255
+
256
+
257
+
258
+
259
+ Local Variables:
260
+ truncate-lines: t
261
+ ee-anchor-format: "%s"
262
+ End:
@@ -0,0 +1 @@
1
+ ���ܸ�
@@ -0,0 +1 @@
1
+ $BF|K\8l(B
@@ -0,0 +1 @@
1
+ ���{��
@@ -0,0 +1,1053 @@
1
+ # el4r - EmacsLisp for Ruby
2
+ # Copyright (C) 2005 rubikitch <rubikitch@ruby-lang.org>
3
+ # Version: $Id: test-el4r.rb 1328 2006-08-14 21:10:57Z rubikitch $
4
+
5
+ # This program is free software; you can redistribute it and/or modify
6
+ # it under the terms of the GNU General Public License as published by
7
+ # the Free Software Foundation; either version 2 of the License, or
8
+ # (at your option) any later version.
9
+ #
10
+ # This program is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU General Public License for more details.
14
+ #
15
+ # You should have received a copy of the GNU General Public License
16
+ # along with this program; if not, write to the Free Software
17
+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
+
19
+ require 'test/unit'
20
+
21
+ require 'tempfile'
22
+ require 'tmpdir'
23
+ require 'pathname'
24
+ require 'fileutils'
25
+ class << Tempfile
26
+ def path(content, dir=Dir.tmpdir)
27
+ x = Tempfile.open("content", dir)
28
+ x.write content
29
+ x.close
30
+ x.open
31
+ x.path
32
+ end
33
+
34
+ def pathname(content, dir=Dir.tmpdir)
35
+ Pathname.new(path(content, dir=Dir.tmpdir))
36
+ end
37
+ end
38
+
39
+
40
+ # El4r self test.
41
+ ## (eevnow "cat `buffer-file-name` | awk '/ def test_/{print $2}'|result-long")
42
+ class TestEl4r < Test::Unit::TestCase
43
+ # ElMixin is already included/extended.
44
+ # So we can write EmacsRuby in this class.
45
+
46
+ # Testing ELListCell#to_ary.
47
+ # This method enables us to multiple assignment.
48
+ def test_to_ary
49
+ list = el4r_lisp_eval(%q((list 1 2)))
50
+ one, two = list
51
+
52
+ assert_equal(list.to_a, list.to_ary)
53
+ assert_equal(1, one)
54
+ assert_equal(2, two)
55
+ end
56
+
57
+ # Testing with and match-string.
58
+ def test_match_string
59
+ lisp = %q((progn
60
+ (switch-to-buffer "a")
61
+
62
+ (save-excursion
63
+ (insert "abcdefg\n")
64
+ (goto-char 1)
65
+ (re-search-forward "^\\\\(.+\\\\)$")
66
+ )
67
+ (match-string 1)))
68
+
69
+ ruby = lambda{
70
+ ##### [with]
71
+ with(:save_excursion) do
72
+ goto_char 1
73
+ re_search_forward('^\\(.+\\)$')
74
+ end
75
+ match_string 1
76
+ ##### [/with]
77
+ }
78
+ assert_equal(el4r_lisp_eval(lisp), ruby[])
79
+
80
+ end
81
+
82
+
83
+ # helper method:
84
+ # execute a block with temporary buffer.
85
+ # and return the contents of buffer.
86
+ def with_temp_buffer_string(&block)
87
+ with(:with_temp_buffer){
88
+ self.instance_eval(&block)
89
+ buffer_string
90
+ }
91
+ end
92
+
93
+ # this test was in test.el
94
+ def test_test_el__debug_ruby_eval_report
95
+ actual = with_temp_buffer_string {
96
+ el4r_lisp_eval %q((progn
97
+ (el4r-debug-ruby-eval-report "nil")
98
+ (el4r-debug-ruby-eval-report "true")
99
+ (el4r-debug-ruby-eval-report "false")
100
+ (el4r-debug-ruby-eval-report "1 + 6")
101
+ (el4r-debug-ruby-eval-report "\"String\"")
102
+ ))
103
+ }
104
+ expected = <<EOB
105
+ nil
106
+ => nil
107
+ true
108
+ => t
109
+ false
110
+ => nil
111
+ 1 + 6
112
+ => 7
113
+ "String"
114
+ => "String"
115
+ EOB
116
+ assert_equal(expected, actual)
117
+ end
118
+
119
+ def test_test_el__condition_case
120
+
121
+ # (mode-info-describe-function 'signal 'elisp)
122
+ # (mode-info-describe-function 'condition-case 'elisp)
123
+ el4r_lisp_eval %q((progn
124
+ (put 'test-error
125
+ 'error-conditions
126
+ '(error test-error))
127
+ (put 'test-error 'error-message "Test Error")
128
+ ))
129
+ #'
130
+ el4r_lisp_eval %q((progn
131
+ (setq error-desc nil)
132
+ (condition-case err
133
+ (signal 'test-error '(123))
134
+ (test-error (setq error-desc (format "Error is passed: %s" err)))
135
+ )
136
+ ))
137
+ #'
138
+ assert_equal("Error is passed: (test-error 123)", elvar.error_desc)
139
+
140
+ el4r_lisp_eval %q((progn
141
+ (setq error-desc nil)
142
+ (condition-case err
143
+ (el4r-ruby-eval "el4r_lisp_eval(\"(signal 'test-error '(123))\")")
144
+ (test-error (setq error-desc (format "Error is passed: %s" err)))
145
+ )
146
+ ))
147
+ #'
148
+ assert_equal("Error is passed: (test-error 123)", elvar.error_desc)
149
+ end
150
+
151
+ # eval test
152
+ def test_el4r_eval
153
+ result = with_temp_buffer_string{
154
+ el4r_lisp_eval(<<'EOF')
155
+ (insert-string (el4r-ruby-eval "\"Hello from ruby from emacs from ruby!\n\""))
156
+ EOF
157
+ }
158
+ assert_equal("Hello from ruby from emacs from ruby!\n", result)
159
+ assert_equal(true, el4r_lisp_eval('t'))
160
+ end
161
+
162
+
163
+ # list: cons, car/cdr
164
+ def test_list
165
+ list = el("'(3 2 1)")
166
+ list = cons(4, list)
167
+ assert_equal("(4 3 2 1)", prin1_to_string(list))
168
+
169
+ ary = []
170
+ while list
171
+ ary << car(list)
172
+ list = cdr(list)
173
+ end
174
+ assert_equal("[4, 3, 2, 1]", ary.inspect)
175
+ end
176
+
177
+ # pass a Ruby object to Emacs
178
+ def test_object
179
+ obj = Object.new
180
+ assert_equal("Is ruby object passed? ... true",
181
+ "Is ruby object passed? ... #{car(cons(obj, nil)) == obj}")
182
+ end
183
+
184
+
185
+
186
+ # Using defun ( Proc -> Lambda conversion )
187
+ def test_defun_function
188
+ defun(:my_ruby_func) { |a|
189
+ 0
190
+ }
191
+ # redefine
192
+ defun(:my_ruby_func) { |a|
193
+ "String from my_ruby_func: '#{a}'"
194
+ }
195
+ assert_equal("String from my_ruby_func: 'Hello!'", my_ruby_func("Hello!"))
196
+ end
197
+
198
+ # defun a command
199
+ def test_defun_command_1
200
+ defun(:my_command, :interactive => true) {
201
+ insert_string("My Interactive command from Ruby."); newline
202
+ }
203
+
204
+ assert_equal("My Interactive command from Ruby.\n",
205
+ with_temp_buffer_string{ call_interactively(:my_command) })
206
+
207
+ end
208
+
209
+ # defun a command with docstring
210
+ def test_defun_command_2
211
+ ##### [my_command2]
212
+ defun(:my_command2,
213
+ :interactive => "d", :docstring => "description...") { |point|
214
+ insert_string("Current point is #{point}."); newline
215
+ }
216
+ ##### [/my_command2]
217
+ assert_equal("d", nth(1, commandp(:my_command2)))
218
+ assert_equal("description...", documentation(:my_command2))
219
+ assert_equal("Current point is 1.\n",
220
+ with_temp_buffer_string{ call_interactively(:my_command2) })
221
+ end
222
+
223
+ # defun a command with lambda
224
+ def test_defun_command_3
225
+ sum = nil
226
+ ##### [my_command3]
227
+ interactive_proc = lambda { [1+1, 1] }
228
+ defun(:my_command3,
229
+ :interactive => interactive_proc) { |a, b|
230
+ sum = a + b
231
+ }
232
+ ##### [/my_command3]
233
+ assert_equal nil, sum
234
+ call_interactively :my_command3
235
+ assert_equal 3, sum
236
+ end
237
+
238
+ # defining odd-named function
239
+ def test_defun_oddname
240
+ # Lisp can define `1+1' function! LOL
241
+ defun("1+1"){2}
242
+ assert_equal(2, funcall("1+1"))
243
+ end
244
+
245
+ # Calling lambda
246
+ def test_lambda
247
+ lambda = el4r_lisp_eval("(lambda (i) (+ i 1))")
248
+ assert_equal(2, funcall(lambda, 1))
249
+ end
250
+
251
+ # Calling special form like save-excursion
252
+ def test_with
253
+ x = with_temp_buffer_string {
254
+ insert_string("a\n")
255
+ with(:save_excursion) {
256
+ beginning_of_buffer
257
+ insert_string("This is inserted at the beginning of buffer."); newline
258
+ }
259
+ }
260
+ assert_equal("This is inserted at the beginning of buffer.\na\n", x)
261
+ end
262
+
263
+ # ELListCell
264
+ def test_ELListCell
265
+ assert_equal([1, 2], cons(1, cons(2, nil)).to_a )
266
+ assert_equal([10,20], el4r_lisp_eval(%((list 1 2))).map{|x| x*10})
267
+
268
+ assert_equal({'a'=>1, 'b'=>2}, list(cons("a",1), cons("b", 2)).to_hash)
269
+ assert_raises(TypeError){ list(cons("a",1), "b", "c").to_hash }
270
+
271
+ assert_equal("ELListCell[1]", list(1).inspect)
272
+ assert_equal("ELListCell[1, 2]", list(1,2).inspect)
273
+ end
274
+
275
+ # ELConsCell
276
+ def test_ELConsCell
277
+ assert_equal([1,2], el4r_cons_to_rubyary(cons(1,2)))
278
+ assert_equal("ELConsCell[1, 2]", cons(1,2).inspect)
279
+
280
+ assert_equal("ELListCell[1, 2, ELConsCell[3, 4]]", list(1,2,cons(3,4)).inspect)
281
+ assert_equal("ELListCell[1, 2]", cons(1, list(2)).inspect)
282
+ end
283
+
284
+ # ELVector
285
+ def test_ELVector
286
+ v = el4r_lisp_eval("[1 2]")
287
+ assert( vectorp(v) )
288
+ assert_equal("ELVector[1, 2]", v.inspect)
289
+ assert_equal(1, v[0])
290
+ assert_equal(1, v[-2])
291
+ assert_raises(ArgumentError) { v[2] } # index is too large
292
+ assert_raises(TypeError) { v["X"] }
293
+
294
+ assert_equal([1, 2], v[0,2])
295
+ assert_equal([1, 2], v.to_a)
296
+
297
+ # Enumerable
298
+ assert_equal(1, v.find{|x| x==1})
299
+
300
+ # to_ary
301
+ one, = v
302
+ assert_equal(1, one)
303
+
304
+ # aset
305
+ elvar.v = v
306
+ assert_equal(10, v[0]=10)
307
+ assert_equal(10, v[0])
308
+ assert_equal([10,2], v.to_a)
309
+ assert_equal(10, elvar.v[0])
310
+ assert_equal([10,2], elvar.v.to_a)
311
+ assert_raises(ArgumentError) { v[2]=3 } # index is too large
312
+ assert_raises(TypeError) { v["X"]=1 }
313
+
314
+ v[-1]=20
315
+ assert_equal([10,20], elvar.v.to_a)
316
+ end
317
+
318
+ # Accessing to lisp variables with elvar
319
+ def test_elvar
320
+ elvar.myvar = 123
321
+ assert_equal(123, elvar.myvar)
322
+
323
+ elvar["myvar"] = 456
324
+ assert_equal(456, elvar["myvar"])
325
+
326
+ assert( elvar.myvar == elvar["myvar"] )
327
+ end
328
+
329
+ # get/set an odd-named variable
330
+ def test_elvar__oddname
331
+ elvar["*an/odd+variable!*"] = 10
332
+ assert_equal(10, elvar["*an/odd+variable!*"])
333
+ end
334
+
335
+ # Error passing
336
+ def test_error
337
+ assert_raises(RuntimeError) {
338
+ el4r_lisp_eval(<<-'EOF')
339
+ (el4r-ruby-eval "raise \"Is error handled correctly?\""))
340
+ EOF
341
+ }
342
+ end
343
+
344
+ # let
345
+ def test_let
346
+ elvar.testval = 12
347
+ testval_in_letblock = nil
348
+ let(:testval, 24) {
349
+ testval_in_letblock = elvar.testval
350
+ }
351
+
352
+ assert_equal(24, testval_in_letblock)
353
+ assert_equal(12, elvar.testval)
354
+ end
355
+
356
+ # Regexp convert: Convert Ruby regexps to MESSY Emacs regexps.
357
+ def test_regexp
358
+ # (find-node "(emacs-ja)Regexps")
359
+
360
+ conv = lambda{|from,to| assert_equal(to, el4r_conv_regexp(from)) }
361
+ conv[ //, '' ]
362
+ conv[ /a/, 'a' ]
363
+ conv[ /a./, 'a.' ]
364
+ conv[ /a*/, 'a*' ]
365
+ conv[ /a+/, 'a+' ]
366
+ conv[ /a?/, 'a?' ]
367
+ conv[ /[ab]/, '[ab]' ]
368
+ conv[ /[^ab]/, '[^ab]' ]
369
+ conv[ /^ab/, '^ab' ]
370
+ conv[ /ab$/, 'ab$' ]
371
+ conv[ /a|b/, 'a\|b' ]
372
+ conv[ /(ab)/, '\(ab\)' ]
373
+ conv[ /\As/, '\`s' ]
374
+ conv[ /s\Z/, %q[s\'] ]
375
+ # \=
376
+ conv[ /\bball\B/, '\bball\B']
377
+ # \<
378
+ # \>
379
+ conv[ /\w/, '[0-9A-Za-z_]']
380
+ conv[ /\W/, '[^0-9A-Za-z_]']
381
+ # \sC
382
+ # \SC
383
+ # \D (number)
384
+ end
385
+
386
+ # Now you can specify a Ruby regexp to string-match, re-search-forward and so on
387
+ def test_string_match
388
+ s = "a"
389
+ assert_equal(0, string_match("a", s))
390
+ assert_equal(0, string_match(/a/, s))
391
+ assert_equal(0, string_match('\(a\|\b\)', s))
392
+ assert_equal(0, string_match(/a|b/, s))
393
+ assert_equal(0, string_match(/^a/, s))
394
+ assert_equal(0, string_match(/a$/, s))
395
+ assert_equal(0, string_match(/.*/, s))
396
+ assert_equal(nil, string_match(/not-match/, s))
397
+
398
+ end
399
+
400
+ # ElMixin: elisp {}
401
+ def test_elmixin
402
+ eval %{
403
+ class ::Foo
404
+ include ElMixin
405
+ def foo
406
+ elisp {
407
+ [self.class, outer.class]
408
+ }
409
+ end
410
+
411
+ def one
412
+ 1
413
+ end
414
+ end
415
+
416
+ }
417
+
418
+ el4r, outer = Foo.new.foo
419
+ assert_equal(El4r::ELInstance, el4r)
420
+ assert_equal(Foo, outer)
421
+ end
422
+
423
+ # EL error
424
+ def test_elerror
425
+ errormsg = nil
426
+ begin
427
+ el4r_lisp_eval(%q((defun errorfunc0 ())))
428
+ with(:with_current_buffer, "*scratch*"){
429
+ let(:x, 1) {
430
+ with(:save_excursion){
431
+ errorfunc0 1 # wrong number of argument!!
432
+ }
433
+ }
434
+ }
435
+ flunk
436
+ rescue
437
+ errormsg = $!.to_s
438
+ end
439
+
440
+ assert_match(/\n\(errorfunc0.+save-excursion.+let.+with-current-buffer.+$/m, errormsg.to_s)
441
+ end
442
+
443
+ # to_s: Implicitly call prin1_to_string
444
+ def test_to_s
445
+ list = funcall(:list,1)
446
+ assert_equal("(1)", "#{list}")
447
+ assert_equal( prin1_to_string(list), list.to_s)
448
+ end
449
+
450
+ # defadvice 1
451
+ def test_defadvice_1
452
+ defun(:adtest1){
453
+ elvar.v = 1
454
+ }
455
+ with(:defadvice, el("adtest1 (after adv activate)")){
456
+ elvar.v = 2
457
+ }
458
+ adtest1
459
+
460
+ assert_equal(2, elvar.v)
461
+ end
462
+
463
+ # defadvice 2
464
+ def test_defadvice_2
465
+ elvar.w = 0
466
+ elvar.x = 0
467
+ defun(:adtest_2){
468
+ elvar.w += 1
469
+ 3
470
+ }
471
+ defadvice(:adtest_2, :around, :adv2, :activate) {
472
+ ad_do_it
473
+ elvar.x = 10
474
+ ad_do_it
475
+ }
476
+ ret = adtest_2()
477
+
478
+ assert_equal(2, elvar.w)
479
+ assert_equal(10, elvar.x)
480
+ assert_equal(3, ret)
481
+ end
482
+
483
+ # defadvice 3
484
+ def test_defadvice_3
485
+ begin
486
+ ##### [adtest3]
487
+ # define a function
488
+ defun(:adtest3){ 1 }
489
+ ##### [/adtest3]
490
+ assert_equal(1, adtest3())
491
+ assert_equal(nil, commandp(:adtest3))
492
+
493
+ ##### [adtest3-advice]
494
+ # now define an advice
495
+ defadvice(:adtest3, :around, :adv3, :activate,
496
+ :docstring=>"test advice", :interactive=>true) {
497
+ ad_do_it
498
+ elvar.ad_return_value = 2
499
+ }
500
+ ##### [/ad_return_value]
501
+ assert(commandp(:adtest3))
502
+ assert_equal(2, adtest3())
503
+ assert_match(/test advice/, documentation(:adtest3))
504
+ ensure
505
+ ad_deactivate :adtest3
506
+ # fmakunbound :adtest3
507
+ end
508
+ end
509
+
510
+ # bufstr
511
+ def test_bufstr
512
+ s = bufstr(newbuf(:name=>"axx", :contents=>"foo!"))
513
+ assert_equal("foo!", s)
514
+
515
+ newbuf(:name=>"axxg", :contents=>"bar!", :current=>true)
516
+ s = bufstr
517
+ assert_equal("bar!", s)
518
+ end
519
+
520
+ def xtest_ad_do_it_invalid
521
+ assert_raises(El4r::El4rError){
522
+ ad_do_it
523
+ }
524
+ end
525
+
526
+ # el_load
527
+ def test_el_load
528
+ begin
529
+ el = File.expand_path("elloadtest.el")
530
+ open(el, "w"){|w| w.puts(%q((setq elloadtest 100)))}
531
+ el_load(el)
532
+ assert_equal(100, elvar.elloadtest)
533
+ ensure
534
+ File.unlink el
535
+ end
536
+ end
537
+
538
+ # equality
539
+ def test_EQUAL
540
+ b1 = current_buffer
541
+ b2 = current_buffer
542
+ assert(b1 == b1)
543
+ assert(b1 == b2)
544
+ assert_equal(b1,b2)
545
+ end
546
+
547
+ # test delete-other-windows workaround in xemacs
548
+ def test_delete_other_windows
549
+ w = selected_window
550
+ elvar.window_min_height = 1
551
+ split_window
552
+ split_window
553
+ delete_other_windows
554
+ assert(one_window_p)
555
+ assert(eq(w, selected_window))
556
+ end
557
+
558
+ # Lisp string -> Ruby string special case
559
+ def test_el4r_lisp2ruby__normal
560
+ cmp = lambda{|str| assert_equal(str, eval(el4r_lisp2ruby(str)))}
561
+ # (mode-info-describe-function 'prin1-to-string 'elisp)
562
+ # (string= "\021" (el4r-ruby-eval (el4r-lisp2ruby "\021")))
563
+
564
+ cmp[ "" ]
565
+ cmp[ "a"*9999 ]
566
+ cmp[ '1' ]
567
+ cmp[ 'a' ]
568
+ cmp[ '\\' ]
569
+ cmp[ '\\\\' ]
570
+ cmp[ '\\\\\\' ]
571
+ cmp[ '""' ]
572
+ cmp[ '"' ]
573
+ cmp[ "''" ]
574
+ cmp[ '#{1}' ]
575
+ cmp[ '\#{1}' ]
576
+ cmp[ '#{\'1\'}' ]
577
+ cmp[ '#@a' ]
578
+ cmp[ "\306\374\313\334\270\354" ] # NIHONGO in EUC-JP
579
+ end
580
+
581
+ def test_el4r_lisp2ruby__treat_ctrl_codes
582
+ cmp = lambda{|str| assert_equal(str, eval(el4r_lisp2ruby(str)))}
583
+ elvar.coding_system_for_write :binary
584
+ elvar.coding_system_for_write :binary
585
+ set_buffer_file_coding_system :binary
586
+ el4r_treat_ctrl_codes {
587
+ cmp[ "" ]
588
+ cmp[ "a"*9999 ]
589
+ cmp[ '1' ]
590
+ cmp[ 'a' ]
591
+ cmp[ '\\' ]
592
+ cmp[ '\\\\' ]
593
+ cmp[ '\\\\\\' ]
594
+ cmp[ '""' ]
595
+ cmp[ '"' ]
596
+ cmp[ "''" ]
597
+ cmp[ '#{1}' ]
598
+ cmp[ '\#{1}' ]
599
+ cmp[ '#{\'1\'}' ]
600
+ cmp[ '#@a' ]
601
+
602
+ cmp[ "\ca" ]
603
+ cmp[ "\cb" ]
604
+ cmp[ "\cc" ]
605
+ cmp[ "\cd" ]
606
+ cmp[ "\ce" ]
607
+ cmp[ "\cf" ]
608
+ cmp[ "\cg" ]
609
+ cmp[ "\ch" ]
610
+ cmp[ "\ci" ]
611
+ cmp[ "\cj" ]
612
+ cmp[ "\ck" ]
613
+ cmp[ "\cl" ]
614
+ # C-m
615
+ # cmp[ "\cn" ] failed on xemacs
616
+ # cmp[ "\co" ] failed on xemacs
617
+ cmp[ "\cp" ]
618
+ cmp[ "\cq" ]
619
+ # C-r
620
+ cmp[ "\cs" ]
621
+ cmp[ "\ct" ]
622
+ cmp[ "\cu" ]
623
+ cmp[ "\cv" ]
624
+ cmp[ "\cw" ]
625
+ cmp[ "\cx" ]
626
+ # cmp[ "\cy" ]
627
+ cmp[ "\cz" ]
628
+ cmp[ "\306\374\313\334\270\354" ] # NIHONGO in EUC-JP
629
+ }
630
+ end
631
+
632
+
633
+ def el4r_load_test_helper(dir)
634
+ begin
635
+ $loaded = nil
636
+ tmpscript = "#{dir}/__testtmp__.rb"
637
+ "$loaded = true".writef(tmpscript)
638
+ el4r_load "__testtmp__.rb"
639
+ assert_equal(true, $loaded)
640
+ ensure
641
+ FileUtils.rm_f tmpscript
642
+ end
643
+ end
644
+
645
+ def test_el4r_load__load_path
646
+ begin
647
+ load_path_orig = el4r.conf.el4r_load_path
648
+ tmp = Dir.tmpdir
649
+ load_path = [ tmp, "#{tmp}/a" ]
650
+ el4r.conf.el4r_load_path = load_path
651
+ load_path.each do |dir|
652
+ FileUtils.mkdir_p dir
653
+ el4r_load_test_helper dir
654
+ end
655
+ ensure
656
+ el4r.conf.el4r_load_path = load_path_orig
657
+ FileUtils.rm_rf "#{tmp}/a"
658
+ end
659
+
660
+ end
661
+
662
+ def test_el4r_load__not_exist
663
+ assert_raises(LoadError) { el4r_load "__not_exist.rb" }
664
+ assert_equal(false, el4r_load("__not_exist.rb", true))
665
+ end
666
+
667
+ def test_el4r_load__order
668
+ begin
669
+ $loaded = nil
670
+ load_path = el4r.conf.el4r_load_path = [ el4r_homedir, el4r.site_dir ]
671
+ FileUtils.mkdir_p load_path
672
+ rb = "__testtmp__.rb"
673
+ home_rb = File.expand_path(rb, el4r_homedir)
674
+ site_rb = File.expand_path(rb, el4r.site_dir)
675
+ "$loaded = :OK".writef(home_rb)
676
+ "$loaded = :NG".writef(site_rb)
677
+ el4r_load rb
678
+ assert_equal(:OK, $loaded)
679
+ ensure
680
+ FileUtils.rm_f [home_rb, site_rb]
681
+ end
682
+ end
683
+
684
+ def test_stdlib_loaded
685
+ assert_equal(true, fboundp(:winconf_push))
686
+ end
687
+
688
+ def test_winconf
689
+ # make a winconf
690
+ switch_to_buffer "a buffer"
691
+ insert "string"
692
+ pt = point
693
+ # current_window_configuration does not works with xemacs -batch. I do not know why.
694
+ assert( one_window_p )
695
+ buf = current_buffer
696
+
697
+ winconf_push
698
+
699
+ # alter the winconf
700
+ goto_char 1
701
+ split_window
702
+
703
+ winconf_pop
704
+
705
+ # revive the winconf
706
+ assert( one_window_p )
707
+ assert_equal(buf, current_buffer)
708
+ assert_equal(pt, point)
709
+ end
710
+
711
+ def test_el4r_output
712
+ printf("\t\n\ca!%s!","a")
713
+ print(1)
714
+ assert_equal("\t\n\ca!a!1", bufstr("*el4r:output*"))
715
+ end
716
+
717
+ def test_process_autoloads
718
+ begin
719
+ tmp = Dir.tmpdir
720
+ autoload_dir = "#{tmp}/autoload"
721
+ FileUtils.mkdir_p autoload_dir
722
+ $ary = []
723
+ %w[01first.rb 02second.rb 03third.rb].each_with_index do |fn, i|
724
+ open(File.join(autoload_dir, fn), "w"){|f| f.write "$ary << #{i}" }
725
+ end
726
+ el4r_process_autoloads autoload_dir
727
+
728
+ assert_equal [0,1,2], $ary
729
+ ensure
730
+ FileUtils.rm_rf autoload_dir
731
+ end
732
+ end
733
+
734
+ def test_eval_after_load
735
+ begin
736
+ tmp = Dir.tmpdir
737
+ add_to_list :load_path, tmp
738
+ el = "#{tmp}/hoge.el"
739
+ open(el, "w"){|f| f.write "(setq hoge 100)" }
740
+
741
+ elvar.hoge = 1
742
+ eval_after_load("hoge") do
743
+ elvar.hoge = 200
744
+ end
745
+ assert_equal 1, elvar.hoge
746
+
747
+ el_load "hoge"
748
+ assert_equal 200, elvar.hoge
749
+ ensure
750
+ FileUtils.rm_f el
751
+ end
752
+ end
753
+
754
+ def test_define_derived_mode
755
+ @passed = false
756
+ ##### [derived]
757
+ define_derived_mode(:foo_mode, :fundamental_mode, "FOO", "doc") do
758
+ @passed = true
759
+ end
760
+ ##### [/derived]
761
+ assert_equal false, @passed
762
+ foo_mode
763
+ assert_equal true, @passed
764
+ assert_equal "foo-mode", elvar.major_mode.to_s
765
+
766
+ @passed = false
767
+ define_derived_mode("bar-mode", el(:foo_mode), "Bar") do
768
+ @passed = true
769
+ end
770
+ assert_equal false, @passed
771
+ bar_mode
772
+ assert_equal true, @passed
773
+
774
+ define_derived_mode("baz-mode", el(:bar_mode), "Baz")
775
+ baz_mode
776
+ assert_equal "baz-mode", elvar.major_mode.to_s
777
+
778
+ end
779
+
780
+ def test_define_minor_mode
781
+ @passed = false
782
+ ##### [minor-mode]
783
+ define_minor_mode(:a_minor_mode, "test minor mode") do
784
+ @passed = true
785
+ end
786
+ ##### [/minor-mode]
787
+ assert_equal false, @passed
788
+ a_minor_mode
789
+ assert_equal true, @passed
790
+ assert_equal true, elvar.a_minor_mode
791
+ end
792
+
793
+ # end of TestEl4r
794
+ end
795
+
796
+ # newbuf examples
797
+ class TestNewbuf < Test::Unit::TestCase
798
+ include ElMixin
799
+
800
+ def setup
801
+ @bufname = "buffer-does-not-exist!!!"
802
+ end
803
+
804
+ def teardown
805
+ kill_buffer(@bufname) if get_buffer(@bufname)
806
+ end
807
+
808
+ def setbuf
809
+ set_buffer @x
810
+ end
811
+
812
+ def test_create
813
+ @x = newbuf(:name=>@bufname)
814
+ setbuf
815
+ assert_equal(true, bufferp(@x))
816
+ assert_equal(@bufname, buffer_name(@x))
817
+ assert_equal("", buffer_string)
818
+
819
+ y = newbuf(:name=>@bufname)
820
+ assert(eq(@x,y))
821
+ end
822
+
823
+ def test_contents
824
+ @x = newbuf(:name=>@bufname, :contents=>"foo")
825
+ setbuf
826
+ assert_equal("foo", buffer_string)
827
+ assert_equal(4, "foo".length+1)
828
+ assert_equal(4, point)
829
+
830
+ # buffer is erased
831
+ @x = newbuf(:name=>@bufname, :contents=>"bar")
832
+ setbuf
833
+ assert_equal("bar", buffer_string)
834
+ end
835
+
836
+ def test_file
837
+ begin
838
+ file = Tempfile.path("abcd")
839
+ @x = newbuf(:file=>file)
840
+ setbuf
841
+ assert_equal(file, buffer_file_name)
842
+ assert_equal("abcd", buffer_string)
843
+ ensure
844
+ kill_buffer nil
845
+ File.unlink file
846
+ end
847
+ end
848
+
849
+ def test_name_and_file
850
+ begin
851
+ file1 = Tempfile.path("abcd")
852
+ @x = newbuf(:name=>@bufname, :file=>file1)
853
+ setbuf
854
+ assert_equal(nil, buffer_file_name)
855
+ assert_equal("abcd", buffer_string)
856
+
857
+ # buffer is erased
858
+ file2 = Tempfile.path("abcde")
859
+ @x = newbuf(:name=>@bufname, :file=>file2)
860
+ setbuf
861
+ assert_equal("abcde", buffer_string)
862
+
863
+ ensure
864
+ kill_buffer nil
865
+ File.unlink file1
866
+ File.unlink file2
867
+ end
868
+ end
869
+
870
+
871
+ def test_argerror
872
+ assert_raises(ArgumentError){ newbuf }
873
+ assert_raises(ArgumentError){ newbuf(:name=>nil) }
874
+ assert_raises(ArgumentError){ newbuf(1) }
875
+ assert_raises(ArgumentError){ newbuf("1") } # hmm.
876
+ assert_raises(ArgumentError){ newbuf(:name=>@bufname, :line=>"a") }
877
+ assert_raises(ArgumentError){ newbuf(:name=>@bufname, :point=>"a") }
878
+ end
879
+
880
+ def test_current_line
881
+ @x = newbuf(:name=>@bufname, :contents=>"a\nb\nc\nd", :line=>2)
882
+ setbuf
883
+ assert_equal("b", char_to_string(char_after))
884
+ end
885
+
886
+ def test_point
887
+ @x = newbuf(:name=>@bufname, :contents=>"abcde", :point=>2)
888
+ setbuf
889
+ assert_equal("b", char_to_string(char_after))
890
+ end
891
+
892
+ def test_display
893
+ elvar.pop_up_windows = true
894
+ @x = newbuf(:name=>@bufname, :display=>true)
895
+ assert(get_buffer_window(@x))
896
+ assert_nil(one_window_p)
897
+ assert_nil(eq(selected_window, get_buffer_window(@x)))
898
+ end
899
+
900
+ def test_display_pop
901
+ elvar.pop_up_windows = true
902
+ @x = newbuf(:name=>@bufname, :display=>:pop)
903
+ assert(get_buffer_window(@x))
904
+ assert_nil(one_window_p)
905
+ assert(eq(selected_window, get_buffer_window(@x)))
906
+ end
907
+
908
+ def test_display_only
909
+ elvar.pop_up_windows = true
910
+ @x = newbuf(:name=>@bufname, :display=>:only)
911
+ assert(get_buffer_window(@x))
912
+ assert(one_window_p)
913
+ assert(eq(selected_window, get_buffer_window(@x)))
914
+ end
915
+
916
+ def test_current
917
+ @x = newbuf(:name=>@bufname, :current=>true)
918
+ assert_nil(get_buffer_window(@x))
919
+ assert(eq(current_buffer, @x))
920
+ end
921
+
922
+ def test_read_only
923
+ b1 = newbuf(:name=>@bufname, :current=>true, :read_only=>true, :contents=>"a")
924
+ assert(eq(elvar.buffer_read_only, true))
925
+ assert_equal("a", buffer_string)
926
+
927
+ b2 = newbuf(:name=>@bufname, :current=>true, :read_only=>true, :contents=>"c")
928
+ assert(eq(b1,b2))
929
+ assert(eq(elvar.buffer_read_only, true))
930
+ assert_equal("c", buffer_string)
931
+ end
932
+
933
+ def test_bury
934
+ buf = newbuf(:name=>@bufname, :display=>:pop, :bury=>true)
935
+ assert(eq(buf, (buffer_list nil)[-1]))
936
+ end
937
+
938
+ def test_block
939
+ buf = newbuf(:name=>@bufname, :current=>true) {
940
+ text_mode
941
+ }
942
+ mode = with(:with_current_buffer,buf){elvar.major_mode}.to_s
943
+ assert_equal("text-mode", mode)
944
+ end
945
+ end
946
+
947
+ class TestDefunWithinClass < Test::Unit::TestCase
948
+
949
+ class Foo
950
+ include ElMixin
951
+
952
+ def initialize(x)
953
+ elvar.v = x[:value]
954
+ defun(:twice_v) do
955
+ elvar.v *= 2
956
+ end
957
+
958
+ defun(:str0) do
959
+ do_str0 x[:str]
960
+ end
961
+ end
962
+
963
+ def do_str0(str)
964
+ (str*2).upcase
965
+ end
966
+ end
967
+
968
+ def test0
969
+ Foo.new(:value=>10, :str=>"ab")
970
+ twice_v
971
+ assert_equal(20, elvar.v)
972
+ assert_equal("ABAB", str0)
973
+ end
974
+ end
975
+
976
+ class TestElApp < Test::Unit::TestCase
977
+
978
+ ##### [ElApp]
979
+ class Foo < ElApp
980
+ def initialize(x)
981
+ elvar.v = x[:value]
982
+ defun(:twice_v) do
983
+ elvar.v *= 2
984
+ end
985
+
986
+ defun(:str0) do
987
+ do_str0 x[:str]
988
+ end
989
+ end
990
+
991
+ def do_str0(str)
992
+ (str*2).capitalize
993
+ end
994
+ end
995
+ ##### [/ElApp]
996
+
997
+ def test0
998
+ Foo.run(:value=>10, :str=>"ab")
999
+ twice_v
1000
+ assert_equal(20, elvar.v)
1001
+ assert_equal("Abab", str0)
1002
+ end
1003
+ end
1004
+
1005
+ class TestSmartDefun < Test::Unit::TestCase
1006
+ ##### [smart_defun]
1007
+ class SmartDefunSample < ElApp
1008
+ def my_square(x)
1009
+ x*x
1010
+ end
1011
+
1012
+ defun(:testdefun, :interactive=>true) do |x|
1013
+ # This block is evaluated within a context of the SmartDefunSample INSTANCE.
1014
+ # Not a context of the SmartDefunSample class!!
1015
+ x ||= 16
1016
+ elvar.val = my_square(x) # call an instance method.
1017
+ end
1018
+ end
1019
+ ##### [/smart_defun]
1020
+
1021
+ def test_defun
1022
+ SmartDefunSample.run
1023
+ elvar.val = 0
1024
+ testdefun(10)
1025
+ assert_equal(100, elvar.val)
1026
+ call_interactively(:testdefun)
1027
+ assert_equal(256, elvar.val)
1028
+ end
1029
+
1030
+
1031
+ class DefvarSample < ElApp
1032
+ defvar(:blah_blah, 2)
1033
+ defun(:setblah) {|x| elvar.blah_blah = x }
1034
+ end
1035
+
1036
+ def test_blah
1037
+ DefvarSample.run
1038
+ assert_equal 2, el4r_lisp_eval("blah-blah")
1039
+ setblah(20)
1040
+ assert_equal 20, el4r_lisp_eval("blah-blah")
1041
+ end
1042
+
1043
+
1044
+ class LispEvalSample < ElApp
1045
+ el4r_lisp_eval %((setq lisp-eval-sample 9999))
1046
+ end
1047
+
1048
+ def test_lisp_eval_sample
1049
+ LispEvalSample.run
1050
+ assert_equal 9999, elvar.lisp_eval_sample
1051
+ end
1052
+
1053
+ end