Skip to content

Commit ff1c02e

Browse files
committed
Fix a bug where RDF::Literal::Integer.new("0123") was interpreted as an Octal value.
1 parent 3360405 commit ff1c02e

2 files changed

Lines changed: 17 additions & 12 deletions

File tree

lib/rdf/model/literal/integer.rb

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,8 @@ def initialize(value, options = {})
2323
@string = options[:lexical] if options.has_key?(:lexical)
2424
@string ||= value if value.is_a?(String)
2525
@object = case
26-
when value.is_a?(::String) then Integer(value) rescue nil
27-
when value.is_a?(::Integer) then value
2826
when value.respond_to?(:to_i) then value.to_i
27+
when value.is_a?(::Integer) then value
2928
else Integer(value.to_s) rescue nil
3029
end
3130
end

spec/model_literal_spec.rb

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@ def self.literal(selector)
3030
def self.literals(*selector)
3131
selector.inject([]) do |ary, sel|
3232
ary += case sel
33-
when :all_simple then [:empty, :plain, :string].map {|sel| literal(sel)}
34-
when :all_plain_lang then [:empty_lang, :plain_lang].map {|sel| literal(sel)}
35-
when :all_native then [:false, :true, :int, :long, :double, :time, :date, :datetime].map {|sel| literal(sel)}
33+
when :all_simple then [:empty, :plain, :string].map {|s| literal(s)}
34+
when :all_plain_lang then [:empty_lang, :plain_lang].map {|s| literal(s)}
35+
when :all_native then [:false, :true, :int, :long, :double, :time, :date, :datetime].map {|s| literal(s)}
3636
when :all_plain then literals(:all_simple, :all_plain_lang)
3737
else literals(:all_plain, :all_native)
3838
end
@@ -180,7 +180,7 @@ def self.literals(*selector)
180180
end
181181

182182
it "returns true for value of #{args.inspect}" do
183-
literal = RDF::Literal.new(*args)
183+
#literal = RDF::Literal.new(*args)
184184
#expect(literal).to eq literal.value # FIXME: fails on xsd:date, xsd:time, and xsd:dateTime
185185
end
186186
end
@@ -351,6 +351,7 @@ def self.literals(*selector)
351351
it_behaves_like 'RDF::Literal lexical values', "1"
352352
it_behaves_like 'RDF::Literal canonicalization', RDF::XSD.integer, [
353353
%w(01 1),
354+
%w(0123 123),
354355
%w(1 1),
355356
%w(-1 -1),
356357
%w(+1 1)
@@ -381,12 +382,15 @@ def self.literals(*selector)
381382
it_behaves_like 'RDF::Literal lexical values', "1.1"
382383
it_behaves_like 'RDF::Literal canonicalization', RDF::XSD.decimal, [
383384
%w(1 1.0),
385+
%w(01 1.0),
386+
%w(0123 123.0),
384387
%w(-1 -1.0),
385388
%w(1. 1.0),
386389
%w(1.0 1.0),
387390
%w(1.00 1.0),
388391
%w(+001.00 1.0),
389392
%w(123.456 123.456),
393+
%w(0123.456 123.456),
390394
%w(1.000000000 1.0),
391395
%w(2.345 2.345),
392396
%w(2.3 2.3),
@@ -439,6 +443,8 @@ def self.literals(*selector)
439443
it_behaves_like 'RDF::Literal lexical values', "1.0E0"
440444
it_behaves_like 'RDF::Literal canonicalization', RDF::XSD.double, [
441445
%w(1 1.0E0),
446+
%w(01 1.0E0),
447+
%w(0123 1.23E2),
442448
%w(-1 -1.0E0),
443449
%w(+01.000 1.0E0),
444450
#%w(1. 1.0E0),
@@ -502,7 +508,7 @@ def self.literals(*selector)
502508

503509
it "recognizes -INF" do
504510
expect(-inf).to be_infinite
505-
expect(RDF::Literal.new('-INF', datatype: RDF::Literal::Double::DATATYPE)).to eq -inf
511+
expect(RDF::Literal.new('-INF', datatype: RDF::Literal::Double::DATATYPE)).to eq(-inf)
506512
expect {-inf.canonicalize}.not_to raise_error
507513
end
508514

@@ -542,10 +548,10 @@ def self.literals(*selector)
542548

543549
# Multiplication
544550
{
545-
-1 => [RDF::Literal::Double.new("-INF"), RDF::Literal::Double.new("-INF")],
546-
0 => [:nan, :nan],
547-
1 => [RDF::Literal::Double.new("INF"), RDF::Literal::Double.new("INF")],
548-
}.each do |n, (p, m)|
551+
-1 => RDF::Literal::Double.new("-INF"),
552+
0 => :nan,
553+
1 => RDF::Literal::Double.new("INF"),
554+
}.each do |n, p|
549555
it "returns #{p} for #{n} * INF" do
550556
if p == :nan
551557
expect(RDF::Literal::Double.new(n) * inf).to be_nan
@@ -581,7 +587,7 @@ def self.literals(*selector)
581587
it "adds infinities" do
582588
expect(inf + inf).to eq inf
583589
expect(inf + -inf).to be_nan
584-
expect(-inf + -inf).to eq -inf
590+
expect(-inf + -inf).to eq(-inf)
585591
expect(-inf + inf).to be_nan
586592
end
587593

0 commit comments

Comments
 (0)