rb-appscript 0.2.1 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +59 -0
- data/LICENSE +65 -0
- data/README +1 -1
- data/TODO +13 -13
- data/doc/aem-manual/04_references.html +13 -13
- data/doc/aem-manual/05_targettingapplications.html +7 -5
- data/doc/aem-manual/06_buildingandsendingevents.html +1 -1
- data/doc/aem-manual/08_examples.html +6 -6
- data/doc/aem-manual/index.html +3 -4
- data/doc/appscript-manual/02_aboutappscripting.html +2 -10
- data/doc/appscript-manual/04_gettinghelp.html +32 -18
- data/doc/appscript-manual/05_keywordconversion.html +7 -7
- data/doc/appscript-manual/06_classesandenums.html +2 -21
- data/doc/appscript-manual/07_applicationobjects.html +11 -2
- data/doc/appscript-manual/08_realvsgenericreferences.html +1 -1
- data/doc/appscript-manual/09_referenceforms.html +13 -13
- data/doc/appscript-manual/10_referenceexamples.html +7 -7
- data/doc/appscript-manual/11_applicationcommands.html +30 -28
- data/doc/appscript-manual/13_performanceissues.html +3 -3
- data/doc/appscript-manual/{15_notes.html → 14_notes.html} +18 -13
- data/doc/appscript-manual/full.css +1 -2
- data/doc/appscript-manual/index.html +3 -4
- data/doc/index.html +2 -1
- data/doc/mactypes-manual/index.html +23 -13
- data/doc/osax-manual/index.html +27 -5
- data/rb-appscript.gemspec +1 -1
- data/sample/AB_list_people_with_emails.rb +2 -1
- data/sample/Add_iCal_event.rb +18 -0
- data/sample/Export_Address_Book_phone_numbers.rb +56 -0
- data/sample/Hello_world.rb +9 -1
- data/sample/Select_all_HTML_files.rb +4 -2
- data/sample/iTunes_top40_to_html.rb +7 -4
- data/src/lib/_aem/aemreference.rb +50 -51
- data/src/lib/_aem/codecs.rb +148 -178
- data/src/lib/_aem/connect.rb +0 -2
- data/src/lib/_aem/findapp.rb +1 -1
- data/src/lib/_aem/mactypes.rb +2 -9
- data/src/lib/_aem/send.rb +2 -2
- data/src/lib/_appscript/defaultterminology.rb +2 -2
- data/src/lib/_appscript/referencerenderer.rb +119 -14
- data/src/lib/_appscript/reservedkeywords.rb +5 -0
- data/src/lib/_appscript/safeobject.rb +190 -0
- data/src/lib/_appscript/terminology.rb +195 -90
- data/src/lib/aem.rb +8 -9
- data/src/lib/appscript.rb +175 -159
- data/src/lib/osax.rb +65 -29
- data/src/rbae.c +42 -2
- data/test/test_aemreference.rb +3 -3
- data/test/test_appscriptcommands.rb +135 -0
- data/test/test_appscriptreference.rb +10 -8
- data/test/test_mactypes.rb +7 -1
- data/test/test_osax.rb +57 -0
- data/test/testall.sh +2 -1
- metadata +10 -9
- data/doc/aem-manual/09_notes.html +0 -41
- data/doc/appscript-manual/14_problemapps.html +0 -192
- data/misc/adobeunittypes.rb +0 -14
- data/misc/dump.rb +0 -72
- data/rb-appscript-0.2.0.gem +0 -0
data/src/lib/osax.rb
CHANGED
@@ -20,7 +20,7 @@ module OSAX
|
|
20
20
|
OSAXCache = {}
|
21
21
|
OSAXNames = []
|
22
22
|
|
23
|
-
se = Appscript.app('
|
23
|
+
se = Appscript.app.by_id('com.apple.systemevents')
|
24
24
|
[se.system_domain, se.local_domain, se.user_domain].each do |domain|
|
25
25
|
osaxen = domain.scripting_additions_folder.files[
|
26
26
|
Appscript.its.file_type.eq('osax').or(Appscript.its.name_extension.eq('osax'))]
|
@@ -37,33 +37,25 @@ module OSAX
|
|
37
37
|
|
38
38
|
class OSAXData < Appscript::AppData
|
39
39
|
|
40
|
-
def initialize(
|
41
|
-
super(AEM::Application,
|
40
|
+
def initialize(constructor, identifier, terms)
|
41
|
+
super(AEM::Application, constructor, identifier, terms)
|
42
42
|
end
|
43
43
|
|
44
|
-
def
|
45
|
-
|
46
|
-
@target = @_aem_application_class.by_path(@path)
|
47
|
-
elsif @pid
|
48
|
-
@target = @_aem_application_class.by_pid(@pid)
|
49
|
-
elsif @url
|
50
|
-
@target = @_aem_application_class.by_url(@url)
|
51
|
-
else
|
52
|
-
@target = @_aem_application_class.current
|
53
|
-
end
|
44
|
+
def connect
|
45
|
+
super
|
54
46
|
begin
|
55
|
-
@target.event('ascrgdut').send(
|
47
|
+
@target.event('ascrgdut').send(60 * 60) # make sure target application has loaded event handlers for all installed OSAXen
|
56
48
|
rescue AEM::CommandError => e
|
57
49
|
if e.number != -1708 # ignore 'event not handled' error
|
58
50
|
raise
|
59
51
|
end
|
60
52
|
end
|
61
|
-
@type_by_code, @type_by_name, @reference_by_code, @reference_by_name = @_terms
|
62
|
-
extend(Appscript::AppDataAccessors)
|
63
53
|
end
|
64
54
|
|
65
55
|
end
|
66
56
|
|
57
|
+
@_standard_additions = nil
|
58
|
+
|
67
59
|
|
68
60
|
######################################################################
|
69
61
|
# PUBLIC
|
@@ -74,16 +66,55 @@ module OSAX
|
|
74
66
|
return OSAXNames
|
75
67
|
end
|
76
68
|
|
77
|
-
def OSAX.osax(name, app_name=nil)
|
78
|
-
#
|
79
|
-
#
|
80
|
-
|
81
|
-
|
82
|
-
|
69
|
+
def OSAX.osax(name=nil, app_name=nil)
|
70
|
+
# Convenience method for creating a new ScriptingAddition instance.
|
71
|
+
# name : String | nil -- scripting addition's name; nil = 'StandardAdditions'
|
72
|
+
# app_name : String | nil -- target application's name/path, or nil for current application
|
73
|
+
# Result : ScriptingAddition
|
74
|
+
#
|
75
|
+
# If both arguments are nil, a ScriptingAddition object for StandardAdditions is created
|
76
|
+
# and returned. This object is cached for efficiency and returned in subsequent calls;
|
77
|
+
# thus clients can conveniently write (e.g):
|
78
|
+
#
|
79
|
+
# osax.some_command
|
80
|
+
# osax.another_command
|
81
|
+
#
|
82
|
+
# instead of:
|
83
|
+
#
|
84
|
+
# sa = osax
|
85
|
+
# sa.some_command
|
86
|
+
# sa.another_command
|
87
|
+
#
|
88
|
+
# without the additional overhead of creating a new ScriptingAddition object each time.
|
89
|
+
#
|
90
|
+
if name == nil and app_name == nil
|
91
|
+
if @_standard_additions == nil
|
92
|
+
@_standard_additions = ScriptingAddition.new('StandardAdditions')
|
93
|
+
end
|
94
|
+
addition = @_standard_additions
|
95
|
+
else
|
96
|
+
if name == nil
|
97
|
+
name = 'StandardAdditions'
|
98
|
+
end
|
99
|
+
addition = ScriptingAddition.new(name)
|
100
|
+
if app_name
|
101
|
+
addition = addition.by_name(app_name)
|
102
|
+
end
|
83
103
|
end
|
84
104
|
return addition
|
85
105
|
end
|
86
106
|
|
107
|
+
# allow methods to be included via 'include OSAX'
|
108
|
+
|
109
|
+
def scripting_additions
|
110
|
+
return OSAX.scripting_additions
|
111
|
+
end
|
112
|
+
|
113
|
+
def osax(*args)
|
114
|
+
return OSAX.osax(*args)
|
115
|
+
end
|
116
|
+
|
117
|
+
#######
|
87
118
|
|
88
119
|
class ScriptingAddition < Appscript::Reference
|
89
120
|
# Represents a single scripting addition.
|
@@ -107,7 +138,7 @@ module OSAX
|
|
107
138
|
@_terms = OSAXCache[osax_name][1] = \
|
108
139
|
Terminology.tables_for_aetes(DefaultCodecs.unpack(desc))
|
109
140
|
end
|
110
|
-
osax_data = OSAXData.new(
|
141
|
+
osax_data = OSAXData.new(:current, nil, @_terms)
|
111
142
|
end
|
112
143
|
super(osax_data, AEM.app)
|
113
144
|
end
|
@@ -140,33 +171,38 @@ module OSAX
|
|
140
171
|
def by_name(name)
|
141
172
|
# name : string -- name or full path to application
|
142
173
|
return ScriptingAddition.new(@_osax_name,
|
143
|
-
OSAXData.new(FindApp.by_name(name),
|
174
|
+
OSAXData.new(:by_path, FindApp.by_name(name), @_terms))
|
144
175
|
end
|
145
176
|
|
146
177
|
def by_id(id)
|
147
178
|
# id : string -- bundle id of application
|
148
179
|
return ScriptingAddition.new(@_osax_name,
|
149
|
-
OSAXData.new(FindApp.by_id(id),
|
180
|
+
OSAXData.new(:by_path, FindApp.by_id(id), @_terms))
|
150
181
|
end
|
151
182
|
|
152
183
|
def by_creator(creator)
|
153
184
|
# creator : string -- four-character creator code of application
|
154
185
|
return ScriptingAddition.new(@_osax_name,
|
155
|
-
OSAXData.new(FindApp.by_creator(creator),
|
186
|
+
OSAXData.new(:by_path, FindApp.by_creator(creator), @_terms))
|
156
187
|
end
|
157
188
|
|
158
189
|
def by_pid(pid)
|
159
190
|
# pid : integer -- Unix process id
|
160
|
-
return ScriptingAddition.new(@_osax_name, OSAXData.new(
|
191
|
+
return ScriptingAddition.new(@_osax_name, OSAXData.new(:by_pid, pid, @_terms))
|
161
192
|
end
|
162
193
|
|
163
194
|
def by_url(url)
|
164
195
|
# url : string -- eppc URL of application
|
165
|
-
return ScriptingAddition.new(@_osax_name, OSAXData.new(
|
196
|
+
return ScriptingAddition.new(@_osax_name, OSAXData.new(:by_url, url, @_terms))
|
197
|
+
end
|
198
|
+
|
199
|
+
def by_aem_app(aem_app)
|
200
|
+
# aem_app : AEM::Application -- an AEM::Application instance
|
201
|
+
return ScriptingAddition.new(@_osax_name, OSAXData.new(:by_aem_app, aem_app, @_terms))
|
166
202
|
end
|
167
203
|
|
168
204
|
def current
|
169
|
-
return ScriptingAddition.new(@_osax_name, OSAXData.new(
|
205
|
+
return ScriptingAddition.new(@_osax_name, OSAXData.new(:current, nil, @_terms))
|
170
206
|
end
|
171
207
|
end
|
172
208
|
|
data/src/rbae.c
CHANGED
@@ -233,6 +233,7 @@ rbAE_AEDesc_isRecord(VALUE self)
|
|
233
233
|
return AECheckIsRecord(&(AEDESC_OF(self))) ? Qtrue : Qfalse;
|
234
234
|
}
|
235
235
|
|
236
|
+
|
236
237
|
static VALUE
|
237
238
|
rbAE_AEDesc_coerce(VALUE self, VALUE type)
|
238
239
|
{
|
@@ -244,6 +245,7 @@ rbAE_AEDesc_coerce(VALUE self, VALUE type)
|
|
244
245
|
return rbAE_wrapAEDesc(&desc);
|
245
246
|
}
|
246
247
|
|
248
|
+
|
247
249
|
static VALUE
|
248
250
|
rbAE_AEDesc_length(VALUE self)
|
249
251
|
{
|
@@ -256,6 +258,8 @@ rbAE_AEDesc_length(VALUE self)
|
|
256
258
|
}
|
257
259
|
|
258
260
|
|
261
|
+
/*******/
|
262
|
+
|
259
263
|
static VALUE
|
260
264
|
rbAE_AEDesc_putItem(VALUE self, VALUE index, VALUE desc)
|
261
265
|
{
|
@@ -295,8 +299,10 @@ rbAE_AEDesc_putAttr(VALUE self, VALUE key, VALUE desc)
|
|
295
299
|
}
|
296
300
|
|
297
301
|
|
302
|
+
/*******/
|
303
|
+
|
298
304
|
static VALUE
|
299
|
-
|
305
|
+
rbAE_AEDesc_getItem(VALUE self, VALUE index, VALUE type)
|
300
306
|
{
|
301
307
|
OSErr err = noErr;
|
302
308
|
AEKeyword key;
|
@@ -315,6 +321,38 @@ rbAE_AEDesc_get(VALUE self, VALUE index, VALUE type)
|
|
315
321
|
}
|
316
322
|
|
317
323
|
|
324
|
+
static VALUE
|
325
|
+
rbAE_AEDesc_getParam(VALUE self, VALUE key, VALUE type)
|
326
|
+
{
|
327
|
+
OSErr err = noErr;
|
328
|
+
AEDesc desc;
|
329
|
+
|
330
|
+
err = AEGetParamDesc(&(AEDESC_OF(self)),
|
331
|
+
rbStringToDescType(key),
|
332
|
+
rbStringToDescType(type),
|
333
|
+
&desc);
|
334
|
+
if (err != noErr) rbAE_raiseMacOSError("Can't get parameter from AEDesc.", err);
|
335
|
+
return rbAE_wrapAEDesc(&desc);
|
336
|
+
}
|
337
|
+
|
338
|
+
|
339
|
+
static VALUE
|
340
|
+
rbAE_AEDesc_getAttr(VALUE self, VALUE key, VALUE type)
|
341
|
+
{
|
342
|
+
OSErr err = noErr;
|
343
|
+
AEDesc desc;
|
344
|
+
|
345
|
+
err = AEGetAttributeDesc(&(AEDESC_OF(self)),
|
346
|
+
rbStringToDescType(key),
|
347
|
+
rbStringToDescType(type),
|
348
|
+
&desc);
|
349
|
+
if (err != noErr) rbAE_raiseMacOSError("Can't get attribute from AEDesc.", err);
|
350
|
+
return rbAE_wrapAEDesc(&desc);
|
351
|
+
}
|
352
|
+
|
353
|
+
|
354
|
+
/*******/
|
355
|
+
|
318
356
|
static VALUE
|
319
357
|
rbAE_AEDesc_send(VALUE self, VALUE sendMode, VALUE timeout)
|
320
358
|
{
|
@@ -706,7 +744,9 @@ Init_ae (void)
|
|
706
744
|
rb_define_method(cAEDesc, "put_item", rbAE_AEDesc_putItem, 2);
|
707
745
|
rb_define_method(cAEDesc, "put_param", rbAE_AEDesc_putParam, 2);
|
708
746
|
rb_define_method(cAEDesc, "put_attr", rbAE_AEDesc_putAttr, 2);
|
709
|
-
rb_define_method(cAEDesc, "
|
747
|
+
rb_define_method(cAEDesc, "get_item", rbAE_AEDesc_getItem, 2);
|
748
|
+
rb_define_method(cAEDesc, "get_param", rbAE_AEDesc_getParam, 2);
|
749
|
+
rb_define_method(cAEDesc, "get_attr", rbAE_AEDesc_getAttr, 2);
|
710
750
|
rb_define_method(cAEDesc, "send", rbAE_AEDesc_send, 2);
|
711
751
|
|
712
752
|
// AE::MacOSError
|
data/test/test_aemreference.rb
CHANGED
@@ -103,9 +103,9 @@ class TC_AEMReferences < Test::Unit::TestCase
|
|
103
103
|
assert_not_equal(AEMReference::App.elements('ctxt').property('ctxt'), AEMReference::App.property('ctxt').property('ctxt'))
|
104
104
|
assert_not_equal(AEMReference::App.elements('ctxt').property('ctxt'), 333)
|
105
105
|
assert_not_equal(333, AEMReference::App.property('ctxt').property('ctxt'))
|
106
|
-
# by-range and by-filter references do basic type checking to ensure a reference is given
|
107
|
-
assert_raises(TypeError) { AEMReference::App.elements('docu').by_range(1, 2) }
|
108
|
-
assert_raises(TypeError) { AEMReference::App.elements('docu').by_filter(1) }
|
106
|
+
# # by-range and by-filter references do basic type checking to ensure a reference is given
|
107
|
+
# assert_raises(TypeError) { AEMReference::App.elements('docu').by_range(1, 2) }
|
108
|
+
# assert_raises(TypeError) { AEMReference::App.elements('docu').by_filter(1) }
|
109
109
|
|
110
110
|
end
|
111
111
|
end
|
@@ -0,0 +1,135 @@
|
|
1
|
+
#!/usr/local/bin/ruby
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'appscript'
|
5
|
+
|
6
|
+
class AS_SafeObject
|
7
|
+
def self.hide(name)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
class TC_AppscriptNewApp < Test::Unit::TestCase
|
12
|
+
|
13
|
+
def test_by_name
|
14
|
+
[
|
15
|
+
'/Applications/TextEdit.app',
|
16
|
+
'Finder.app',
|
17
|
+
'System Events'
|
18
|
+
].each do |name|
|
19
|
+
a = Appscript.app(name)
|
20
|
+
assert_not_nil(a)
|
21
|
+
assert_instance_of(Appscript::Application, a)
|
22
|
+
assert_instance_of(Appscript::Reference, a.name)
|
23
|
+
end
|
24
|
+
assert_equal('app("/Applications/TextEdit.app")', Appscript.app('TextEdit').to_s)
|
25
|
+
assert_equal('app("/Applications/TextEdit.app")', Appscript.app.by_name('TextEdit').to_s)
|
26
|
+
|
27
|
+
assert_raises(Appscript::ApplicationNotFoundError) { Appscript.app('/non-existent/app') }
|
28
|
+
assert_raises(Appscript::ApplicationNotFoundError) { Appscript.app('non-existent.app') }
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_by_id
|
32
|
+
[
|
33
|
+
'com.apple.textedit',
|
34
|
+
'com.apple.finder',
|
35
|
+
].each do |name|
|
36
|
+
a = Appscript.app.by_id(name)
|
37
|
+
assert_not_nil(a)
|
38
|
+
assert_instance_of(Appscript::Application, a)
|
39
|
+
assert_instance_of(Appscript::Reference, a.name)
|
40
|
+
end
|
41
|
+
assert_equal('app("/Applications/TextEdit.app")', Appscript.app.by_id('com.apple.textedit').to_s)
|
42
|
+
|
43
|
+
assert_raises(Appscript::ApplicationNotFoundError) { Appscript.app.by_id('non.existent.app') }
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_by_creator
|
47
|
+
a = Appscript.app.by_creator('ttxt')
|
48
|
+
assert_instance_of(Appscript::Reference, a.name)
|
49
|
+
assert_equal('app("/Applications/TextEdit.app")', a.to_s)
|
50
|
+
assert_raises(Appscript::ApplicationNotFoundError) { Appscript.app.by_id('!@$o') }
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_by_pid
|
54
|
+
pid = `top -l1 | grep Finder | awk '{ print $1 }'`.to_i
|
55
|
+
a = Appscript.app.by_pid(pid)
|
56
|
+
assert_instance_of(Appscript::Reference, a.name)
|
57
|
+
assert_equal("app.by_pid(#{pid})", a.to_s)
|
58
|
+
assert_equal('Finder', a.name.get)
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_by_aem_app
|
62
|
+
a = Appscript.app.by_aem_app(AEM::Application.by_path('/Applications/TextEdit.app'))
|
63
|
+
assert_instance_of(Appscript::Reference, a.name)
|
64
|
+
assert_equal('app.by_aem_app(AEM::Application.by_path("/Applications/TextEdit.app"))', a.to_s)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
|
69
|
+
class TC_AppscriptCommands < Test::Unit::TestCase
|
70
|
+
|
71
|
+
def setup
|
72
|
+
@te = Appscript.app('TextEdit')
|
73
|
+
@f = Appscript.app('Finder')
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_commands_1
|
77
|
+
assert_equal('TextEdit', @te.name.get)
|
78
|
+
d = @te.make(:new=>:document, :with_properties=>{:text=>'test test_commands'})
|
79
|
+
assert_instance_of(Appscript::Reference, d)
|
80
|
+
d.text.end.make(:new=>:word, :with_data=>' test2')
|
81
|
+
assert_equal('test test_commands test2', d.text.get)
|
82
|
+
assert_instance_of(String,
|
83
|
+
d.text.get(:ignore=>[:diacriticals, :punctuation, :whitespace, :expansion], :timeout=>10))
|
84
|
+
assert_nil(d.get(:wait_reply=>false))
|
85
|
+
|
86
|
+
d.text.set("\302\251 M. Lef\303\250vre")
|
87
|
+
assert_equal("\302\251 M. Lef\303\250vre", d.text.get)
|
88
|
+
|
89
|
+
d.close(:saving=>:no)
|
90
|
+
end
|
91
|
+
|
92
|
+
def test_commands_2
|
93
|
+
d = @te.make(:new=>:document, :at=>@te.documents.end)
|
94
|
+
|
95
|
+
@te.set(d.text, :to=> 'test1')
|
96
|
+
assert_equal('test1', d.text.get)
|
97
|
+
|
98
|
+
@te.set(d.text, :to=> 'test2')
|
99
|
+
@te.make(:new=>:word, :at=>Appscript.app.documents[1].paragraphs.end, :with_data=>' test3')
|
100
|
+
assert_equal('test2 test3', d.text.get)
|
101
|
+
|
102
|
+
d.close(:saving=>:no)
|
103
|
+
|
104
|
+
assert_raises(Appscript::CommandError) { @te.documents[10000].get }
|
105
|
+
|
106
|
+
assert_instance_of(Fixnum, @te.documents.count)
|
107
|
+
assert_equal(@te.documents.count, @te.count(:each=>:document))
|
108
|
+
end
|
109
|
+
|
110
|
+
def test_commands_3
|
111
|
+
assert_equal('Finder', @f.name.get)
|
112
|
+
val = @f.home.folders['Desktop'].get(:result_type=>:alias)
|
113
|
+
assert_instance_of(MacTypes::Alias, val)
|
114
|
+
assert_equal(val, @f.desktop.get(:result_type=>:alias))
|
115
|
+
assert_instance_of(Array, @f.disks.get)
|
116
|
+
|
117
|
+
r = @f.home.get
|
118
|
+
f = r.get(:result_type=>:file_ref)
|
119
|
+
assert_equal(r, @f.items[f].get)
|
120
|
+
|
121
|
+
assert_equal(@f.home.items.get, @f.home.items.get)
|
122
|
+
assert_not_equal(@f.disks['non-existent'], @f.disks[1].get)
|
123
|
+
end
|
124
|
+
|
125
|
+
def test_command_error
|
126
|
+
begin
|
127
|
+
@f.items[10000].get
|
128
|
+
rescue Appscript::CommandError => e
|
129
|
+
assert_equal(-1728, e.to_i)
|
130
|
+
assert_equal("CommandError\n\t\tOSERROR: -1728\n\t\tMESSAGE: Can't get reference.\n\t\tCOMMAND: app(\"/System/Library/CoreServices/Finder.app\").items[10000].get()\n", e.to_s)
|
131
|
+
assert_instance_of(AEM::CommandError, e.real_error)
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
@@ -3,7 +3,6 @@
|
|
3
3
|
require 'test/unit'
|
4
4
|
require "appscript"
|
5
5
|
|
6
|
-
|
7
6
|
class TC_AppscriptReferences < Test::Unit::TestCase
|
8
7
|
|
9
8
|
def setup
|
@@ -13,6 +12,16 @@ class TC_AppscriptReferences < Test::Unit::TestCase
|
|
13
12
|
|
14
13
|
def test_reference_forms
|
15
14
|
[
|
15
|
+
|
16
|
+
[@te.documents[
|
17
|
+
Appscript.con.documents[3],
|
18
|
+
Appscript.con.documents['foo']],
|
19
|
+
@s+'.documents[' +
|
20
|
+
'con.documents[3], ' +
|
21
|
+
'con.documents["foo"]]', nil],
|
22
|
+
|
23
|
+
|
24
|
+
|
16
25
|
[@te.text, @s+'.text', nil],
|
17
26
|
|
18
27
|
[@te.documents, @s+'.documents', nil],
|
@@ -36,13 +45,6 @@ class TC_AppscriptReferences < Test::Unit::TestCase
|
|
36
45
|
|
37
46
|
[Appscript.con.documents[3], 'con.documents[3]', nil],
|
38
47
|
|
39
|
-
[@te.documents[
|
40
|
-
Appscript.con.documents[3],
|
41
|
-
Appscript.con.documents['foo']],
|
42
|
-
@s+'.documents[' +
|
43
|
-
'con.documents[3], ' +
|
44
|
-
'con.documents["foo"]]', nil],
|
45
|
-
|
46
48
|
|
47
49
|
[Appscript.its.name.eq('foo').and(Appscript.its.words.eq([])),
|
48
50
|
'its.name.eq("foo").and(its.words.eq([]))', nil],
|
data/test/test_mactypes.rb
CHANGED
@@ -46,6 +46,9 @@ class TC_MacTypes < Test::Unit::TestCase
|
|
46
46
|
`rm #{@path2}`
|
47
47
|
assert_raises(MacTypes::FileNotFoundError) { f.to_s } # File not found.
|
48
48
|
assert_raises(MacTypes::FileNotFoundError) { f.to_file_url } # File not found.
|
49
|
+
|
50
|
+
assert_equal(MacTypes::Alias.path("/Library/Scripts/"), MacTypes::Alias.path("/Library/Scripts/"))
|
51
|
+
assert_not_equal(MacTypes::Alias.path("/Library/Scripts/"), MacTypes::Alias.path("/Applications/"))
|
49
52
|
end
|
50
53
|
|
51
54
|
|
@@ -62,6 +65,9 @@ class TC_MacTypes < Test::Unit::TestCase
|
|
62
65
|
|
63
66
|
# check a not-found error is raised if getting Alias for a filesystem object that doesn't exist
|
64
67
|
assert_raises(MacTypes::FileNotFoundError) { g.to_alias } # File "/non/existent path" not found.
|
65
|
-
|
68
|
+
|
69
|
+
assert_equal(MacTypes::FileURL.path("/Library/Scripts/"), MacTypes::FileURL.path("/Library/Scripts/"))
|
70
|
+
assert_not_equal(MacTypes::FileURL.path("/Library/Scripts/"), MacTypes::FileURL.path("/Applications/"))
|
71
|
+
assert_not_equal(MacTypes::FileURL.path("/Library/Scripts/"), MacTypes::Alias.path("/Library/Scripts/"))
|
66
72
|
end
|
67
73
|
end
|