linkparser 1.0.3 → 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/ChangeLog +47 -0
- data/LICENSE +1 -1
- data/README +4 -31
- data/Rakefile +5 -6
- data/Rakefile.local +5 -0
- data/ext/extconf.rb +2 -0
- data/ext/linkage.c +2 -2
- data/ext/parseoptions.c +49 -1
- data/ext/sentence.c +33 -3
- data/lib/linkparser.rb +4 -4
- data/lib/linkparser/sentence.rb +24 -18
- data/rake/191_compat.rb +26 -0
- data/rake/helpers.rb +60 -43
- data/rake/manual.rb +42 -15
- data/rake/packaging.rb +27 -6
- data/rake/publishing.rb +78 -65
- data/rake/rdoc.rb +5 -12
- data/rake/svn.rb +50 -12
- data/rake/testing.rb +2 -1
- data/rake/win32.rb +186 -0
- data/spec/linkparser/parseoptions_spec.rb +15 -1
- data/spec/linkparser/sentence_spec.rb +31 -6
- metadata +15 -6
data/rake/rdoc.rb
CHANGED
@@ -1,22 +1,15 @@
|
|
1
1
|
#
|
2
|
-
# RDoc Rake tasks
|
3
|
-
# $Id: rdoc.rb
|
2
|
+
# RDoc Rake tasks
|
3
|
+
# $Id: rdoc.rb 93 2009-03-20 13:02:30Z deveiant $
|
4
4
|
#
|
5
5
|
|
6
|
-
gem 'rdoc'
|
6
|
+
gem 'rdoc', '>= 2.4.1'
|
7
7
|
|
8
|
+
require 'rubygems'
|
8
9
|
require 'rdoc/rdoc'
|
9
10
|
require 'rake/clean'
|
10
11
|
|
11
12
|
|
12
|
-
if RDoc::RDoc::GENERATORS.key?( 'darkfish' )
|
13
|
-
$have_darkfish = true
|
14
|
-
else
|
15
|
-
trace "No darkfish generator."
|
16
|
-
$have_darkfish = false
|
17
|
-
end
|
18
|
-
|
19
|
-
|
20
13
|
# Append docs/lib to the load path if it exists for a locally-installed Darkfish
|
21
14
|
DOCSLIB = DOCSDIR + 'lib'
|
22
15
|
$LOAD_PATH.unshift( DOCSLIB.to_s ) if DOCSLIB.exist?
|
@@ -32,7 +25,7 @@ desc "Build API documentation in #{RDOCDIR}"
|
|
32
25
|
task :rdoc => [ Rake.application.rakefile, *DOCFILES ] do
|
33
26
|
args = RDOC_OPTIONS
|
34
27
|
args += [ '-o', RDOCDIR.to_s ]
|
35
|
-
args += [ '-f', 'darkfish' ]
|
28
|
+
args += [ '-f', 'darkfish' ]
|
36
29
|
args += DOCFILES.collect {|pn| pn.to_s }
|
37
30
|
|
38
31
|
trace "Building docs with arguments: %s" % [ args.join(' ') ]
|
data/rake/svn.rb
CHANGED
@@ -1,18 +1,16 @@
|
|
1
1
|
#
|
2
2
|
# Subversion Rake Tasks
|
3
|
-
# $Id: svn.rb
|
3
|
+
# $Id: svn.rb 105 2009-06-01 19:20:12Z deveiant $
|
4
4
|
#
|
5
5
|
# Authors:
|
6
6
|
# * Michael Granger <ged@FaerieMUD.org>
|
7
7
|
#
|
8
8
|
|
9
|
-
require 'rubygems'
|
10
|
-
gem 'rake', '>= 0.8.3'
|
11
|
-
|
12
9
|
require 'pp'
|
13
10
|
require 'yaml'
|
14
11
|
require 'date'
|
15
12
|
require 'time'
|
13
|
+
require 'abbrev'
|
16
14
|
|
17
15
|
# Strftime format for tags/releases
|
18
16
|
TAG_TIMESTAMP_FORMAT = '%Y%m%d-%H%M%S'
|
@@ -25,9 +23,9 @@ DEFAULT_KEYWORDS = %w[Date Rev Author URL Id]
|
|
25
23
|
KEYWORDED_FILEDIRS = %w[applets spec bin etc ext experiments examples lib misc docs]
|
26
24
|
KEYWORDED_FILEPATTERN = /
|
27
25
|
^(?:
|
28
|
-
(?:meta)?rakefile.*
|
26
|
+
(?:meta)?rakefile.* # Rakefiles
|
29
27
|
|
|
30
|
-
.*\.(?:rb|c|h|js|html|css|template|erb) # Source file extensions
|
28
|
+
.*\.(?:rb|c|h|js|html|css|template|erb|page) # Source file extensions
|
31
29
|
|
|
32
30
|
readme|install|todo
|
33
31
|
)$/ix
|
@@ -58,8 +56,11 @@ end
|
|
58
56
|
### a hash.
|
59
57
|
def get_svn_info( dir='.' )
|
60
58
|
return {} unless File.directory?( File.join(dir, '.svn') )
|
61
|
-
info = IO.read( '|-' ) or exec 'svn', 'info', dir
|
59
|
+
info = IO.read( '|-' ) or exec 'svn', 'info', dir.to_s
|
62
60
|
return YAML.load( info ) # 'svn info' outputs valid YAML! Yay!
|
61
|
+
rescue NotImplementedError
|
62
|
+
trace "No fork(), proceeding without svn info..."
|
63
|
+
return {}
|
63
64
|
end
|
64
65
|
|
65
66
|
|
@@ -204,6 +205,15 @@ def get_latest_release_tag
|
|
204
205
|
end
|
205
206
|
|
206
207
|
|
208
|
+
### Return the names of all existing branches.
|
209
|
+
def get_branch_names
|
210
|
+
rooturl = get_svn_repo_root()
|
211
|
+
branchesurl = rooturl + "/#{SVN_BRANCHES_DIR}"
|
212
|
+
|
213
|
+
return svn_ls( branchesurl )
|
214
|
+
end
|
215
|
+
|
216
|
+
|
207
217
|
### Extract a diff from the specified subversion working +dir+ and return it.
|
208
218
|
def make_svn_commit_log( dir='.' )
|
209
219
|
diff = IO.read( '|-' ) or exec 'svn', 'diff'
|
@@ -382,14 +392,15 @@ namespace :svn do
|
|
382
392
|
desc "Copy the HEAD revision of the current #{SVN_TRUNK_DIR}/ to #{SVN_BRANCHES_DIR} with a " +
|
383
393
|
"user-specified name."
|
384
394
|
task :branch, [:name] do |task, args|
|
385
|
-
|
386
|
-
|
395
|
+
branchname = args.name
|
396
|
+
unless branchname
|
397
|
+
branchname = prompt( "Branch name" ) or abort
|
387
398
|
end
|
388
399
|
|
389
400
|
svninfo = get_svn_info()
|
390
401
|
svntrunk = Pathname.new( svninfo['Repository Root'] ) + SVN_TRUNK_DIR
|
391
402
|
svnbranchdir = Pathname.new( svninfo['Repository Root'] ) + SVN_BRANCHES_DIR
|
392
|
-
svnbranch = svnbranchdir +
|
403
|
+
svnbranch = svnbranchdir + branchname
|
393
404
|
|
394
405
|
desc = "Making a new branch: #{svnbranch}"
|
395
406
|
ask_for_confirmation( desc ) do
|
@@ -401,6 +412,33 @@ namespace :svn do
|
|
401
412
|
end
|
402
413
|
end
|
403
414
|
|
415
|
+
|
416
|
+
desc "Switch the working copy to the named branch"
|
417
|
+
task :switch, [:name] do |task, args|
|
418
|
+
branches = get_branch_names().collect {|name| name.chomp('/') }
|
419
|
+
|
420
|
+
unless args.name
|
421
|
+
log "Branches are:\n" + branches.collect {|br| " #{br}" }.join( "\n" )
|
422
|
+
|
423
|
+
begin
|
424
|
+
oldproc = Readline.completion_proc
|
425
|
+
abbrev = branches.abbrev
|
426
|
+
Readline.completion_proc = lambda{|string| abbrev[string] }
|
427
|
+
|
428
|
+
name = prompt( "Branch to switch to" ) or abort
|
429
|
+
args.with_defaults( :name => name )
|
430
|
+
ensure
|
431
|
+
Readline.completion_proc = oldproc unless oldproc.nil?
|
432
|
+
end
|
433
|
+
end
|
434
|
+
|
435
|
+
svninfo = get_svn_info()
|
436
|
+
abort "Branch '#{args.name}' does not exist" unless branches.include?( args.name )
|
437
|
+
branchuri = Pathname.new( svninfo['Repository Root'] ) + SVN_BRANCHES_DIR + args.name
|
438
|
+
run 'svn', 'sw', branchuri
|
439
|
+
end
|
440
|
+
task :sw => :switch
|
441
|
+
|
404
442
|
|
405
443
|
desc "Switch to the trunk if the working copy isn't there already."
|
406
444
|
task :trunk do
|
@@ -529,7 +567,7 @@ namespace :svn do
|
|
529
567
|
desc "Check in all the changes in your current working copy"
|
530
568
|
task :checkin => ['svn:update', 'svn:newfiles', 'test', 'svn:fix_keywords', COMMIT_MSG_FILE] do
|
531
569
|
targets = get_target_args()
|
532
|
-
$
|
570
|
+
$stderr.puts '---', File.read( COMMIT_MSG_FILE ), '---'
|
533
571
|
ask_for_confirmation( "Continue with checkin?" ) do
|
534
572
|
run 'svn', 'ci', '-F', COMMIT_MSG_FILE, targets
|
535
573
|
rm_f COMMIT_MSG_FILE
|
@@ -562,7 +600,7 @@ namespace :svn do
|
|
562
600
|
end
|
563
601
|
|
564
602
|
unless files_needing_fixups.empty?
|
565
|
-
$
|
603
|
+
$stderr.puts "Files needing keyword fixes: ",
|
566
604
|
files_needing_fixups.collect {|f|
|
567
605
|
" %s: %s" % [f, kwmap[f] ? kwmap[f].join(' ') : "(no keywords)"]
|
568
606
|
}
|
data/rake/testing.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#
|
2
2
|
# Rake tasklib for testing tasks
|
3
|
-
# $Id: testing.rb
|
3
|
+
# $Id: testing.rb 99 2009-04-14 13:03:03Z deveiant $
|
4
4
|
#
|
5
5
|
# Authors:
|
6
6
|
# * Michael Granger <ged@FaerieMUD.org>
|
@@ -45,6 +45,7 @@ begin
|
|
45
45
|
require 'spec/rake/spectask'
|
46
46
|
|
47
47
|
### Task: spec
|
48
|
+
desc "Run specs"
|
48
49
|
task :spec => 'spec:doc'
|
49
50
|
|
50
51
|
namespace :spec do
|
data/rake/win32.rb
ADDED
@@ -0,0 +1,186 @@
|
|
1
|
+
#
|
2
|
+
# Win32-specific tasks (cross-compiling, etc.)
|
3
|
+
#
|
4
|
+
# Thanks to some people that understand this stuff better than me for
|
5
|
+
# posting helpful blog posts. This stuff is an amalgam of stuff they did:
|
6
|
+
#
|
7
|
+
# * Mauricio Fernandez
|
8
|
+
# http://eigenclass.org/hiki/cross+compiling+rcovrt
|
9
|
+
#
|
10
|
+
# * Jeremy Hinegardner
|
11
|
+
# http://www.copiousfreetime.org/articles/2008/10/12/building-gems-for-windows.html
|
12
|
+
#
|
13
|
+
# * Aaron Patterson
|
14
|
+
# http://tenderlovemaking.com/2008/11/21/cross-compiling-ruby-gems-for-win32/
|
15
|
+
|
16
|
+
require 'rake'
|
17
|
+
require 'pathname'
|
18
|
+
require 'rubygems/platform'
|
19
|
+
require 'rbconfig'
|
20
|
+
require 'uri'
|
21
|
+
require 'net/ftp'
|
22
|
+
|
23
|
+
HOMEDIR = Pathname( '~' ).expand_path
|
24
|
+
RUBYVERSION = '1.8.6-p287'
|
25
|
+
RUBYVERSION_MAJORMINOR = RUBYVERSION[/^\d+\.\d+/]
|
26
|
+
|
27
|
+
RUBY_DL_BASE = "ftp://ftp.ruby-lang.org/pub/ruby/#{RUBYVERSION_MAJORMINOR}/"
|
28
|
+
RUBY_DL_URI = URI( RUBY_DL_BASE + "ruby-#{RUBYVERSION}.tar.gz" )
|
29
|
+
|
30
|
+
XCOMPILER_DIR = HOMEDIR + '.ruby_mingw32'
|
31
|
+
|
32
|
+
XCOMPILER_DL = XCOMPILER_DIR + "ruby-#{RUBYVERSION}.tar.gz"
|
33
|
+
XCOMPILER_SRC = XCOMPILER_DIR + "ruby-#{RUBYVERSION}"
|
34
|
+
|
35
|
+
XCOMPILER_BIN = XCOMPILER_DIR + 'bin'
|
36
|
+
XCOMPILER_LIB = XCOMPILER_DIR + 'lib'
|
37
|
+
XCOMPILER_RUBY = XCOMPILER_BIN + 'ruby.exe'
|
38
|
+
|
39
|
+
XCOMPILER_LOAD_PATH = XCOMPILER_LIB + "ruby/#{RUBYVERSION_MAJORMINOR}/i386-mingw32"
|
40
|
+
|
41
|
+
TAR_OPTS = { :compression => :gzip }
|
42
|
+
|
43
|
+
WIN32_GEMSPEC = GEMSPEC.dup
|
44
|
+
WIN32_GEMSPEC.files += FileList[ EXTDIR + '**.{dll,so}' ]
|
45
|
+
WIN32_GEMSPEC.platform = Gem::Platform.new( 'i386-mingw32' )
|
46
|
+
WIN32_GEMSPEC.extensions = []
|
47
|
+
|
48
|
+
|
49
|
+
CONFIGURE_CMD = %W[
|
50
|
+
env
|
51
|
+
ac_cv_func_getpgrp_void=no
|
52
|
+
ac_cv_func_setpgrp_void=yes
|
53
|
+
rb_cv_negative_time_t=no
|
54
|
+
ac_cv_func_memcmp_working=yes
|
55
|
+
rb_cv_binary_elf=no
|
56
|
+
./configure
|
57
|
+
--host=i386-mingw32
|
58
|
+
--target=i386-mingw32
|
59
|
+
--build=#{Config::CONFIG['build']}
|
60
|
+
--prefix=#{XCOMPILER_DIR}
|
61
|
+
]
|
62
|
+
|
63
|
+
### Archive::Tar::Reader#extract (as of 0.9.0) is broken w.r.t.
|
64
|
+
### permissions, so we have to do this ourselves.
|
65
|
+
def untar( tarfile, targetdir )
|
66
|
+
targetdir = Pathname( targetdir )
|
67
|
+
raise "No such directory: #{targetdir}" unless targetdir.directory?
|
68
|
+
|
69
|
+
reader = Archive::Tar::Reader.new( tarfile.to_s, TAR_OPTS )
|
70
|
+
|
71
|
+
mkdir_p( targetdir )
|
72
|
+
reader.each( true ) do |header, body|
|
73
|
+
path = targetdir + header[:path]
|
74
|
+
# trace "Header is: %p" % [ header ]
|
75
|
+
|
76
|
+
case header[:type]
|
77
|
+
when :file
|
78
|
+
trace " #{path}"
|
79
|
+
path.open( File::WRONLY|File::EXCL|File::CREAT|File::TRUNC, header[:mode] ) do |fio|
|
80
|
+
bytesize = header[:size]
|
81
|
+
fio.write( body[0,bytesize] )
|
82
|
+
end
|
83
|
+
|
84
|
+
when :directory
|
85
|
+
trace " #{path}"
|
86
|
+
path.mkpath
|
87
|
+
|
88
|
+
when :link
|
89
|
+
linktarget = targetdir + header[:dest]
|
90
|
+
trace " #{path} => #{linktarget}"
|
91
|
+
path.make_link( linktarget.to_s )
|
92
|
+
|
93
|
+
when :symlink
|
94
|
+
linktarget = targetdir + header[:dest]
|
95
|
+
trace " #{path} -> #{linktarget}"
|
96
|
+
path.make_symlink( linktarget )
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|
101
|
+
|
102
|
+
|
103
|
+
begin
|
104
|
+
require 'archive/tar'
|
105
|
+
|
106
|
+
namespace :win32 do
|
107
|
+
directory XCOMPILER_DIR.to_s
|
108
|
+
|
109
|
+
file XCOMPILER_DL => XCOMPILER_DIR do
|
110
|
+
# openuri can't handle this -- passive ftp required?
|
111
|
+
# run 'wget', '-O', XCOMPILER_DL, RUBY_DL_URI
|
112
|
+
log "Downloading ruby distro from %s" % [ RUBY_DL_URI ]
|
113
|
+
ftp = Net::FTP.new( RUBY_DL_URI.host )
|
114
|
+
ftp.login
|
115
|
+
ftp.getbinaryfile( RUBY_DL_URI.path, XCOMPILER_DL, 4096 )
|
116
|
+
ftp.close
|
117
|
+
end
|
118
|
+
|
119
|
+
directory XCOMPILER_SRC.to_s
|
120
|
+
task XCOMPILER_SRC => [ XCOMPILER_DIR, XCOMPILER_DL ] do
|
121
|
+
if XCOMPILER_SRC.exist?
|
122
|
+
trace "Rake fails. #{XCOMPILER_SRC} already exists."
|
123
|
+
else
|
124
|
+
untar( XCOMPILER_DL, XCOMPILER_DIR )
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
file XCOMPILER_RUBY => XCOMPILER_SRC do
|
129
|
+
Dir.chdir( XCOMPILER_SRC ) do
|
130
|
+
unless File.exist?( 'Makefile.in.orig' )
|
131
|
+
File.open( 'Makefile.in.new', IO::CREAT|IO::WRONLY|IO::EXCL ) do |ofh|
|
132
|
+
IO.readlines( 'Makefile.in' ).each do |line|
|
133
|
+
next if line.include?( 0.chr )
|
134
|
+
trace " copying line: %p" % [ line ]
|
135
|
+
line.sub!( /ALT_SEPARATOR = ".*?"/, "ALT_SEPARATOR = 92.chr" )
|
136
|
+
ofh.write( line )
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
mv 'Makefile.in', 'Makefile.in.orig'
|
141
|
+
mv 'Makefile.in.new', 'Makefile.in'
|
142
|
+
end
|
143
|
+
|
144
|
+
run *CONFIGURE_CMD
|
145
|
+
run 'make', 'ruby'
|
146
|
+
run 'make', 'rubyw.exe'
|
147
|
+
run 'make', 'install'
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
file XCOMPILER_LOAD_PATH => XCOMPILER_RUBY
|
152
|
+
|
153
|
+
desc "Cross-compile the library for Win32 systems, installing a cross-" +
|
154
|
+
"compiled Ruby if necessary"
|
155
|
+
task :build => [ EXTDIR, XCOMPILER_LOAD_PATH.to_s ] do
|
156
|
+
in_subdirectory( EXTDIR ) do
|
157
|
+
ruby "-I#{XCOMPILER_LOAD_PATH}", 'extconf.rb'
|
158
|
+
sh 'make'
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
desc "Build a binary gem for win32 systems"
|
163
|
+
task :gem => ['win32:build', PKGDIR.to_s] + WIN32_GEMSPEC.files do
|
164
|
+
when_writing( "Creating win32 GEM" ) do
|
165
|
+
pkgname = WIN32_GEMSPEC.file_name
|
166
|
+
builder = Gem::Builder.new( WIN32_GEMSPEC )
|
167
|
+
builder.build
|
168
|
+
mv pkgname, PKGDIR + pkgname, :verbose => $trace
|
169
|
+
end
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
rescue LoadError => err
|
174
|
+
task :no_win32_build do
|
175
|
+
abort "No win32 build: %s: %s" % [ err.class.name, err.message ]
|
176
|
+
end
|
177
|
+
|
178
|
+
namespace :win32 do
|
179
|
+
desc "Build a binary Gem for Win32 systems, installing a cross " +
|
180
|
+
"compiled Ruby if necessary"
|
181
|
+
task :build => :no_win32_build
|
182
|
+
end
|
183
|
+
|
184
|
+
end
|
185
|
+
|
186
|
+
|
@@ -1,7 +1,7 @@
|
|
1
1
|
#!/usr/bin/ruby -w
|
2
2
|
#
|
3
3
|
# Specification for the LinkParser::ParseOptions class
|
4
|
-
# $Id: parseoptions_spec.rb
|
4
|
+
# $Id: parseoptions_spec.rb 53 2009-06-03 12:52:13Z deveiant $
|
5
5
|
#
|
6
6
|
# See the LICENSE file in the distribution for information about copyright and licensing.
|
7
7
|
#
|
@@ -73,6 +73,20 @@ describe LinkParser::ParseOptions do
|
|
73
73
|
@opts.reset_resources
|
74
74
|
}.should_not raise_error()
|
75
75
|
end
|
76
|
+
|
77
|
+
|
78
|
+
describe "in versions of link-grammar >= 4.5.0" do
|
79
|
+
|
80
|
+
before( :each ) do
|
81
|
+
version_vec = LinkParser.link_grammar_version[/(\d+\.\d+\.\d+)/, 1].
|
82
|
+
split('.').collect {|v| v.to_i }.pack('n*')
|
83
|
+
pending "the underlying library is %s" unless version_vec >= [4,5,0].pack('n*')
|
84
|
+
end
|
85
|
+
|
86
|
+
it "knows whether spell_guessing is enabled or not" do
|
87
|
+
@opts.spell_guessing_enabled?.should == true
|
88
|
+
end
|
89
|
+
end
|
76
90
|
|
77
91
|
end
|
78
92
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
#!/usr/bin/ruby -w
|
2
2
|
#
|
3
3
|
# Specification for the LinkParser::Sentence class
|
4
|
-
# $Id: sentence_spec.rb
|
4
|
+
# $Id: sentence_spec.rb 53 2009-06-03 12:52:13Z deveiant $
|
5
5
|
#
|
6
6
|
# See the LICENSE file in the distribution for information about copyright and licensing.
|
7
7
|
#
|
@@ -33,8 +33,18 @@ describe LinkParser::Sentence do
|
|
33
33
|
@sentence = LinkParser::Sentence.new( "The cat runs.", @dict )
|
34
34
|
end
|
35
35
|
|
36
|
-
|
37
|
-
|
36
|
+
it "returns an informational string when inspected before it's been parsed" do
|
37
|
+
@sentence.inspect.should =~ %r{
|
38
|
+
<
|
39
|
+
LinkParser::Sentence:0x[[:xdigit:]]+
|
40
|
+
\s
|
41
|
+
\(unparsed\)
|
42
|
+
>
|
43
|
+
}x
|
44
|
+
end
|
45
|
+
|
46
|
+
it "returns an informational string when inspected after it's been parsed" do
|
47
|
+
@sentence.parse
|
38
48
|
@sentence.inspect.should =~ %r{
|
39
49
|
<
|
40
50
|
LinkParser::Sentence:0x[[:xdigit:]]+
|
@@ -69,12 +79,12 @@ describe LinkParser::Sentence do
|
|
69
79
|
it "delegates linkage methods to its first linkage" do
|
70
80
|
@sentence.num_links.should == 5
|
71
81
|
end
|
72
|
-
|
82
|
+
|
73
83
|
|
74
84
|
it "knows whether or not it's been parsed" do
|
75
|
-
@sentence.
|
85
|
+
@sentence.should_not be_parsed()
|
76
86
|
@sentence.parse
|
77
|
-
@sentence.
|
87
|
+
@sentence.should be_parsed()
|
78
88
|
end
|
79
89
|
|
80
90
|
|
@@ -113,5 +123,20 @@ describe LinkParser::Sentence do
|
|
113
123
|
end
|
114
124
|
end
|
115
125
|
|
126
|
+
|
127
|
+
describe "parsed from a sentence that yields no linkages" do
|
128
|
+
|
129
|
+
before( :each ) do
|
130
|
+
@sentence = @dict.parse( "The event that he smiled at me gives me hope" )
|
131
|
+
end
|
132
|
+
|
133
|
+
it "raises a descriptive exception if a delegated method is called" do
|
134
|
+
expect {
|
135
|
+
@sentence.constituent_tree_string
|
136
|
+
}.to raise_error( LinkParser::Error, /sentence has no linkages/i )
|
137
|
+
end
|
138
|
+
|
139
|
+
end
|
140
|
+
|
116
141
|
end
|
117
142
|
|