-
Notifications
You must be signed in to change notification settings - Fork 25
/
test_types.rb
executable file
·68 lines (58 loc) · 2.84 KB
/
test_types.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#! /usr/bin/ruby
# encoding: ASCII-8BIT
$: << File.dirname(__FILE__) + '/../lib'
require 'test/unit'
require 'ole/types'
class TestTypes < Test::Unit::TestCase
include Ole::Types
def test_lpwstr
assert_equal "t\000e\000s\000t\000", Lpwstr.dump('test')
str = Lpwstr.load "t\000e\000s\000t\000"
assert_equal 'test', str
assert_equal Lpwstr, str.class
end
def test_lpstr
# no null byte? probably wrong
assert_equal 'test', Lpstr.dump('test')
assert_equal 'test', Lpstr.load("test\000")
end
# in actual fact the same code path would be used for systime i expect
def test_filetime
# for saving, we can use Date, Time, or DateTime.
assert_equal "\000\000\260\3077-\307\001", FileTime.dump(Time.gm(2007, 1, 1))
time = FileTime.load "\000\000\260\3077-\307\001"
assert_equal FileTime, time.class
assert_equal '2007-01-01T00:00:00+00:00', time.to_s
# note that if we'd used Time.local, instead of gm, we'd get a different value. eg
assert_equal "\000\370\331\336\r-\307\001", FileTime.dump(DateTime.parse('2007-01-01 00:00 +0500'))
# note that it still loads up as GMT, because there's no associated time zone.
# essentially, i'm storing and loading times as GMT. maybe i should add in conversion to local time
# zone when loading
assert_equal '2006-12-31T19:00:00+00:00', FileTime.load("\000\370\331\336\r-\307\001").to_s
# test loading a bogus time
assert_equal nil, FileTime.load(0.chr * 8)
# this used to be counted as an "unlikely time", and discarded. that has been removed
assert_equal '1700-01-01T00:00:00+00:00', FileTime.load(FileTime.dump(Date.new(1700, 1, 1))).to_s
assert_equal '#<Ole::Types::FileTime 2006-12-31T19:00:00+00:00>', FileTime.load("\000\370\331\336\r-\307\001").inspect
end
def test_guid
assert_equal "\x29\x03\x02\x00\x80\x08\x07\x40\xc0\x01\x12\x34\x56\x78\x90\x46",
Clsid.dump('{00020329-0880-4007-c001-123456789046}')
assert_equal '#<Ole::Types::Clsid:{00020329-0880-4007-c001-123456789046}>',
Clsid.load("\x29\x03\x02\x00\x80\x08\x07\x40\xc0\x01\x12\x34\x56\x78\x90\x46").inspect
end
def test_variant
assert_equal "\x29\x03\x02\x00\x80\x08\x07\x40\xc0\x01\x12\x34\x56\x78\x90\x46",
Variant.dump(VT_CLSID, '{00020329-0880-4007-c001-123456789046}')
assert_equal "2006-12-31T19:00:00+00:00", Variant.load(VT_FILETIME, "\000\370\331\336\r-\307\001").to_s
data = Variant.load VT_DATE, 'blahblah'
assert_equal Data, data.class
assert_equal 'blahblah', Variant.dump(VT_DATE, 'blahblah')
end
# purely for the purposes of coverage, i'll test these old aliases:
def test_deprecated_aliases
assert_equal '#<Ole::Types::Clsid:{00020329-0880-4007-c001-123456789046}>',
Ole::Types.load_guid("\x29\x03\x02\x00\x80\x08\x07\x40\xc0\x01\x12\x34\x56\x78\x90\x46").inspect
assert_equal '2006-12-31T19:00:00+00:00', Ole::Types.load_time("\000\370\331\336\r-\307\001").to_s
end
end