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.
- data/BUGS +2 -0
- data/Changes +2412 -0
- data/bin/el4r +26 -0
- data/bin/el4r-instance +1105 -0
- data/bin/el4r-rctool +279 -0
- data/bin/el4r-runtest +26 -0
- data/data/emacs/site-lisp/el4r.el +441 -0
- data/doc/classes/El4r.html +200 -0
- data/doc/classes/El4r.src/M000004.html +25 -0
- data/doc/classes/El4r.src/M000005.html +25 -0
- data/doc/classes/El4r.src/M000006.html +18 -0
- data/doc/classes/El4r.src/M000008.html +25 -0
- data/doc/classes/El4r.src/M000009.html +18 -0
- data/doc/classes/El4r/ELConsCell.html +145 -0
- data/doc/classes/El4r/ELConsCell.src/M000044.html +16 -0
- data/doc/classes/El4r/ELConsCell.src/M000046.html +16 -0
- data/doc/classes/El4r/ELConsCell.src/M000050.html +16 -0
- data/doc/classes/El4r/ELInstance.html +755 -0
- data/doc/classes/El4r/ELInstance.src/M000046.html +36 -0
- data/doc/classes/El4r/ELInstance.src/M000047.html +41 -0
- data/doc/classes/El4r/ELInstance.src/M000048.html +31 -0
- data/doc/classes/El4r/ELInstance.src/M000049.html +22 -0
- data/doc/classes/El4r/ELInstance.src/M000050.html +25 -0
- data/doc/classes/El4r/ELInstance.src/M000051.html +35 -0
- data/doc/classes/El4r/ELInstance.src/M000052.html +31 -0
- data/doc/classes/El4r/ELInstance.src/M000053.html +23 -0
- data/doc/classes/El4r/ELInstance.src/M000054.html +41 -0
- data/doc/classes/El4r/ELInstance.src/M000055.html +31 -0
- data/doc/classes/El4r/ELInstance.src/M000056.html +43 -0
- data/doc/classes/El4r/ELInstance.src/M000057.html +31 -0
- data/doc/classes/El4r/ELInstance.src/M000058.html +22 -0
- data/doc/classes/El4r/ELInstance.src/M000059.html +25 -0
- data/doc/classes/El4r/ELInstance.src/M000060.html +43 -0
- data/doc/classes/El4r/ELInstance.src/M000061.html +31 -0
- data/doc/classes/El4r/ELInstance.src/M000062.html +22 -0
- data/doc/classes/El4r/ELInstance.src/M000063.html +25 -0
- data/doc/classes/El4r/ELInstance.src/M000064.html +35 -0
- data/doc/classes/El4r/ELInstance.src/M000065.html +23 -0
- data/doc/classes/El4r/ELInstance.src/M000066.html +23 -0
- data/doc/classes/El4r/ELInstance.src/M000067.html +19 -0
- data/doc/classes/El4r/ELInstance.src/M000068.html +18 -0
- data/doc/classes/El4r/ELInstance.src/M000069.html +20 -0
- data/doc/classes/El4r/ELInstance.src/M000070.html +18 -0
- data/doc/classes/El4r/ELInstance.src/M000071.html +19 -0
- data/doc/classes/El4r/ELInstance.src/M000072.html +30 -0
- data/doc/classes/El4r/ELInstance.src/M000073.html +20 -0
- data/doc/classes/El4r/ELInstance.src/M000074.html +20 -0
- data/doc/classes/El4r/ELInstance.src/M000075.html +17 -0
- data/doc/classes/El4r/ELInstance.src/M000076.html +18 -0
- data/doc/classes/El4r/ELInstance.src/M000077.html +21 -0
- data/doc/classes/El4r/ELInstance.src/M000078.html +18 -0
- data/doc/classes/El4r/ELInstance.src/M000079.html +18 -0
- data/doc/classes/El4r/ELInstance.src/M000080.html +35 -0
- data/doc/classes/El4r/ELInstance.src/M000081.html +24 -0
- data/doc/classes/El4r/ELInstance.src/M000082.html +22 -0
- data/doc/classes/El4r/ELInstance.src/M000083.html +21 -0
- data/doc/classes/El4r/ELInstance.src/M000084.html +19 -0
- data/doc/classes/El4r/ELInstance.src/M000085.html +18 -0
- data/doc/classes/El4r/ELInstance.src/M000086.html +21 -0
- data/doc/classes/El4r/ELInstance.src/M000087.html +18 -0
- data/doc/classes/El4r/ELInstance.src/M000088.html +24 -0
- data/doc/classes/El4r/ELInstance.src/M000089.html +23 -0
- data/doc/classes/El4r/ELInstance.src/M000090.html +18 -0
- data/doc/classes/El4r/ELInstance.src/M000091.html +20 -0
- data/doc/classes/El4r/ELInstance.src/M000092.html +18 -0
- data/doc/classes/El4r/ELInstance.src/M000093.html +19 -0
- data/doc/classes/El4r/ELListCell.html +163 -0
- data/doc/classes/El4r/ELListCell.src/M000026.html +16 -0
- data/doc/classes/El4r/ELListCell.src/M000027.html +16 -0
- data/doc/classes/El4r/ELListCell.src/M000028.html +23 -0
- data/doc/classes/El4r/ELListCell.src/M000031.html +16 -0
- data/doc/classes/El4r/ELListCell.src/M000032.html +23 -0
- data/doc/classes/El4r/ELListCell.src/M000033.html +16 -0
- data/doc/classes/El4r/ELListCell.src/M000034.html +23 -0
- data/doc/classes/El4r/ELListCell.src/M000037.html +16 -0
- data/doc/classes/El4r/ELListCell.src/M000038.html +23 -0
- data/doc/classes/El4r/ELMethodsMixin.html +648 -0
- data/doc/classes/El4r/ELMethodsMixin.src/M000006.html +27 -0
- data/doc/classes/El4r/ELMethodsMixin.src/M000007.html +27 -0
- data/doc/classes/El4r/ELMethodsMixin.src/M000008.html +18 -0
- data/doc/classes/El4r/ELMethodsMixin.src/M000009.html +18 -0
- data/doc/classes/El4r/ELMethodsMixin.src/M000010.html +27 -0
- data/doc/classes/El4r/ELMethodsMixin.src/M000011.html +19 -0
- data/doc/classes/El4r/ELMethodsMixin.src/M000012.html +18 -0
- data/doc/classes/El4r/ELMethodsMixin.src/M000013.html +19 -0
- data/doc/classes/El4r/ELMethodsMixin.src/M000014.html +19 -0
- data/doc/classes/El4r/ELMethodsMixin.src/M000015.html +18 -0
- data/doc/classes/El4r/ELMethodsMixin.src/M000016.html +21 -0
- data/doc/classes/El4r/ELMethodsMixin.src/M000017.html +18 -0
- data/doc/classes/El4r/ELMethodsMixin.src/M000018.html +23 -0
- data/doc/classes/El4r/ELMethodsMixin.src/M000019.html +18 -0
- data/doc/classes/El4r/ELMethodsMixin.src/M000020.html +46 -0
- data/doc/classes/El4r/ELMethodsMixin.src/M000021.html +18 -0
- data/doc/classes/El4r/ELMethodsMixin.src/M000022.html +23 -0
- data/doc/classes/El4r/ELMethodsMixin.src/M000023.html +28 -0
- data/doc/classes/El4r/ELMethodsMixin.src/M000024.html +46 -0
- data/doc/classes/El4r/ELMethodsMixin.src/M000025.html +18 -0
- data/doc/classes/El4r/ELMethodsMixin.src/M000026.html +18 -0
- data/doc/classes/El4r/ELMethodsMixin.src/M000027.html +28 -0
- data/doc/classes/El4r/ELMethodsMixin.src/M000028.html +31 -0
- data/doc/classes/El4r/ELMethodsMixin.src/M000029.html +24 -0
- data/doc/classes/El4r/ELMethodsMixin.src/M000030.html +18 -0
- data/doc/classes/El4r/ELMethodsMixin.src/M000031.html +18 -0
- data/doc/classes/El4r/ELMethodsMixin.src/M000032.html +18 -0
- data/doc/classes/El4r/ELMethodsMixin.src/M000033.html +18 -0
- data/doc/classes/El4r/ELMethodsMixin.src/M000034.html +18 -0
- data/doc/classes/El4r/ELMethodsMixin.src/M000035.html +18 -0
- data/doc/classes/El4r/ELMethodsMixin.src/M000036.html +25 -0
- data/doc/classes/El4r/ELObject.html +235 -0
- data/doc/classes/El4r/ELObject.src/M000078.html +19 -0
- data/doc/classes/El4r/ELObject.src/M000079.html +18 -0
- data/doc/classes/El4r/ELObject.src/M000080.html +19 -0
- data/doc/classes/El4r/ELObject.src/M000081.html +18 -0
- data/doc/classes/El4r/ELObject.src/M000082.html +19 -0
- data/doc/classes/El4r/ELObject.src/M000083.html +18 -0
- data/doc/classes/El4r/ELObject.src/M000084.html +18 -0
- data/doc/classes/El4r/ELObject.src/M000085.html +18 -0
- data/doc/classes/El4r/ELObject.src/M000086.html +20 -0
- data/doc/classes/El4r/ELObject.src/M000087.html +19 -0
- data/doc/classes/El4r/ELObject.src/M000088.html +20 -0
- data/doc/classes/El4r/ELObject.src/M000090.html +19 -0
- data/doc/classes/El4r/ELObject.src/M000091.html +19 -0
- data/doc/classes/El4r/ELObject.src/M000092.html +18 -0
- data/doc/classes/El4r/ELObject.src/M000093.html +19 -0
- data/doc/classes/El4r/ELObject.src/M000094.html +18 -0
- data/doc/classes/El4r/ELObject.src/M000095.html +18 -0
- data/doc/classes/El4r/ELObject.src/M000096.html +18 -0
- data/doc/classes/El4r/ELObject.src/M000097.html +19 -0
- data/doc/classes/El4r/ELObject.src/M000098.html +18 -0
- data/doc/classes/El4r/ELObject.src/M000099.html +18 -0
- data/doc/classes/El4r/ELObject.src/M000100.html +18 -0
- data/doc/classes/El4r/ELObject.src/M000102.html +19 -0
- data/doc/classes/El4r/ELObject.src/M000103.html +20 -0
- data/doc/classes/El4r/ELRubyObjectStock.html +283 -0
- data/doc/classes/El4r/ELRubyObjectStock.src/M000030.html +21 -0
- data/doc/classes/El4r/ELRubyObjectStock.src/M000031.html +22 -0
- data/doc/classes/El4r/ELRubyObjectStock.src/M000032.html +22 -0
- data/doc/classes/El4r/ELRubyObjectStock.src/M000033.html +42 -0
- data/doc/classes/El4r/ELRubyObjectStock.src/M000034.html +19 -0
- data/doc/classes/El4r/ELRubyObjectStock.src/M000035.html +22 -0
- data/doc/classes/El4r/ELRubyObjectStock.src/M000036.html +22 -0
- data/doc/classes/El4r/ELRubyObjectStock.src/M000037.html +22 -0
- data/doc/classes/El4r/ELRubyObjectStock.src/M000038.html +22 -0
- data/doc/classes/El4r/ELRubyObjectStock.src/M000039.html +17 -0
- data/doc/classes/El4r/ELRubyObjectStock.src/M000040.html +17 -0
- data/doc/classes/El4r/ELRubyObjectStock.src/M000041.html +22 -0
- data/doc/classes/El4r/ELRubyObjectStock.src/M000042.html +22 -0
- data/doc/classes/El4r/ELRubyObjectStock.src/M000043.html +17 -0
- data/doc/classes/El4r/ELRubyObjectStock.src/M000044.html +17 -0
- data/doc/classes/El4r/ELRubyObjectStock.src/M000045.html +46 -0
- data/doc/classes/El4r/ELRubyObjectStock.src/M000046.html +19 -0
- data/doc/classes/El4r/ELRubyObjectStock.src/M000047.html +21 -0
- data/doc/classes/El4r/ELRubyObjectStock.src/M000048.html +19 -0
- data/doc/classes/El4r/ELRubyObjectStock.src/M000049.html +18 -0
- data/doc/classes/El4r/ELSequence.html +221 -0
- data/doc/classes/El4r/ELSequence.src/M000040.html +18 -0
- data/doc/classes/El4r/ELSequence.src/M000041.html +18 -0
- data/doc/classes/El4r/ELSequence.src/M000042.html +20 -0
- data/doc/classes/El4r/ELSequence.src/M000043.html +19 -0
- data/doc/classes/El4r/ELSequence.src/M000044.html +18 -0
- data/doc/classes/El4r/ELSequence.src/M000045.html +19 -0
- data/doc/classes/El4r/ELSequence.src/M000048.html +18 -0
- data/doc/classes/El4r/ELSequence.src/M000049.html +20 -0
- data/doc/classes/El4r/ELSequence.src/M000050.html +18 -0
- data/doc/classes/El4r/ELSequence.src/M000051.html +20 -0
- data/doc/classes/El4r/ELSequence.src/M000052.html +19 -0
- data/doc/classes/El4r/ELSequence.src/M000053.html +18 -0
- data/doc/classes/El4r/ELSequence.src/M000054.html +18 -0
- data/doc/classes/El4r/ELSequence.src/M000055.html +20 -0
- data/doc/classes/El4r/ELSequence.src/M000056.html +19 -0
- data/doc/classes/El4r/ELSequence.src/M000057.html +18 -0
- data/doc/classes/El4r/ELSequence.src/M000058.html +19 -0
- data/doc/classes/El4r/ELVariables.html +173 -0
- data/doc/classes/El4r/ELVariables.src/M000037.html +18 -0
- data/doc/classes/El4r/ELVariables.src/M000038.html +18 -0
- data/doc/classes/El4r/ELVariables.src/M000039.html +18 -0
- data/doc/classes/El4r/ELVariables.src/M000040.html +23 -0
- data/doc/classes/El4r/ELVariables.src/M000045.html +18 -0
- data/doc/classes/El4r/ELVariables.src/M000046.html +18 -0
- data/doc/classes/El4r/ELVariables.src/M000047.html +18 -0
- data/doc/classes/El4r/ELVariables.src/M000048.html +18 -0
- data/doc/classes/El4r/ELVariables.src/M000049.html +23 -0
- data/doc/classes/El4r/ELVariables.src/M000051.html +18 -0
- data/doc/classes/El4r/ELVariables.src/M000052.html +18 -0
- data/doc/classes/El4r/ELVariables.src/M000053.html +23 -0
- data/doc/classes/El4r/ELVector.html +160 -0
- data/doc/classes/El4r/ELVector.src/M000028.html +22 -0
- data/doc/classes/El4r/ELVector.src/M000029.html +22 -0
- data/doc/classes/El4r/ELVector.src/M000030.html +16 -0
- data/doc/classes/El4r/ELVector.src/M000033.html +22 -0
- data/doc/classes/El4r/ELVector.src/M000034.html +16 -0
- data/doc/classes/El4r/ELVector.src/M000035.html +22 -0
- data/doc/classes/El4r/ELVector.src/M000036.html +16 -0
- data/doc/classes/El4r/ELVector.src/M000039.html +22 -0
- data/doc/classes/El4r/ELVector.src/M000040.html +16 -0
- data/doc/classes/El4r/El4rOutput.html +175 -0
- data/doc/classes/El4r/El4rOutput.src/M000080.html +18 -0
- data/doc/classes/El4r/El4rOutput.src/M000081.html +21 -0
- data/doc/classes/El4r/El4rOutput.src/M000088.html +18 -0
- data/doc/classes/El4r/El4rOutput.src/M000089.html +21 -0
- data/doc/classes/El4r/El4rOutput.src/M000090.html +18 -0
- data/doc/classes/El4r/El4rOutput.src/M000091.html +21 -0
- data/doc/classes/El4r/El4rOutput.src/M000092.html +18 -0
- data/doc/classes/El4r/El4rOutput.src/M000094.html +18 -0
- data/doc/classes/El4r/El4rOutput.src/M000095.html +21 -0
- data/doc/classes/El4r/El4rOutput.src/M000096.html +18 -0
- data/doc/classes/El4rAccessor.html +134 -0
- data/doc/classes/El4rAccessor.src/M000005.html +18 -0
- data/doc/classes/ElApp.html +211 -0
- data/doc/classes/ElApp.src/M000001.html +21 -0
- data/doc/classes/ElApp.src/M000002.html +17 -0
- data/doc/classes/ElApp.src/M000003.html +18 -0
- data/doc/classes/ElApp.src/M000004.html +18 -0
- data/doc/classes/ElMixin.html +163 -0
- data/doc/classes/ElMixin.src/M000001.html +19 -0
- data/doc/classes/ElMixin.src/M000002.html +19 -0
- data/doc/classes/ElMixin.src/M000003.html +18 -0
- data/doc/classes/ElMixin.src/M000004.html +18 -0
- data/doc/classes/ElMixin.src/M000006.html +19 -0
- data/doc/classes/ElMixin.src/M000007.html +18 -0
- data/doc/created.rid +1 -0
- data/doc/files/bin/el4r-instance.html +119 -0
- data/doc/fr_class_index.html +40 -0
- data/doc/fr_file_index.html +27 -0
- data/doc/fr_method_index.html +129 -0
- data/doc/index.html +24 -0
- data/doc/rdoc-style.css +208 -0
- data/el4r.en.html +468 -0
- data/el4r.ja.html +640 -0
- data/files +29 -0
- data/lib/el4r/el4r-sub.rb +1023 -0
- data/lib/el4r/emacsruby/autoload/70el4r-mode.rb +9 -0
- data/lib/el4r/emacsruby/el4r-mode.rb +35 -0
- data/lib/el4r/emacsruby/stdlib.rb +37 -0
- data/lib/el4r/exec-el4r.rb +182 -0
- data/man/el4r.1 +125 -0
- data/setup.rb +1551 -0
- data/testing/alltest.rb +5 -0
- data/testing/badcase.rb +50 -0
- data/testing/el4r.e +262 -0
- data/testing/euc.txt +1 -0
- data/testing/jis.txt +1 -0
- data/testing/sjis.txt +1 -0
- data/testing/test-el4r.rb +1053 -0
- data/testing/test-gc.rb +81 -0
- data/testing/test.el +16 -0
- data/testing/test.rb +97 -0
- data/testing/utf8.txt +1 -0
- metadata +311 -0
data/testing/alltest.rb
ADDED
data/testing/badcase.rb
ADDED
|
@@ -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
|
data/testing/el4r.e
ADDED
|
@@ -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:
|
data/testing/euc.txt
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
���ܸ�
|
data/testing/jis.txt
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
$BF|K\8l(B
|
data/testing/sjis.txt
ADDED
|
@@ -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
|