From 963337aede12a3af739db8b44dbfd558de64b7af Mon Sep 17 00:00:00 2001
From: Markus Reiter
Date: Tue, 23 Aug 2016 10:18:28 +0200
Subject: Add vendored `plist`, version 3.1.0.
---
Library/Homebrew/vendor/README.md | 27 ++-
Library/Homebrew/vendor/plist/plist.rb | 21 +++
Library/Homebrew/vendor/plist/plist/generator.rb | 222 ++++++++++++++++++++++
Library/Homebrew/vendor/plist/plist/parser.rb | 224 +++++++++++++++++++++++
4 files changed, 493 insertions(+), 1 deletion(-)
create mode 100644 Library/Homebrew/vendor/plist/plist.rb
create mode 100644 Library/Homebrew/vendor/plist/plist/generator.rb
create mode 100644 Library/Homebrew/vendor/plist/plist/parser.rb
(limited to 'Library')
diff --git a/Library/Homebrew/vendor/README.md b/Library/Homebrew/vendor/README.md
index 848ce703f..b3fff49f4 100644
--- a/Library/Homebrew/vendor/README.md
+++ b/Library/Homebrew/vendor/README.md
@@ -1,7 +1,9 @@
Vendored Dependencies
=====================
-* [okjson](https://github.com/kr/okjson), version 43.
+* [okjson](https://github.com/kr/okjson), version 43
+
+* [plist](https://github.com/bleything/plist), version 3.1.0
* [ruby-macho](https://github.com/Homebrew/ruby-macho), version 0.2.5
@@ -29,6 +31,29 @@ Vendored Dependencies
> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
> THE SOFTWARE.
+### plist
+
+> Copyright (c) 2006-2010, Ben Bleything and Patrick May
+>
+> Permission is hereby granted, free of charge, to any person obtaining
+> a copy of this software and associated documentation files (the
+> "Software"), to deal in the Software without restriction, including
+> without limitation the rights to use, copy, modify, merge, publish,
+> distribute, sublicense, and/or sell copies of the Software, and to
+> permit persons to whom the Software is furnished to do so, subject to
+> the following conditions:
+>
+> The above copyright notice and this permission notice shall be included
+> in all copies or substantial portions of the Software.
+>
+> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
+> KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+> WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+> NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+> LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+> OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+> WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
### ruby-macho
> The MIT License
diff --git a/Library/Homebrew/vendor/plist/plist.rb b/Library/Homebrew/vendor/plist/plist.rb
new file mode 100644
index 000000000..71f27145f
--- /dev/null
+++ b/Library/Homebrew/vendor/plist/plist.rb
@@ -0,0 +1,21 @@
+#!/usr/bin/env ruby
+#
+# = plist
+#
+# This is the main file for plist. Everything interesting happens in
+# Plist and Plist::Emit.
+#
+# Copyright 2006-2010 Ben Bleything and Patrick May
+# Distributed under the MIT License
+#
+
+require 'base64'
+require 'cgi'
+require 'stringio'
+
+require 'plist/generator'
+require 'plist/parser'
+
+module Plist
+ VERSION = '3.1.0'
+end
diff --git a/Library/Homebrew/vendor/plist/plist/generator.rb b/Library/Homebrew/vendor/plist/plist/generator.rb
new file mode 100644
index 000000000..3b84c301f
--- /dev/null
+++ b/Library/Homebrew/vendor/plist/plist/generator.rb
@@ -0,0 +1,222 @@
+#!/usr/bin/env ruby
+#
+# = plist
+#
+# Copyright 2006-2010 Ben Bleything and Patrick May
+# Distributed under the MIT License
+#
+
+module Plist ; end
+
+# === Create a plist
+# You can dump an object to a plist in one of two ways:
+#
+# * Plist::Emit.dump(obj)
+# * obj.to_plist
+# * This requires that you mixin the Plist::Emit module, which is already done for +Array+ and +Hash+.
+#
+# The following Ruby classes are converted into native plist types:
+# Array, Bignum, Date, DateTime, Fixnum, Float, Hash, Integer, String, Symbol, Time, true, false
+# * +Array+ and +Hash+ are both recursive; their elements will be converted into plist nodes inside the and containers (respectively).
+# * +IO+ (and its descendants) and +StringIO+ objects are read from and their contents placed in a element.
+# * User classes may implement +to_plist_node+ to dictate how they should be serialized; otherwise the object will be passed to Marshal.dump and the result placed in a element.
+#
+# For detailed usage instructions, refer to USAGE[link:files/docs/USAGE.html] and the methods documented below.
+module Plist::Emit
+ # Helper method for injecting into classes. Calls Plist::Emit.dump with +self+.
+ def to_plist(envelope = true)
+ return Plist::Emit.dump(self, envelope)
+ end
+
+ # Helper method for injecting into classes. Calls Plist::Emit.save_plist with +self+.
+ def save_plist(filename)
+ Plist::Emit.save_plist(self, filename)
+ end
+
+ # The following Ruby classes are converted into native plist types:
+ # Array, Bignum, Date, DateTime, Fixnum, Float, Hash, Integer, String, Symbol, Time
+ #
+ # Write us (via RubyForge) if you think another class can be coerced safely into one of the expected plist classes.
+ #
+ # +IO+ and +StringIO+ objects are encoded and placed in elements; other objects are Marshal.dump'ed unless they implement +to_plist_node+.
+ #
+ # The +envelope+ parameters dictates whether or not the resultant plist fragment is wrapped in the normal XML/plist header and footer. Set it to false if you only want the fragment.
+ def self.dump(obj, envelope = true)
+ output = plist_node(obj)
+
+ output = wrap(output) if envelope
+
+ return output
+ end
+
+ # Writes the serialized object's plist to the specified filename.
+ def self.save_plist(obj, filename)
+ File.open(filename, 'wb') do |f|
+ f.write(obj.to_plist)
+ end
+ end
+
+ private
+ def self.plist_node(element)
+ output = ''
+
+ if element.respond_to? :to_plist_node
+ output << element.to_plist_node
+ else
+ case element
+ when Array
+ if element.empty?
+ output << "\n"
+ else
+ output << tag('array') {
+ element.collect {|e| plist_node(e)}
+ }
+ end
+ when Hash
+ if element.empty?
+ output << "\n"
+ else
+ inner_tags = []
+
+ element.keys.sort_by{|k| k.to_s }.each do |k|
+ v = element[k]
+ inner_tags << tag('key', CGI::escapeHTML(k.to_s))
+ inner_tags << plist_node(v)
+ end
+
+ output << tag('dict') {
+ inner_tags
+ }
+ end
+ when true, false
+ output << "<#{element}/>\n"
+ when Time
+ output << tag('date', element.utc.strftime('%Y-%m-%dT%H:%M:%SZ'))
+ when Date # also catches DateTime
+ output << tag('date', element.strftime('%Y-%m-%dT%H:%M:%SZ'))
+ when String, Symbol, Fixnum, Bignum, Integer, Float
+ output << tag(element_type(element), CGI::escapeHTML(element.to_s))
+ when IO, StringIO
+ element.rewind
+ contents = element.read
+ # note that apple plists are wrapped at a different length then
+ # what ruby's base64 wraps by default.
+ # I used #encode64 instead of #b64encode (which allows a length arg)
+ # because b64encode is b0rked and ignores the length arg.
+ data = "\n"
+ Base64::encode64(contents).gsub(/\s+/, '').scan(/.{1,68}/o) { data << $& << "\n" }
+ output << tag('data', data)
+ else
+ output << comment( 'The element below contains a Ruby object which has been serialized with Marshal.dump.' )
+ data = "\n"
+ Base64::encode64(Marshal.dump(element)).gsub(/\s+/, '').scan(/.{1,68}/o) { data << $& << "\n" }
+ output << tag('data', data )
+ end
+ end
+
+ return output
+ end
+
+ def self.comment(content)
+ return "\n"
+ end
+
+ def self.tag(type, contents = '', &block)
+ out = nil
+
+ if block_given?
+ out = IndentedString.new
+ out << "<#{type}>"
+ out.raise_indent
+
+ out << block.call
+
+ out.lower_indent
+ out << "#{type}>"
+ else
+ out = "<#{type}>#{contents.to_s}#{type}>\n"
+ end
+
+ return out.to_s
+ end
+
+ def self.wrap(contents)
+ output = ''
+
+ output << '' + "\n"
+ output << '' + "\n"
+ output << '' + "\n"
+
+ output << contents
+
+ output << '' + "\n"
+
+ return output
+ end
+
+ def self.element_type(item)
+ case item
+ when String, Symbol
+ 'string'
+
+ when Fixnum, Bignum, Integer
+ 'integer'
+
+ when Float
+ 'real'
+
+ else
+ raise "Don't know about this data type... something must be wrong!"
+ end
+ end
+ private
+ class IndentedString #:nodoc:
+ attr_accessor :indent_string
+
+ def initialize(str = "\t")
+ @indent_string = str
+ @contents = ''
+ @indent_level = 0
+ end
+
+ def to_s
+ return @contents
+ end
+
+ def raise_indent
+ @indent_level += 1
+ end
+
+ def lower_indent
+ @indent_level -= 1 if @indent_level > 0
+ end
+
+ def <<(val)
+ if val.is_a? Array
+ val.each do |f|
+ self << f
+ end
+ else
+ # if it's already indented, don't bother indenting further
+ unless val =~ /\A#{@indent_string}/
+ indent = @indent_string * @indent_level
+
+ @contents << val.gsub(/^/, indent)
+ else
+ @contents << val
+ end
+
+ # it already has a newline, don't add another
+ @contents << "\n" unless val =~ /\n$/
+ end
+ end
+ end
+end
+
+class Array #:nodoc:
+ include Plist::Emit
+end
+
+class Hash #:nodoc:
+ include Plist::Emit
+end
diff --git a/Library/Homebrew/vendor/plist/plist/parser.rb b/Library/Homebrew/vendor/plist/plist/parser.rb
new file mode 100644
index 000000000..de441fcc5
--- /dev/null
+++ b/Library/Homebrew/vendor/plist/plist/parser.rb
@@ -0,0 +1,224 @@
+#!/usr/bin/env ruby
+#
+# = plist
+#
+# Copyright 2006-2010 Ben Bleything and Patrick May
+# Distributed under the MIT License
+#
+
+# Plist parses Mac OS X xml property list files into ruby data structures.
+#
+# === Load a plist file
+# This is the main point of the library:
+#
+# r = Plist::parse_xml( filename_or_xml )
+module Plist
+# Note that I don't use these two elements much:
+#
+# + Date elements are returned as DateTime objects.
+# + Data elements are implemented as Tempfiles
+#
+# Plist::parse_xml will blow up if it encounters a Date element.
+# If you encounter such an error, or if you have a Date element which
+# can't be parsed into a Time object, please send your plist file to
+# plist@hexane.org so that I can implement the proper support.
+ def Plist::parse_xml( filename_or_xml )
+ listener = Listener.new
+ #parser = REXML::Parsers::StreamParser.new(File.new(filename), listener)
+ parser = StreamParser.new(filename_or_xml, listener)
+ parser.parse
+ listener.result
+ end
+
+ class Listener
+ #include REXML::StreamListener
+
+ attr_accessor :result, :open
+
+ def initialize
+ @result = nil
+ @open = Array.new
+ end
+
+
+ def tag_start(name, attributes)
+ @open.push PTag::mappings[name].new
+ end
+
+ def text( contents )
+ @open.last.text = contents if @open.last
+ end
+
+ def tag_end(name)
+ last = @open.pop
+ if @open.empty?
+ @result = last.to_ruby
+ else
+ @open.last.children.push last
+ end
+ end
+ end
+
+ class StreamParser
+ def initialize( plist_data_or_file, listener )
+ if plist_data_or_file.respond_to? :read
+ @xml = plist_data_or_file.read
+ elsif File.exist? plist_data_or_file
+ @xml = File.read( plist_data_or_file )
+ else
+ @xml = plist_data_or_file
+ end
+
+ @listener = listener
+ end
+
+ TEXT = /([^<]+)/
+ XMLDECL_PATTERN = /<\?xml\s+(.*?)\?>*/um
+ DOCTYPE_PATTERN = /\s*)/um
+ COMMENT_START = /\A/um
+
+
+ def parse
+ plist_tags = PTag::mappings.keys.join('|')
+ start_tag = /<(#{plist_tags})([^>]*)>/i
+ end_tag = /<\/(#{plist_tags})[^>]*>/i
+
+ require 'strscan'
+
+ @scanner = StringScanner.new( @xml )
+ until @scanner.eos?
+ if @scanner.scan(COMMENT_START)
+ @scanner.scan(COMMENT_END)
+ elsif @scanner.scan(XMLDECL_PATTERN)
+ elsif @scanner.scan(DOCTYPE_PATTERN)
+ elsif @scanner.scan(start_tag)
+ @listener.tag_start(@scanner[1], nil)
+ if (@scanner[2] =~ /\/$/)
+ @listener.tag_end(@scanner[1])
+ end
+ elsif @scanner.scan(TEXT)
+ @listener.text(@scanner[1])
+ elsif @scanner.scan(end_tag)
+ @listener.tag_end(@scanner[1])
+ else
+ raise "Unimplemented element"
+ end
+ end
+ end
+ end
+
+ class PTag
+ @@mappings = { }
+ def PTag::mappings
+ @@mappings
+ end
+
+ def PTag::inherited( sub_class )
+ key = sub_class.to_s.downcase
+ key.gsub!(/^plist::/, '' )
+ key.gsub!(/^p/, '') unless key == "plist"
+
+ @@mappings[key] = sub_class
+ end
+
+ attr_accessor :text, :children
+ def initialize
+ @children = Array.new
+ end
+
+ def to_ruby
+ raise "Unimplemented: " + self.class.to_s + "#to_ruby on #{self.inspect}"
+ end
+ end
+
+ class PList < PTag
+ def to_ruby
+ children.first.to_ruby if children.first
+ end
+ end
+
+ class PDict < PTag
+ def to_ruby
+ dict = Hash.new
+ key = nil
+
+ children.each do |c|
+ if key.nil?
+ key = c.to_ruby
+ else
+ dict[key] = c.to_ruby
+ key = nil
+ end
+ end
+
+ dict
+ end
+ end
+
+ class PKey < PTag
+ def to_ruby
+ CGI::unescapeHTML(text || '')
+ end
+ end
+
+ class PString < PTag
+ def to_ruby
+ CGI::unescapeHTML(text || '')
+ end
+ end
+
+ class PArray < PTag
+ def to_ruby
+ children.collect do |c|
+ c.to_ruby
+ end
+ end
+ end
+
+ class PInteger < PTag
+ def to_ruby
+ text.to_i
+ end
+ end
+
+ class PTrue < PTag
+ def to_ruby
+ true
+ end
+ end
+
+ class PFalse < PTag
+ def to_ruby
+ false
+ end
+ end
+
+ class PReal < PTag
+ def to_ruby
+ text.to_f
+ end
+ end
+
+ require 'date'
+ class PDate < PTag
+ def to_ruby
+ DateTime.parse(text)
+ end
+ end
+
+ require 'base64'
+ class PData < PTag
+ def to_ruby
+ data = Base64.decode64(text.gsub(/\s+/, '')) unless text.nil?
+ begin
+ return Marshal.load(data)
+ rescue Exception => e
+ io = StringIO.new
+ io.write data
+ io.rewind
+ return io
+ end
+ end
+ end
+end
--
cgit v1.2.3
From 1e1a8bf626b044b5772635f9ac28ce89c0b431db Mon Sep 17 00:00:00 2001
From: Markus Reiter
Date: Tue, 23 Aug 2016 23:36:00 +0200
Subject: Use version 3.1.0 of vendored `plist`.
---
Library/Homebrew/cask/lib/hbc.rb | 2 +-
Library/Homebrew/vendor/plist.rb | 234 ---------------------------------
Library/Homebrew/vendor/plist/plist.rb | 4 +-
3 files changed, 3 insertions(+), 237 deletions(-)
delete mode 100644 Library/Homebrew/vendor/plist.rb
mode change 100644 => 100755 Library/Homebrew/vendor/plist/plist.rb
(limited to 'Library')
diff --git a/Library/Homebrew/cask/lib/hbc.rb b/Library/Homebrew/cask/lib/hbc.rb
index a9a23f997..29fad59af 100644
--- a/Library/Homebrew/cask/lib/hbc.rb
+++ b/Library/Homebrew/cask/lib/hbc.rb
@@ -36,7 +36,7 @@ require "hbc/utils"
require "hbc/verify"
require "hbc/version"
-require "vendor/plist"
+require "vendor/plist/plist"
module Hbc
include Hbc::Locations
diff --git a/Library/Homebrew/vendor/plist.rb b/Library/Homebrew/vendor/plist.rb
deleted file mode 100644
index 9e469a069..000000000
--- a/Library/Homebrew/vendor/plist.rb
+++ /dev/null
@@ -1,234 +0,0 @@
-#
-# = plist
-#
-# Copyright 2006-2010 Ben Bleything and Patrick May
-# Distributed under the MIT License
-#
-
-# Plist parses macOS xml property list files into ruby data structures.
-#
-# === Load a plist file
-# This is the main point of the library:
-#
-# r = Plist::parse_xml( filename_or_xml )
-module Plist
-# Note that I don't use these two elements much:
-#
-# + Date elements are returned as DateTime objects.
-# + Data elements are implemented as Tempfiles
-#
-# Plist::parse_xml will blow up if it encounters a Date element.
-# If you encounter such an error, or if you have a Date element which
-# can't be parsed into a Time object, please send your plist file to
-# plist@hexane.org so that I can implement the proper support.
- def Plist::parse_xml( filename_or_xml )
- listener = Listener.new
- #parser = REXML::Parsers::StreamParser.new(File.new(filename), listener)
- parser = StreamParser.new(filename_or_xml, listener)
- parser.parse
- listener.result
- end
-
- class Listener
- #include REXML::StreamListener
-
- attr_accessor :result, :open
-
- def initialize
- @result = nil
- @open = Array.new
- end
-
-
- def tag_start(name, attributes)
- @open.push PTag::mappings[name].new
- end
-
- def text( contents )
- @open.last.text = contents if @open.last
- end
-
- def tag_end(name)
- last = @open.pop
- if @open.empty?
- @result = last.to_ruby
- else
- @open.last.children.push last
- end
- end
- end
-
- class StreamParser
- def initialize( plist_data_or_file, listener )
- if plist_data_or_file.respond_to? :read
- @xml = plist_data_or_file.read
- elsif File.exists? plist_data_or_file
- @xml = File.read( plist_data_or_file )
- else
- @xml = plist_data_or_file
- end
-
- trim_to_xml_start!
-
- @listener = listener
- end
-
- def trim_to_xml_start!
- _, xml_tag, rest = @xml.partition(/^<\?xml/)
- @xml = [xml_tag, rest].join
- end
-
- TEXT = /([^<]+)/
- XMLDECL_PATTERN = /<\?xml\s+(.*?)\?>*/um
- DOCTYPE_PATTERN = /\s*)/um
- COMMENT_START = /\A/um
-
-
- def parse
- plist_tags = PTag::mappings.keys.join('|')
- start_tag = /<(#{plist_tags})([^>]*)>/i
- end_tag = /<\/(#{plist_tags})[^>]*>/i
-
- require 'strscan'
-
- @scanner = StringScanner.new( @xml )
- until @scanner.eos?
- if @scanner.scan(COMMENT_START)
- @scanner.scan(COMMENT_END)
- elsif @scanner.scan(XMLDECL_PATTERN)
- elsif @scanner.scan(DOCTYPE_PATTERN)
- elsif @scanner.scan(start_tag)
- @listener.tag_start(@scanner[1], nil)
- if (@scanner[2] =~ /\/$/)
- @listener.tag_end(@scanner[1])
- end
- elsif @scanner.scan(TEXT)
- @listener.text(@scanner[1])
- elsif @scanner.scan(end_tag)
- @listener.tag_end(@scanner[1])
- else
- raise ParseError.new("Unimplemented element #{@xml}")
- end
- end
- end
- end
-
- class PTag
- @@mappings = { }
- def PTag::mappings
- @@mappings
- end
-
- def PTag::inherited( sub_class )
- key = sub_class.to_s.downcase
- key.gsub!(/^plist::/, '' )
- key.gsub!(/^p/, '') unless key == "plist"
-
- @@mappings[key] = sub_class
- end
-
- attr_accessor :text, :children
- def initialize
- @children = Array.new
- end
-
- def to_ruby
- raise ParseError.new("Unimplemented: " + self.class.to_s + "#to_ruby on #{self.inspect}")
- end
- end
-
- class PList < PTag
- def to_ruby
- children.first.to_ruby if children.first
- end
- end
-
- class PDict < PTag
- def to_ruby
- dict = Hash.new
- key = nil
-
- children.each do |c|
- if key.nil?
- key = c.to_ruby
- else
- dict[key] = c.to_ruby
- key = nil
- end
- end
-
- dict
- end
- end
-
- require 'cgi'
- class PKey < PTag
- def to_ruby
- CGI::unescapeHTML(text || '')
- end
- end
-
- class PString < PTag
- def to_ruby
- CGI::unescapeHTML(text || '')
- end
- end
-
- class PArray < PTag
- def to_ruby
- children.collect do |c|
- c.to_ruby
- end
- end
- end
-
- class PInteger < PTag
- def to_ruby
- text.to_i
- end
- end
-
- class PTrue < PTag
- def to_ruby
- true
- end
- end
-
- class PFalse < PTag
- def to_ruby
- false
- end
- end
-
- class PReal < PTag
- def to_ruby
- text.to_f
- end
- end
-
- require 'date'
- class PDate < PTag
- def to_ruby
- DateTime.parse(text)
- end
- end
-
- require 'base64'
- class PData < PTag
- def to_ruby
- data = Base64.decode64(text.gsub(/\s+/, ''))
-
- begin
- return Marshal.load(data)
- rescue Exception => e
- io = StringIO.new
- io.write data
- io.rewind
- return io
- end
- end
- end
-
- class ParseError < RuntimeError; end
-end
diff --git a/Library/Homebrew/vendor/plist/plist.rb b/Library/Homebrew/vendor/plist/plist.rb
old mode 100644
new mode 100755
index 71f27145f..0b828afc6
--- a/Library/Homebrew/vendor/plist/plist.rb
+++ b/Library/Homebrew/vendor/plist/plist.rb
@@ -13,8 +13,8 @@ require 'base64'
require 'cgi'
require 'stringio'
-require 'plist/generator'
-require 'plist/parser'
+require_relative 'plist/generator'
+require_relative 'plist/parser'
module Plist
VERSION = '3.1.0'
--
cgit v1.2.3
From fef96f0ba8f4e984dfc053c9d256b0a2c0000543 Mon Sep 17 00:00:00 2001
From: Markus Reiter
Date: Wed, 24 Aug 2016 00:41:50 +0200
Subject: Move part of `parser_test` to `system_command_result_spec`.
---
.../cask/spec/cask/system_command_result_spec.rb | 49 ++++++++
Library/Homebrew/cask/test/plist/parser_test.rb | 131 +++++++--------------
2 files changed, 94 insertions(+), 86 deletions(-)
create mode 100644 Library/Homebrew/cask/spec/cask/system_command_result_spec.rb
(limited to 'Library')
diff --git a/Library/Homebrew/cask/spec/cask/system_command_result_spec.rb b/Library/Homebrew/cask/spec/cask/system_command_result_spec.rb
new file mode 100644
index 000000000..7eb4fb722
--- /dev/null
+++ b/Library/Homebrew/cask/spec/cask/system_command_result_spec.rb
@@ -0,0 +1,49 @@
+require "spec_helper"
+
+describe Hbc::SystemCommand::Result do
+ describe "::_parse_plist" do
+ let(:command) { Hbc::SystemCommand.new("/usr/bin/true", {}) }
+ let(:hdiutil_output) {
+ <<-EOS.undent
+ Hello there! I am in no way XML am I?!?!
+
+ That's a little silly... you were expexting XML here!
+
+ What is a parser to do?
+
+ Hopefully explode!
+
+
+
+
+
+ system-entities
+
+
+ content-hint
+ Apple_HFS
+ dev-entry
+ /dev/disk3s2
+ mount-point
+ /private/tmp/dmg.BhfS2g
+ potentially-mountable
+
+ unmapped-content-hint
+ Apple_HFS
+ volume-kind
+ hfs
+
+
+
+
+ EOS
+ }
+
+ it "ignores garbage output before xml starts" do
+ parsed = described_class._parse_plist(command, hdiutil_output)
+
+ expect(parsed.keys).to eq(["system-entities"])
+ expect(parsed["system-entities"].length).to eq(1)
+ end
+ end
+end
diff --git a/Library/Homebrew/cask/test/plist/parser_test.rb b/Library/Homebrew/cask/test/plist/parser_test.rb
index a73d1f7f5..173541a72 100644
--- a/Library/Homebrew/cask/test/plist/parser_test.rb
+++ b/Library/Homebrew/cask/test/plist/parser_test.rb
@@ -2,51 +2,51 @@ require "test_helper"
describe Plist do
it "parses some hdiutil output okay" do
- hdiutil_output = <<-HDIUTILOUTPUT
-
-
-
-
- system-entities
-
-
- content-hint
- Apple_partition_map
- dev-entry
- /dev/disk3s1
- potentially-mountable
-
- unmapped-content-hint
- Apple_partition_map
-
-
- content-hint
- Apple_partition_scheme
- dev-entry
- /dev/disk3
- potentially-mountable
-
- unmapped-content-hint
- Apple_partition_scheme
-
-
- content-hint
- Apple_HFS
- dev-entry
- /dev/disk3s2
- mount-point
- /private/tmp/dmg.BhfS2g
- potentially-mountable
-
- unmapped-content-hint
- Apple_HFS
- volume-kind
- hfs
-
-
-
-
- HDIUTILOUTPUT
+ hdiutil_output = <<-EOS.undent
+
+
+
+
+ system-entities
+
+
+ content-hint
+ Apple_partition_map
+ dev-entry
+ /dev/disk3s1
+ potentially-mountable
+
+ unmapped-content-hint
+ Apple_partition_map
+
+
+ content-hint
+ Apple_partition_scheme
+ dev-entry
+ /dev/disk3
+ potentially-mountable
+
+ unmapped-content-hint
+ Apple_partition_scheme
+
+
+ content-hint
+ Apple_HFS
+ dev-entry
+ /dev/disk3s2
+ mount-point
+ /private/tmp/dmg.BhfS2g
+ potentially-mountable
+
+ unmapped-content-hint
+ Apple_HFS
+ volume-kind
+ hfs
+
+
+
+
+ EOS
parsed = Plist.parse_xml(hdiutil_output)
@@ -59,47 +59,6 @@ describe Plist do
]
end
- it "can ignore garbage output before xml starts" do
- hdiutil_output = <<-HDIUTILOUTPUT
-Hello there! I am in no way XML am I?!?!
-
- That's a little silly... you were expexting XML here!
-
-What is a parser to do?
-
-Hopefully explode!
-
-
-
-
-
- system-entities
-
-
- content-hint
- Apple_HFS
- dev-entry
- /dev/disk3s2
- mount-point
- /private/tmp/dmg.BhfS2g
- potentially-mountable
-
- unmapped-content-hint
- Apple_HFS
- volume-kind
- hfs
-
-
-
-
- HDIUTILOUTPUT
-
- parsed = Plist.parse_xml(hdiutil_output)
-
- parsed.keys.must_equal ["system-entities"]
- parsed["system-entities"].length.must_equal 1
- end
-
it "does not choke on empty input" do
Plist.parse_xml("").must_equal {}
end
--
cgit v1.2.3