el4r 1.0.4

Sign up to get free protection for your applications and to get access to all the features.
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