œ_#ÁÕ§TE NAŒ“KeÉ:”(åŽÖJÞùY’‚ñùž7; «]Û ý`8g“¯B© jdÖÖ¸ðzœ¸¦4Ç3Kó^(ÍÖ¼ Õ€pvìwšõB4df$Èü^0˜…åÌC$#2FŽÑ§±¦ÛZ/÷š&m£ñzÒÖ ’.Î]!Î;ƒ(Õ–¢d/—#Kª+tZyuÏB>NÛÖ†(¸ŒSà'³„Y˜´-_•¦¼´˜OlNK§¶ÒàŠˆTHµƒeTPå·fïM’…þuÏÍüp6دªE£åü‡ZØ'CKF#â«;‹eyO Qp„†l"ö1èíÙP ÏŒúl! BÝ2ñª•_VÁÉ÷3eu`–F¸ìI--ö<¿žë¯4õ캿¢)34Å{wMÉ2ÆÖFŸ¥`e9Ú¶¸P‡.”FÔï rY ‚²ÈTB,{ÛœéJ}«àQ4¹0Rû4D‚B§S‘ dO•v¾„™Sן¯3FeŸ™«+ÓâwH dÕÛÌì·P4ë&¥#rÜÉ Ù¦ê†ý·xòqk¯2,¹§™E\ék‚×Sá”ÚºÙ⺷ö£6…à ʾ qSá³Å|;àû}4Ÿ($â¹VY~óÍ!èÜÒŒËX½Ù1j‚VíÍŸš³+œ]«½g{_{/vµ½\¢¶vÉWKÿ:ñám½ ¥ S²x‘t ŽšÝÙÿÀÇ^ný PK IW™k‚½÷ á _rels/.relsUT dìd dìd dìd’ÏNÃ0‡ï{ŠÈ÷ÕÝ@¡¥» ¤Ý*`%îÑ&QâÁöö‚J£ì°cœŸ¿|¶²ÙÆA½rL½wVE Šñ¶w†çúay * 9Kƒw¬áÈ ¶ÕbóÄIîI]’Ê—4t"á1™ŽGJ…ìòMããH’±Å@æ…ZÆuYÞ`üÍ€jÂT;«!îì T}|Û7MoøÞ›ýÈNN<|v–í2ÄÜ¥ÏèšbË¢Ázó˜Ë )„"£OÏ7ú{ZYÈ’yÞç#1'tuÉM?6o>Z´_å9›ëKÚ˜}?þ³žÏÌ·N>fµx PK IWª½e ¢ U € word/document.xmlUT dìdPK IWþË3” z €J¢ word/settings.xmlUT dìdPK IWC‡{š' ƒ €¤ docProps/custom.xmlUT dìdPK IW츱=Œ €‡¥ [Content_Types].xmlUT dìdPK IWV%ë±" €U§ docProps/app.xmlUT dìdPK IW€RŒ 3 €¶¨ docProps/core.xmlUT dìdPK IWkòDn ô €ª word/_rels/document.xml.relsUT dìdPK IW;$î €Î« word/fontTable.xmlUT dìdPK IW+åäz] ÷. €ý¬ word/numbering.xmlUT dìdPK IW¤2×r- ¿ €›° word/styles.xmlUT dìdPK IWMFÒ ø €´ word/header1.xmlUT dìdPK IWF— T e €· word/media/image1.jpegUT dìdPK IW!Yéáå €°Ë word/media/image2.pngUT dìdPK IW°Àºë ú €ÙÌ word/media/image3.pngUT dìdPK IW$“†ª L €Î word/footer1.xmlUT dìdPK IWzaGôM €ñÑ word/footer2.xmlUT dìdPK IW–µâº P €}Õ word/theme/theme1.xmlUT dìdPK IW™k‚½÷ á €{Û _rels/.relsUT PK ! bîh^ [Content_Types].xml ¢( ¬”ËNÃ0E÷HüCä-Jܲ@5í‚Ç*Q>Àēƪc[žiiÿž‰ûB¡j7±ÏÜ{2ñÍh²nm¶‚ˆÆ»R‹ÈÀU^7/ÅÇì%¿’rZYï @1__f› ˜q·ÃR4DáAJ¬h>€ãÚÇV߯¹ªZ¨9ÈÛÁàNVÞ8Ê©ÓãÑÔji){^óã-I‹"{Üv^¥P!XS)bR¹rú—K¾s(¸3Õ`cÞ0†½ÝÎß»¾7M4²©ŠôªZÆk+¿|\|z¿(Ž‹ôPúº6h_-[ž@!‚ÒØ Pk‹´2nÏ}Ä?£LËð Ýû%áÄßdºždN"m,à¥ÇžDO97*‚~§Èɸ8ÀOíc|n¦Ñ äEøÿöéºóÀBÉÀ!$}‡íàÈé;{ìÐå[ƒîñ–é2þ ÿÿ PK ! µU0#ô L _rels/.rels ¢( ¬’MOÃ0†ïHü‡È÷ÕÝBKwAH»!T~€Iܵ£$Ý¿'TƒG½~üÊÛÝ<êÈ!öâ4¬‹;#¶w†—úqu *&r–Fq¬áÄvÕõÕö™GJy(v½*«¸¨¡KÉß#FÓñD±Ï.W ¥†=™ZÆMYÞbø®ÕBS톰·7 ê“Ï›×–¦é ?ˆ9LìÒ™ÈsbgÙ®|Èl!õùUSh9i°bžr:"y_dlÀóD›¿ý|-NœÈR"4ø2ÏGÇ% õZ´4ñËyÄ7 ëÈðÉ‚‹¨Þ ÿÿ PK ! Q48wÛ — xl/workbook.xml¤UÙnâ0}iþ!cñ‡ *–¢AšVU×$dC¬&vÆv UÕŸë@XÊK§/¹p|Žï¹N÷b“¥Ö •Š ÞC¸î"‹òHÄŒ¯zèá~b·‘¥4á1I§=ôJºèÿüÑ] ù¼âÙ ®z(Ñ:GE ͈ª‹œrˆ,…̈†©\9*—”Ä*¡Tg©ã¹nàd„q´Eåg0ÄrÉ":Q‘Q®· ’¦D}•°\UhYô¸ŒÈç"·#‘å ±`)Ó¯%(²²(œ®¸d‘‚ì nZ w v¡ñª• t¶TÆ")”Xê:@;[Ògú±ë`|²›ó=ø’ïHúÂL÷¬dðEVÁ+8€a÷Ûh¬Uz%„Íû"ZsÏÍCýî’¥ôqk]‹äù5ÉL¦Rd¥Dé˘i÷P ¦bM/|dÉ",…¨çãFNoçiûéë>aêiçsó#ðÄ ÕTr¢éHp ÜIú®ÝJìQ"ÀÜÖ-ý[0I¡¦ÀZ Z…d¡nˆN¬B¦=4 g %PDF-1.4 %âãÏÓ 3 0 obj << /Linearized 1 /L 422775 ÿØÿà JFIF ÿÛ C ÿÛ C ÿÀ X" ÿÄ ÿÄ H !1A"Qaq2‘¡#±ÁBRÑ3Cbrá$S‚¢²ð4ñ%6DTc’ÂsÿÄ ÿÄ = !1AQ"aq‘Á2R¡±BÑð#3br’²4á$‚¢ÂñÿÚ ? áHBßÝ`„! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! !@B„ „! ! stream
$VERBOSE = true
require 'minitest/autorun'
require 'fileutils'
require File.expand_path("#{File.dirname(__FILE__)}/../lib/netrc")
require "rbconfig"
class TestNetrc < Minitest::Test
def setup
Dir.glob('data/*.netrc').each{|f| File.chmod(0600, f)}
File.chmod(0644, "data/permissive.netrc")
end
def teardown
Dir.glob('data/*.netrc').each{|f| File.chmod(0644, f)}
end
def test_parse_empty
pre, items = Netrc.parse(Netrc.lex([]))
assert_equal("", pre)
assert_equal([], items)
end
def test_parse_file
pre, items = Netrc.parse(Netrc.lex(IO.readlines("data/sample.netrc")))
assert_equal("# this is my netrc\n", pre)
exp = [["machine ",
"m",
"\n login ",
"l",
" # this is my username\n password ",
"p",
"\n"]]
assert_equal(exp, items)
end
def test_login_file
pre, items = Netrc.parse(Netrc.lex(IO.readlines("data/login.netrc")))
assert_equal("# this is my login netrc\n", pre)
exp = [["machine ",
"m",
"\n login ",
"l",
" # this is my username\n"]]
assert_equal(exp, items)
end
def test_password_file
pre, items = Netrc.parse(Netrc.lex(IO.readlines("data/password.netrc")))
assert_equal("# this is my password netrc\n", pre)
exp = [["machine ",
"m",
"\n password ",
"p",
" # this is my password\n"]]
assert_equal(exp, items)
end
def test_missing_file
n = Netrc.read("data/nonexistent.netrc")
assert_equal(0, n.length)
end
def test_permission_error
original_windows = Netrc::WINDOWS
Netrc.send(:remove_const, :WINDOWS)
Netrc.const_set(:WINDOWS, false)
Netrc.read("data/permissive.netrc")
assert false, "Should raise an error if permissions are wrong on a non-windows system."
rescue Netrc::Error
assert true, ""
ensure
Netrc.send(:remove_const, :WINDOWS)
Netrc.const_set(:WINDOWS, original_windows)
end
def test_allow_permissive_netrc_file_option
Netrc.configure do |config|
config[:allow_permissive_netrc_file] = true
end
original_windows = Netrc::WINDOWS
Netrc.send(:remove_const, :WINDOWS)
Netrc.const_set(:WINDOWS, false)
Netrc.read("data/permissive.netrc")
assert true, ""
rescue Netrc::Error
assert false, "Should not raise an error if allow_permissive_netrc_file option is set to true"
ensure
Netrc.send(:remove_const, :WINDOWS)
Netrc.const_set(:WINDOWS, original_windows)
Netrc.configure do |config|
config[:allow_permissive_netrc_file] = false
end
end
def test_permission_error_windows
original_windows = Netrc::WINDOWS
Netrc.send(:remove_const, :WINDOWS)
Netrc.const_set(:WINDOWS, true)
Netrc.read("data/permissive.netrc")
rescue Netrc::Error
assert false, "Should not raise an error if permissions are wrong on a non-windows system."
ensure
Netrc.send(:remove_const, :WINDOWS)
Netrc.const_set(:WINDOWS, original_windows)
end
def test_round_trip
n = Netrc.read("data/sample.netrc")
assert_equal(IO.read("data/sample.netrc"), n.unparse)
end
def test_set
n = Netrc.read("data/sample.netrc")
n["m"] = "a", "b"
exp = "# this is my netrc\n"+
"machine m\n"+
" login a # this is my username\n"+
" password b\n"
assert_equal(exp, n.unparse)
end
def test_set_get
n = Netrc.read("data/sample.netrc")
n["m"] = "a", "b"
assert_equal(["a", "b"], n["m"].to_a)
end
def test_add
n = Netrc.read("data/sample.netrc")
n.new_item_prefix = "# added\n"
n["x"] = "a", "b"
exp = "# this is my netrc\n"+
"machine m\n"+
" login l # this is my username\n"+
" password p\n"+
"# added\n"+
"machine x\n"+
" login a\n"+
" password b\n"
assert_equal(exp, n.unparse)
end
def test_add_newlineless
n = Netrc.read("data/newlineless.netrc")
n.new_item_prefix = "# added\n"
n["x"] = "a", "b"
exp = "# this is my netrc\n"+
"machine m\n"+
" login l # this is my username\n"+
" password p\n"+
"# added\n"+
"machine x\n"+
" login a\n"+
" password b\n"
assert_equal(exp, n.unparse)
end
def test_add_get
n = Netrc.read("data/sample.netrc")
n.new_item_prefix = "# added\n"
n["x"] = "a", "b"
assert_equal(["a", "b"], n["x"].to_a)
end
def test_get_missing
n = Netrc.read("data/sample.netrc")
assert_equal(nil, n["x"])
end
def test_save
n = Netrc.read("data/sample.netrc")
n.save
assert_equal(File.read("data/sample.netrc"), n.unparse)
end
def test_save_create
FileUtils.rm_f("/tmp/created.netrc")
n = Netrc.read("/tmp/created.netrc")
n.save
unless Netrc::WINDOWS
assert_equal(0600, File.stat("/tmp/created.netrc").mode & 0777)
end
end
def test_encrypted_roundtrip
if `gpg --list-keys 2> /dev/null` != ""
FileUtils.rm_f("/tmp/test.netrc.gpg")
n = Netrc.read("/tmp/test.netrc.gpg")
n["m"] = "a", "b"
n.save
assert_equal(0600, File.stat("/tmp/test.netrc.gpg").mode & 0777)
netrc = Netrc.read("/tmp/test.netrc.gpg")["m"]
assert_equal("a", netrc.login)
assert_equal("b", netrc.password)
end
end
def test_missing_environment
nil_home = nil
ENV["HOME"], nil_home = nil_home, ENV["HOME"]
assert_equal File.join(Dir.pwd, '.netrc'), Netrc.default_path
ensure
ENV["HOME"], nil_home = nil_home, ENV["HOME"]
end
def test_netrc_environment_variable
ENV["NETRC"] = File.join(Dir.pwd, 'data')
assert_equal File.join(Dir.pwd, 'data', '.netrc'), Netrc.default_path
ensure
ENV.delete("NETRC")
end
def test_read_entry
entry = Netrc.read("data/sample.netrc")['m']
assert_equal 'l', entry.login
assert_equal 'p', entry.password
# hash-style
assert_equal 'l', entry[:login]
assert_equal 'p', entry[:password]
end
def test_write_entry
n = Netrc.read("data/sample.netrc")
entry = n['m']
entry.login = 'new_login'
entry.password = 'new_password'
n['m'] = entry
assert_equal(['new_login', 'new_password'], n['m'].to_a)
end
def test_entry_splat
e = Netrc::Entry.new("user", "pass")
user, pass = *e
assert_equal("user", user)
assert_equal("pass", pass)
end
def test_entry_implicit_splat
e = Netrc::Entry.new("user", "pass")
user, pass = e
assert_equal("user", user)
assert_equal("pass", pass)
end
def test_with_default
netrc = Netrc.read('data/sample_with_default.netrc')
assert_equal(['l', 'p'], netrc['m'].to_a)
assert_equal(['default_login', 'default_password'], netrc['unknown'].to_a)
end
def test_multi_without_default
netrc = Netrc.read('data/sample_multi.netrc')
assert_equal(['lm', 'pm'], netrc['m'].to_a)
assert_equal(['ln', 'pn'], netrc['n'].to_a)
assert_equal([], netrc['other'].to_a)
end
def test_multi_with_default
netrc = Netrc.read('data/sample_multi_with_default.netrc')
assert_equal(['lm', 'pm'], netrc['m'].to_a)
assert_equal(['ln', 'pn'], netrc['n'].to_a)
assert_equal(['ld', 'pd'], netrc['other'].to_a)
end
def test_default_only
netrc = Netrc.read('data/default_only.netrc')
assert_equal(['ld', 'pd'], netrc['m'].to_a)
assert_equal(['ld', 'pd'], netrc['other'].to_a)
end
end