ffi-yajl 2.3.1-universal-java → 2.3.3-universal-java
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.
- checksums.yaml +5 -5
- data/README.md +11 -6
- data/ext/ffi_yajl/ext/encoder/extconf.rb +2 -2
- data/ext/ffi_yajl/ext/parser/extconf.rb +2 -2
- data/lib/ffi_yajl.rb +5 -5
- data/lib/ffi_yajl/benchmark/encode.rb +1 -1
- data/lib/ffi_yajl/benchmark/encode_profile.rb +1 -1
- data/lib/ffi_yajl/benchmark/parse.rb +1 -1
- data/lib/ffi_yajl/benchmark/parse_profile.rb +1 -1
- data/lib/ffi_yajl/benchmark/parse_profile_ruby_prof.rb +1 -1
- data/lib/ffi_yajl/benchmark/parse_stream.rb +2 -2
- data/lib/ffi_yajl/ext.rb +3 -3
- data/lib/ffi_yajl/ffi.rb +33 -33
- data/lib/ffi_yajl/ffi/encoder.rb +2 -0
- data/lib/ffi_yajl/ffi/parser.rb +9 -8
- data/lib/ffi_yajl/map_library_name.rb +3 -3
- data/lib/ffi_yajl/version.rb +1 -1
- metadata +3 -9
- data/Rakefile +0 -139
- data/spec/ffi_yajl/encoder_spec.rb +0 -221
- data/spec/ffi_yajl/map_library_name_spec.rb +0 -115
- data/spec/ffi_yajl/parser_spec.rb +0 -569
- data/spec/spec_helper.rb +0 -45
data/Rakefile
DELETED
@@ -1,139 +0,0 @@
|
|
1
|
-
$LOAD_PATH << File.expand_path(File.join(File.dirname( __FILE__ ), "lib"))
|
2
|
-
|
3
|
-
require "rspec/core/rake_task"
|
4
|
-
require "rubygems/package_task"
|
5
|
-
require "rake/extensiontask"
|
6
|
-
require "ffi_yajl/version"
|
7
|
-
|
8
|
-
Dir[File.expand_path("../*gemspec", __FILE__)].reverse_each do |gemspec_path|
|
9
|
-
gemspec = eval(IO.read(gemspec_path))
|
10
|
-
Gem::PackageTask.new(gemspec).define
|
11
|
-
end
|
12
|
-
|
13
|
-
begin
|
14
|
-
require "github_changelog_generator/task"
|
15
|
-
GitHubChangelogGenerator::RakeTask.new :changelog do |config|
|
16
|
-
config.issues = false
|
17
|
-
config.since_tag = "1.0.1"
|
18
|
-
config.exclude_labels = %w{duplicate question invalid wontfix changelog_skip}
|
19
|
-
end
|
20
|
-
rescue LoadError
|
21
|
-
puts "no github-changelog-generator"
|
22
|
-
end
|
23
|
-
|
24
|
-
desc "Build it and ship it"
|
25
|
-
task ship: [:clean, :gem] do
|
26
|
-
sh("git tag #{FFI_Yajl::VERSION}")
|
27
|
-
sh("git push --tags")
|
28
|
-
Dir[File.expand_path("../pkg/*.gem", __FILE__)].reverse_each do |built_gem|
|
29
|
-
sh("gem push #{built_gem}")
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
unix_gemspec = eval(File.read("ffi-yajl.gemspec"))
|
34
|
-
|
35
|
-
task :clean do
|
36
|
-
sh "rm -f Gemfile.lock"
|
37
|
-
sh "rm -rf pkg/* tmp/* .bundle lib/ffi_yajl/ext/*"
|
38
|
-
end
|
39
|
-
|
40
|
-
desc "install the gem locally"
|
41
|
-
task install: [:package] do
|
42
|
-
if defined?(RUBY_ENGINE) && RUBY_ENGINE == "jruby"
|
43
|
-
sh %{gem install pkg/#{unix_gemspec.name}-#{unix_gemspec.version}-universal-java.gem}
|
44
|
-
else
|
45
|
-
sh %{gem install pkg/#{unix_gemspec.name}-#{unix_gemspec.version}.gem}
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
spec = Gem::Specification.load("ffi-yajl.gemspec")
|
50
|
-
|
51
|
-
Rake::ExtensionTask.new do |ext|
|
52
|
-
ext.name = "encoder"
|
53
|
-
ext.lib_dir = "lib/ffi_yajl/ext"
|
54
|
-
ext.ext_dir = "ext/ffi_yajl/ext/encoder"
|
55
|
-
ext.gem_spec = spec
|
56
|
-
end
|
57
|
-
|
58
|
-
Rake::ExtensionTask.new do |ext|
|
59
|
-
ext.name = "parser"
|
60
|
-
ext.lib_dir = "lib/ffi_yajl/ext"
|
61
|
-
ext.ext_dir = "ext/ffi_yajl/ext/parser"
|
62
|
-
ext.gem_spec = spec
|
63
|
-
end
|
64
|
-
|
65
|
-
Rake::ExtensionTask.new do |ext|
|
66
|
-
ext.name = "dlopen"
|
67
|
-
ext.lib_dir = "lib/ffi_yajl/ext"
|
68
|
-
ext.ext_dir = "ext/ffi_yajl/ext/dlopen"
|
69
|
-
ext.gem_spec = spec
|
70
|
-
end
|
71
|
-
|
72
|
-
#
|
73
|
-
# test tasks
|
74
|
-
#
|
75
|
-
|
76
|
-
desc "Run all specs against both extensions"
|
77
|
-
task :spec do
|
78
|
-
Rake::Task["spec:ffi"].invoke
|
79
|
-
if !defined?(RUBY_ENGINE) || RUBY_ENGINE !~ /jruby/
|
80
|
-
Rake::Task["spec:ext"].invoke
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
namespace :spec do
|
85
|
-
desc "Run all specs against ffi extension"
|
86
|
-
RSpec::Core::RakeTask.new(:ffi) do |t|
|
87
|
-
ENV["FORCE_FFI_YAJL"] = "ffi"
|
88
|
-
t.pattern = FileList["spec/**/*_spec.rb"]
|
89
|
-
end
|
90
|
-
if !defined?(RUBY_ENGINE) || RUBY_ENGINE !~ /jruby/
|
91
|
-
desc "Run all specs again c extension"
|
92
|
-
RSpec::Core::RakeTask.new(:ext) do |t|
|
93
|
-
ENV["FORCE_FFI_YAJL"] = "ext"
|
94
|
-
t.pattern = FileList["spec/**/*_spec.rb"]
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
namespace :integration do
|
100
|
-
begin
|
101
|
-
require "kitchen"
|
102
|
-
rescue LoadError
|
103
|
-
task :vagrant do
|
104
|
-
puts "test-kitchen gem is not installed"
|
105
|
-
end
|
106
|
-
else
|
107
|
-
desc "Run Test Kitchen with Vagrant"
|
108
|
-
task :vagrant do
|
109
|
-
Kitchen.logger = Kitchen.default_file_logger
|
110
|
-
Kitchen::Config.new.instances.each do |instance|
|
111
|
-
instance.test(:always)
|
112
|
-
end
|
113
|
-
end
|
114
|
-
end
|
115
|
-
end
|
116
|
-
namespace :style do
|
117
|
-
desc "Run Ruby style checks"
|
118
|
-
begin
|
119
|
-
require "chefstyle"
|
120
|
-
require "rubocop/rake_task"
|
121
|
-
rescue LoadError
|
122
|
-
task :rubocop do
|
123
|
-
puts "chefstyle gem is not installed"
|
124
|
-
end
|
125
|
-
else
|
126
|
-
RuboCop::RakeTask.new(:rubocop) do |t|
|
127
|
-
t.fail_on_error = false
|
128
|
-
end
|
129
|
-
end
|
130
|
-
end
|
131
|
-
|
132
|
-
desc "Run all style checks"
|
133
|
-
task style: ["style:rubocop"]
|
134
|
-
|
135
|
-
desc "Run style + spec tests by default on travis"
|
136
|
-
task travis: %w{style spec}
|
137
|
-
|
138
|
-
desc "Run style + spec tests by default"
|
139
|
-
task default: %w{compile style spec}
|
@@ -1,221 +0,0 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
# Copyright (c) 2015 Lamont Granquist
|
3
|
-
# Copyright (c) 2015 Chef Software, Inc.
|
4
|
-
#
|
5
|
-
# Permission is hereby granted, free of charge, to any person obtaining
|
6
|
-
# a copy of this software and associated documentation files (the
|
7
|
-
# "Software"), to deal in the Software without restriction, including
|
8
|
-
# without limitation the rights to use, copy, modify, merge, publish,
|
9
|
-
# distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
-
# permit persons to whom the Software is furnished to do so, subject to
|
11
|
-
# the following conditions:
|
12
|
-
#
|
13
|
-
# The above copyright notice and this permission notice shall be
|
14
|
-
# included in all copies or substantial portions of the Software.
|
15
|
-
#
|
16
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
-
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
-
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
-
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
-
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
-
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
-
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
23
|
-
|
24
|
-
require "spec_helper"
|
25
|
-
require "date"
|
26
|
-
|
27
|
-
describe "FFI_Yajl::Encoder" do
|
28
|
-
let(:options) { {} }
|
29
|
-
|
30
|
-
let(:encoder) { FFI_Yajl::Encoder.new(options) }
|
31
|
-
|
32
|
-
it "encodes hashes in keys as strings", ruby_gte_193: true do
|
33
|
-
ruby = { { "a" => "b" } => 2 }
|
34
|
-
expect(encoder.encode(ruby)).to eq('{"{\"a\"=>\"b\"}":2}')
|
35
|
-
end
|
36
|
-
|
37
|
-
it "encodes arrays in keys as strings", ruby_gte_193: true do
|
38
|
-
ruby = { [0, 1] => 2 }
|
39
|
-
expect(encoder.encode(ruby)).to eq('{"[0, 1]":2}')
|
40
|
-
end
|
41
|
-
|
42
|
-
it "encodes nil in keys as strings" do
|
43
|
-
ruby = { nil => 2 }
|
44
|
-
expect(encoder.encode(ruby)).to eq('{"":2}')
|
45
|
-
end
|
46
|
-
|
47
|
-
it "encodes true in keys as strings" do
|
48
|
-
ruby = { true => 2 }
|
49
|
-
expect(encoder.encode(ruby)).to eq('{"true":2}')
|
50
|
-
end
|
51
|
-
|
52
|
-
it "encodes false in keys as strings" do
|
53
|
-
ruby = { false => 2 }
|
54
|
-
expect(encoder.encode(ruby)).to eq('{"false":2}')
|
55
|
-
end
|
56
|
-
|
57
|
-
it "encodes fixnums in keys as strings" do
|
58
|
-
ruby = { 1 => 2 }
|
59
|
-
expect(encoder.encode(ruby)).to eq('{"1":2}')
|
60
|
-
end
|
61
|
-
|
62
|
-
it "encodes floats in keys as strings" do
|
63
|
-
ruby = { 1.1 => 2 }
|
64
|
-
expect(encoder.encode(ruby)).to eq('{"1.1":2}')
|
65
|
-
end
|
66
|
-
|
67
|
-
it "encodes bignums in keys as strings" do
|
68
|
-
ruby = { 12_345_678_901_234_567_890 => 2 }
|
69
|
-
expect(encoder.encode(ruby)).to eq('{"12345678901234567890":2}')
|
70
|
-
end
|
71
|
-
|
72
|
-
it "encodes objects in keys as strings" do
|
73
|
-
o = Object.new
|
74
|
-
ruby = { o => 2 }
|
75
|
-
expect(encoder.encode(ruby)).to eq(%{{"#{o}":2}})
|
76
|
-
end
|
77
|
-
|
78
|
-
it "encodes an object in a key which has a #to_json method as strings" do
|
79
|
-
class Thing
|
80
|
-
def to_json(*a)
|
81
|
-
"{}"
|
82
|
-
end
|
83
|
-
end
|
84
|
-
o = Thing.new
|
85
|
-
ruby = { o => 2 }
|
86
|
-
expect(encoder.encode(ruby)).to eq(%{{"#{o}":2}})
|
87
|
-
end
|
88
|
-
|
89
|
-
# XXX: 127 == YAJL_MAX_DEPTH hardcodedness, zero control for us, it isn't even a twiddleable #define
|
90
|
-
it "raises an exception for deeply nested arrays" do
|
91
|
-
root = []
|
92
|
-
a = root
|
93
|
-
127.times { |_| a << []; a = a[0] }
|
94
|
-
expect { encoder.encode(root) }.to raise_error(FFI_Yajl::EncodeError)
|
95
|
-
end
|
96
|
-
|
97
|
-
it "raises an exception for deeply nested hashes" do
|
98
|
-
root = {}
|
99
|
-
a = root
|
100
|
-
127.times { |_| a["a"] = {}; a = a["a"] }
|
101
|
-
expect { encoder.encode(root) }.to raise_error(FFI_Yajl::EncodeError)
|
102
|
-
end
|
103
|
-
|
104
|
-
it "encodes symbols in keys as strings" do
|
105
|
-
ruby = { thing: 1 }
|
106
|
-
expect(encoder.encode(ruby)).to eq('{"thing":1}')
|
107
|
-
end
|
108
|
-
|
109
|
-
it "encodes symbols in values as strings" do
|
110
|
-
ruby = { "thing" => :one }
|
111
|
-
expect(encoder.encode(ruby)).to eq('{"thing":"one"}')
|
112
|
-
end
|
113
|
-
|
114
|
-
it "can encode 32-bit unsigned ints" do
|
115
|
-
ruby = { "gid" => 4_294_967_294 }
|
116
|
-
expect(encoder.encode(ruby)).to eq('{"gid":4294967294}')
|
117
|
-
end
|
118
|
-
|
119
|
-
context "when the encoder has nil passed in for options" do
|
120
|
-
let(:encoder) { FFI_Yajl::Encoder.new(nil) }
|
121
|
-
|
122
|
-
it "does not throw an exception" do
|
123
|
-
ruby = { "foo" => "bar" }
|
124
|
-
expect(encoder.encode(ruby)).to eq("{\"foo\":\"bar\"}")
|
125
|
-
end
|
126
|
-
end
|
127
|
-
|
128
|
-
it "can encode Date objects" do
|
129
|
-
ruby = Date.parse("2001-02-03")
|
130
|
-
expect(encoder.encode(ruby)).to eq( '"2001-02-03"' )
|
131
|
-
end
|
132
|
-
|
133
|
-
it "can encode StringIOs" do
|
134
|
-
ruby = { "foo" => StringIO.new("THING") }
|
135
|
-
expect(encoder.encode(ruby)).to eq("{\"foo\":\"THING\"}")
|
136
|
-
end
|
137
|
-
|
138
|
-
context "when encoding Time objects in UTC timezone" do
|
139
|
-
before do
|
140
|
-
@saved_tz = ENV["TZ"]
|
141
|
-
ENV["TZ"] = "UTC"
|
142
|
-
end
|
143
|
-
|
144
|
-
after do
|
145
|
-
ENV["TZ"] = @saved_tz
|
146
|
-
end
|
147
|
-
|
148
|
-
it "encodes them correctly" do
|
149
|
-
ruby = Time.local(2001, 02, 02, 21, 05, 06)
|
150
|
-
expect(encoder.encode(ruby)).to eq( '"2001-02-02 21:05:06 +0000"' )
|
151
|
-
end
|
152
|
-
end
|
153
|
-
|
154
|
-
it "can encode DateTime objects" do
|
155
|
-
ruby = DateTime.parse("2001-02-03T04:05:06.1+07:00")
|
156
|
-
expect(encoder.encode(ruby)).to eq( '"2001-02-03T04:05:06+07:00"' )
|
157
|
-
end
|
158
|
-
|
159
|
-
describe "testing .to_json for Objects" do
|
160
|
-
class NoToJson; end
|
161
|
-
class HasToJson
|
162
|
-
def to_json(*args)
|
163
|
-
"{}"
|
164
|
-
end
|
165
|
-
end
|
166
|
-
|
167
|
-
it "calls .to_s for objects without .to_json" do
|
168
|
-
expect(encoder.encode(NoToJson.new)).to match(/^"#<NoToJson:\w+>"$/)
|
169
|
-
end
|
170
|
-
|
171
|
-
it "calls .to_json for objects wit .to_json" do
|
172
|
-
expect(encoder.encode(HasToJson.new)).to eq("{}")
|
173
|
-
end
|
174
|
-
end
|
175
|
-
|
176
|
-
context "when encoding invalid utf-8" do
|
177
|
-
ruby = {
|
178
|
-
"automatic" => {
|
179
|
-
"etc" => {
|
180
|
-
"passwd" => {
|
181
|
-
"root" => { "dir" => "/root", "gid" => 0, "uid" => 0, "shell" => "/bin/sh", "gecos" => "Elan Ruusam\xc3\xa4e" },
|
182
|
-
"glen" => { "dir" => "/home/glen", "gid" => 500, "uid" => 500, "shell" => "/bin/bash", "gecos" => "Elan Ruusam\xE4e" },
|
183
|
-
"helmüt" => { "dir" => "/home/helmüt", "gid" => 500, "uid" => 500, "shell" => "/bin/bash", "gecos" => "Hañs Helmüt" },
|
184
|
-
},
|
185
|
-
},
|
186
|
-
},
|
187
|
-
}
|
188
|
-
|
189
|
-
it "raises an error on invalid json" do
|
190
|
-
expect { encoder.encode(ruby) }.to raise_error(FFI_Yajl::EncodeError, /Invalid UTF-8 string 'Elan Ruusam.*': cannot encode to UTF-8/)
|
191
|
-
end
|
192
|
-
|
193
|
-
context "when validate_utf8 is off" do
|
194
|
-
let(:options) { { validate_utf8: false } }
|
195
|
-
|
196
|
-
it "does not raise an error" do
|
197
|
-
expect { encoder.encode(ruby) }.not_to raise_error
|
198
|
-
end
|
199
|
-
|
200
|
-
it "returns utf8" do
|
201
|
-
expect( encoder.encode(ruby).encoding ).to eq(Encoding::UTF_8)
|
202
|
-
end
|
203
|
-
|
204
|
-
it "returns valid utf8" do
|
205
|
-
expect( encoder.encode(ruby).valid_encoding? ).to be true
|
206
|
-
end
|
207
|
-
|
208
|
-
it "does not mangle valid utf8" do
|
209
|
-
json = encoder.encode(ruby)
|
210
|
-
expect(json).to match(/Hañs Helmüt/)
|
211
|
-
end
|
212
|
-
|
213
|
-
it "does not grow after a round trip" do
|
214
|
-
json = encoder.encode(ruby)
|
215
|
-
ruby2 = FFI_Yajl::Parser.parse(json)
|
216
|
-
json2 = encoder.encode(ruby2)
|
217
|
-
expect(json).to eql(json2)
|
218
|
-
end
|
219
|
-
end
|
220
|
-
end
|
221
|
-
end
|
@@ -1,115 +0,0 @@
|
|
1
|
-
# Copyright (c) 2015 Lamont Granquist
|
2
|
-
# Copyright (c) 2015 Chef Software, Inc.
|
3
|
-
#
|
4
|
-
# Permission is hereby granted, free of charge, to any person obtaining
|
5
|
-
# a copy of this software and associated documentation files (the
|
6
|
-
# "Software"), to deal in the Software without restriction, including
|
7
|
-
# without limitation the rights to use, copy, modify, merge, publish,
|
8
|
-
# distribute, sublicense, and/or sell copies of the Software, and to
|
9
|
-
# permit persons to whom the Software is furnished to do so, subject to
|
10
|
-
# the following conditions:
|
11
|
-
#
|
12
|
-
# The above copyright notice and this permission notice shall be
|
13
|
-
# included in all copies or substantial portions of the Software.
|
14
|
-
#
|
15
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
-
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
17
|
-
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
-
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
19
|
-
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
20
|
-
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
21
|
-
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
|
-
|
23
|
-
require "spec_helper"
|
24
|
-
|
25
|
-
class Test
|
26
|
-
extend FFI_Yajl::MapLibraryName
|
27
|
-
end
|
28
|
-
|
29
|
-
host_os_library_name_mapping = {
|
30
|
-
"mingw" => [ "libyajl.so", "yajl.dll" ],
|
31
|
-
"mswin" => [ "libyajl.so", "yajl.dll" ],
|
32
|
-
"cygwin" => [ "libyajl.so", "cygyajl.dll" ],
|
33
|
-
"darwin" => [ "libyajl.bundle", "libyajl.dylib" ],
|
34
|
-
"solaris2" => [ "libyajl.so" ],
|
35
|
-
"linux" => [ "libyajl.so" ],
|
36
|
-
"aix" => [ "libyajl.so" ],
|
37
|
-
"hpux" => [ "libyajl.so" ],
|
38
|
-
"netbsd" => [ "libyajl.so" ],
|
39
|
-
"openbsd" => [ "libyajl.so" ],
|
40
|
-
"freebsd" => [ "libyajl.so" ],
|
41
|
-
}
|
42
|
-
|
43
|
-
describe "FFI_Yajl::MapLibraryName" do
|
44
|
-
let(:libyajl2_opt_path) { "/libyajl2/lib" }
|
45
|
-
before do
|
46
|
-
allow(Libyajl2).to receive(:opt_path).and_return(libyajl2_opt_path)
|
47
|
-
end
|
48
|
-
|
49
|
-
host_os_library_name_mapping.each do |host_os, library_names|
|
50
|
-
context "#library_names" do
|
51
|
-
it "maps #{host_os} correctly" do
|
52
|
-
allow(Test).to receive(:host_os).and_return(host_os)
|
53
|
-
expect(Test.send(:library_names)).to eq(library_names)
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
context "#expanded_library_names" do
|
58
|
-
it "maps #{host_os} correctly" do
|
59
|
-
allow(Test).to receive(:host_os).and_return(host_os)
|
60
|
-
expanded_library_names = []
|
61
|
-
library_names.each do |library_name|
|
62
|
-
path = File.expand_path(File.join(libyajl2_opt_path, library_name))
|
63
|
-
expanded_library_names.push(path)
|
64
|
-
expect(File).to receive(:file?).with(path).and_return(true)
|
65
|
-
end
|
66
|
-
expect(Test.send(:expanded_library_names)).to eq(expanded_library_names)
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
context "#dlopen_yajl_library" do
|
71
|
-
it "should call dlopen against an expanded library name if it finds it on #{host_os}" do
|
72
|
-
allow(Test).to receive(:host_os).and_return(host_os)
|
73
|
-
library_names.each do |library_name|
|
74
|
-
path = File.expand_path(File.join(libyajl2_opt_path, library_name))
|
75
|
-
allow(File).to receive(:file?).with(path).and_return(true)
|
76
|
-
allow(Test).to receive(:dlopen).with(path).and_return(nil)
|
77
|
-
end
|
78
|
-
Test.send(:dlopen_yajl_library)
|
79
|
-
end
|
80
|
-
it "if dlopen calls all raise it should still use the short names on #{host_os}" do
|
81
|
-
allow(Test).to receive(:host_os).and_return(host_os)
|
82
|
-
library_names.each do |library_name|
|
83
|
-
path = File.expand_path(File.join(libyajl2_opt_path, library_name))
|
84
|
-
allow(File).to receive(:file?).with(path).and_return(true)
|
85
|
-
allow(Test).to receive(:dlopen).with(path).and_raise(ArgumentError)
|
86
|
-
end
|
87
|
-
allow(Test).to receive(:dlopen).with(library_names.first).and_return(nil)
|
88
|
-
Test.send(:dlopen_yajl_library)
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
context "ffi_open_yajl_library" do
|
93
|
-
it "should call ffi_lib against an expanded library name if it finds it on #{host_os}" do
|
94
|
-
allow(Test).to receive(:host_os).and_return(host_os)
|
95
|
-
library_names.each do |library_name|
|
96
|
-
path = File.expand_path(File.join(libyajl2_opt_path, library_name))
|
97
|
-
allow(File).to receive(:file?).with(path).and_return(true)
|
98
|
-
allow(Test).to receive(:ffi_lib).with(path).and_return(nil)
|
99
|
-
end
|
100
|
-
Test.send(:ffi_open_yajl_library)
|
101
|
-
end
|
102
|
-
|
103
|
-
it "if dlopen calls all raise it should still use 'yajl' on #{host_os}" do
|
104
|
-
allow(Test).to receive(:host_os).and_return(host_os)
|
105
|
-
library_names.each do |library_name|
|
106
|
-
path = File.expand_path(File.join(libyajl2_opt_path, library_name))
|
107
|
-
allow(File).to receive(:file?).with(path).and_return(true)
|
108
|
-
allow(Test).to receive(:ffi_lib).with(path).and_raise(LoadError)
|
109
|
-
end
|
110
|
-
allow(Test).to receive(:ffi_lib).with("yajl").and_return(nil)
|
111
|
-
Test.send(:ffi_open_yajl_library)
|
112
|
-
end
|
113
|
-
end
|
114
|
-
end
|
115
|
-
end
|