summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorSebastiano <[email protected]>2023-01-17 14:55:35 +0100
committerKoza <[email protected]>2023-04-12 17:27:52 +0200
commitf91cf59d7a62643140378e601f0a11a4deb23465 (patch)
tree612757024b7efb73d81d62402a56c347000108f8
parent9bd3367b35bcc85f74c749cfbab05e9c430ab064 (diff)
downloadcaxlsx-f91cf59d7a62643140378e601f0a11a4deb23465.tar.gz
caxlsx-f91cf59d7a62643140378e601f0a11a4deb23465.zip
improve validation
add test cases
-rw-r--r--lib/axlsx/drawing/pic.rb7
-rw-r--r--lib/axlsx/util/mime_type_utils.rb9
-rw-r--r--test/drawing/tc_pic.rb18
-rw-r--r--test/util/tc_mime_type_utils.rb2
4 files changed, 34 insertions, 2 deletions
diff --git a/lib/axlsx/drawing/pic.rb b/lib/axlsx/drawing/pic.rb
index b6d085de..f2f72cea 100644
--- a/lib/axlsx/drawing/pic.rb
+++ b/lib/axlsx/drawing/pic.rb
@@ -77,7 +77,10 @@ module Axlsx
def image_src=(v)
Axlsx::validate_string(v)
- unless remote?
+ if remote?
+ RegexValidator.validate('Pic.image_src', /\A#{URI::DEFAULT_PARSER.make_regexp}\z/, v)
+ RestrictionValidator.validate 'Pic.image_src', ALLOWED_MIME_TYPES, MimeTypeUtils.get_mime_type_from_uri(v)
+ else
RestrictionValidator.validate 'Pic.image_src', ALLOWED_MIME_TYPES, MimeTypeUtils.get_mime_type(v)
raise ArgumentError, "File does not exist" unless File.exist?(v)
end
@@ -194,7 +197,7 @@ module Axlsx
str << '</xdr:cNvPicPr></xdr:nvPicPr>'
str << '<xdr:blipFill>'
if remote?
- str << ('<a:blip xmlns:r ="' << XML_NS_R << '" r:link="' << relationship.Id << '" >')
+ str << ('<a:blip xmlns:r ="' << XML_NS_R << '" r:link="' << relationship.Id << '">')
else
str << ('<a:blip xmlns:r ="' << XML_NS_R << '" r:embed="' << relationship.Id << '">')
end
diff --git a/lib/axlsx/util/mime_type_utils.rb b/lib/axlsx/util/mime_type_utils.rb
index 9ad56630..5a6ad38e 100644
--- a/lib/axlsx/util/mime_type_utils.rb
+++ b/lib/axlsx/util/mime_type_utils.rb
@@ -1,3 +1,5 @@
+require 'open-uri'
+
module Axlsx
# This module defines some utils related with mime type detection
module MimeTypeUtils
@@ -7,5 +9,12 @@ module Axlsx
def self.get_mime_type(v)
Marcel::MimeType.for(Pathname.new(v))
end
+
+ # Detect a file mime type from URI
+ # @param [String] v URI
+ # @return [String] File mime type
+ def self.get_mime_type_from_uri(v)
+ Marcel::MimeType.for(URI.open(v))
+ end
end
end
diff --git a/test/drawing/tc_pic.rb b/test/drawing/tc_pic.rb
index 56042de5..aa4d6af7 100644
--- a/test/drawing/tc_pic.rb
+++ b/test/drawing/tc_pic.rb
@@ -8,7 +8,10 @@ class TestPic < Test::Unit::TestCase
@test_img_png = File.dirname(__FILE__) + "/../fixtures/image1.png"
@test_img_gif = File.dirname(__FILE__) + "/../fixtures/image1.gif"
@test_img_fake = File.dirname(__FILE__) + "/../fixtures/image1_fake.jpg"
+ @test_img_remote_png = "https://via.placeholder.com/150.png"
+ @test_img_remote_fake = "invalid_URI"
@image = ws.add_image :image_src => @test_img, :hyperlink => 'https://github.com/randym', :tooltip => "What's up doc?", :opacity => 5
+ @image_remote = ws.add_image :image_src => @test_img_remote_png, remote: true, :hyperlink => 'https://github.com/randym', :tooltip => "What's up doc?", :opacity => 5
end
def test_initialization
@@ -17,6 +20,13 @@ class TestPic < Test::Unit::TestCase
assert_equal(@image.image_src, @test_img)
end
+ def test_remote_img_initialization
+ assert_equal(@p.workbook.images[1], @image_remote)
+ assert_equal(@image_remote.file_name, nil)
+ assert_equal(@image_remote.image_src, @test_img_remote_png)
+ end
+
+
def test_anchor_swapping
# swap from one cell to two cell when end_at is specified
assert(@image.anchor.is_a?(Axlsx::OneCellAnchor))
@@ -76,6 +86,14 @@ class TestPic < Test::Unit::TestCase
assert_equal(@image.image_src, @test_img_jpg)
end
+ def test_remote_image_src
+ assert_raise(ArgumentError) { @image_remote.image_src = @test_img_fake }
+ assert_raise(ArgumentError) { @image_remote.image_src = @test_img_remote_fake }
+ assert_nothing_raised { @image_remote.image_src = @test_img_remote_png }
+ assert_equal(@image_remote.image_src, @test_img_remote_png)
+ end
+
+
def test_descr
assert_raise(ArgumentError) { @image.descr = 49 }
assert_nothing_raised { @image.descr = "test" }
diff --git a/test/util/tc_mime_type_utils.rb b/test/util/tc_mime_type_utils.rb
index cfeec9d3..9d116931 100644
--- a/test/util/tc_mime_type_utils.rb
+++ b/test/util/tc_mime_type_utils.rb
@@ -2,6 +2,7 @@ require 'tc_helper.rb'
class TestMimeTypeUtils < Test::Unit::TestCase
def setup
@test_img = File.dirname(__FILE__) + "/../fixtures/image1.jpeg"
+ @test_img_url = "https://via.placeholder.com/150.png"
end
def teardown
@@ -9,5 +10,6 @@ class TestMimeTypeUtils < Test::Unit::TestCase
def test_mime_type_utils
assert_equal(Axlsx::MimeTypeUtils::get_mime_type(@test_img), 'image/jpeg')
+ assert_equal(Axlsx::MimeTypeUtils::get_mime_type_from_uri(@test_img_url), 'image/png')
end
end