kali 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,43 @@
1
+ require "test_helper"
2
+
3
+ class CalendarPropertiesTest < MiniTest::Unit::TestCase
4
+ def test_prodid
5
+ prop = Kali::Property::ProductIdentifier.new("-//ABC Corporation//NONSGML My Product//EN")
6
+ assert_equal "PRODID:-//ABC Corporation//NONSGML My Product//EN", prop.to_ics
7
+
8
+ default = Kali::Property::ProductIdentifier.new
9
+ assert_equal "PRODID:Kali/#{Kali::VERSION}", default.to_ics
10
+ end
11
+
12
+ def test_version
13
+ assert_raises ArgumentError do
14
+ Kali::Property::Version.new("2.5").to_ics
15
+ end
16
+
17
+ prop = Kali::Property::Version.new("2.0")
18
+ assert_equal "VERSION:2.0", prop.to_ics
19
+
20
+ default = Kali::Property::Version.new
21
+ assert_equal "VERSION:2.0", default.to_ics
22
+ end
23
+
24
+ def test_calscale
25
+ assert_raises ArgumentError do
26
+ Kali::Property::CalendarScale.new("JULIAN").to_ics
27
+ end
28
+
29
+ prop = Kali::Property::CalendarScale.new("GREGORIAN")
30
+ assert_equal "CALSCALE:GREGORIAN", prop.to_ics
31
+
32
+ default = Kali::Property::CalendarScale.new
33
+ assert_equal "CALSCALE:GREGORIAN", default.to_ics
34
+ end
35
+
36
+ def test_method
37
+ prop = Kali::Property::Method.new("REQUEST")
38
+ assert_equal "METHOD:REQUEST", prop.to_ics
39
+
40
+ default = Kali::Property::Method.new
41
+ assert_raises(ArgumentError) { default.to_ics }
42
+ end
43
+ end
@@ -0,0 +1,45 @@
1
+ require "test_helper"
2
+
3
+ class CalendarPropertiesTest < MiniTest::Unit::TestCase
4
+ def test_prodid
5
+ prop = Kali::Property::ProductIdentifier.new("-//ABC Corporation//NONSGML My Product//EN")
6
+ assert_equal "PRODID:-//ABC Corporation//NONSGML My Product//EN", prop.to_ics
7
+
8
+ default = Kali::Property::ProductIdentifier.new
9
+ assert_equal "PRODID:Kali/#{Kali::VERSION}", default.to_ics
10
+ end
11
+
12
+ def test_version
13
+ assert_raises ArgumentError do
14
+ prop = Kali::Property::Version.new("2.5")
15
+ assert_equal "VERSION:2.5", prop.to_ics
16
+ end
17
+
18
+ prop = Kali::Property::Version.new("2.0")
19
+ assert_equal "VERSION:2.0", prop.to_ics
20
+
21
+ default = Kali::Property::Version.new
22
+ assert_equal "VERSION:2.0", default.to_ics
23
+ end
24
+
25
+ def test_calscale
26
+ assert_raises ArgumentError do
27
+ prop = Kali::Property::CalendarScale.new("JULIAN")
28
+ assert_equal "CALSCALE:JULIAN", prop.to_ics
29
+ end
30
+
31
+ prop = Kali::Property::CalendarScale.new("GREGORIAN")
32
+ assert_equal "CALSCALE:GREGORIAN", prop.to_ics
33
+
34
+ default = Kali::Property::CalendarScale.new
35
+ assert_equal "CALSCALE:GREGORIAN", default.to_ics
36
+ end
37
+
38
+ def test_method
39
+ prop = Kali::Property::Method.new("REQUEST")
40
+ assert_equal "METHOD:REQUEST", prop.to_ics
41
+
42
+ default = Kali::Property::Method.new
43
+ assert_raises(ArgumentError) { default.to_ics }
44
+ end
45
+ end
@@ -0,0 +1,31 @@
1
+ require "test_helper"
2
+
3
+ class ComponentPropertiesTest < MiniTest::Unit::TestCase
4
+ def test_uid
5
+ prop = Kali::Property::UniqueIdentifier.new("event-1")
6
+ assert_equal "UID:event-1", prop.to_ics
7
+ end
8
+
9
+ def test_sequence
10
+ prop = Kali::Property::SequenceNumber.new(1)
11
+ assert_equal "SEQUENCE:1", prop.to_ics
12
+
13
+ default = Kali::Property::SequenceNumber.new
14
+ assert_equal "SEQUENCE:0", default.to_ics
15
+
16
+ assert_raises ArgumentError do
17
+ prop = Kali::Property::SequenceNumber.new(-1)
18
+ prop.to_ics
19
+ end
20
+ end
21
+
22
+ def test_description
23
+ prop = Kali::Property::Description.new("Some, long, description")
24
+ assert_equal "DESCRIPTION:Some\\, long\\, description", prop.to_ics
25
+ end
26
+
27
+ def test_geo
28
+ prop = Kali::Property::GeographicPosition.new([-54.00, -34.00])
29
+ assert_equal "GEO:-54.0;-34.0", prop.to_ics
30
+ end
31
+ end
@@ -0,0 +1,2 @@
1
+ require "minitest/autorun"
2
+ require "kali"
@@ -0,0 +1,120 @@
1
+ require "test_helper"
2
+
3
+ class TypeTest < MiniTest::Unit::TestCase
4
+ def test_text
5
+ type = Kali::Type::Text.new
6
+ assert_equal "plain", type.encode("plain")
7
+ assert_equal "escaped\\, characters", type.encode("escaped, characters")
8
+ assert_equal "escaped\\ncharacters", type.encode("escaped\ncharacters")
9
+ assert_equal "escaped\\;characters", type.encode("escaped;characters")
10
+ assert_idempotent type, "idempotent;idempotent,idempotent\nidempotent"
11
+
12
+ type = Kali::Type::Text.new(/[aeiou]/)
13
+ assert_equal "a", type.encode("a")
14
+ assert_equal "a", type.decode("a")
15
+ assert_raises(ArgumentError) { type.encode("b") }
16
+ assert_raises(ArgumentError) { type.decode("b") }
17
+ end
18
+
19
+ def test_integer
20
+ type = Kali::Type::Integer.new
21
+ assert_equal "0", type.encode(0)
22
+ assert_equal "1", type.encode(1.3)
23
+ assert_raises(ArgumentError) { type.encode("nope") }
24
+ assert_idempotent type, 1
25
+
26
+ type = Kali::Type::Integer.new(0..9)
27
+ assert_equal "3", type.encode(3)
28
+ assert_equal 5, type.decode("5")
29
+ assert_raises(ArgumentError) { type.encode(15) }
30
+ assert_raises(ArgumentError) { type.decode("10") }
31
+ end
32
+
33
+ def test_float
34
+ type = Kali::Type::Float.new
35
+ assert_equal "1.3", type.encode(1.3)
36
+ assert_equal "0.0", type.encode(0)
37
+ assert_raises(ArgumentError) { type.encode("nope") }
38
+ assert_idempotent type, 1.5
39
+
40
+ type = Kali::Type::Float.new(->(i) { i.between?(5.5, 10.0) })
41
+ assert_equal "8.0", type.encode(8.0)
42
+ assert_equal 9.2, type.decode("9.2")
43
+ assert_raises(ArgumentError) { type.encode(5.0) }
44
+ assert_raises(ArgumentError) { type.decode("10.1") }
45
+ end
46
+
47
+ def test_geo
48
+ type = Kali::Type::Geo.new
49
+ assert_equal "10.0;-3.0", type.encode([10.0, -3.0])
50
+ assert_equal [-90.0, 180.0], type.decode("-90.000000;180.000000")
51
+ assert_idempotent type, [-15.0001, -18.3456]
52
+ end
53
+
54
+ def test_list
55
+ type = Kali::Type::List.new(Kali::Type::Text.new)
56
+ assert_equal "a,b,c,d,e", type.encode(["a", "b", "c", "d", "e"])
57
+ assert_equal ["x", "y", "z"], type.decode("x,y,z")
58
+ assert_equal "test,with\\, one comma,with\\, two\\, commas",
59
+ type.encode(["test", "with, one comma", "with, two, commas"])
60
+ assert_idempotent type, ["test", "with, one comma", "with, two, commas"]
61
+
62
+ type = Kali::Type::List.new(Kali::Type::Integer.new(0..9))
63
+ assert_equal "1,2,3", type.encode([1, 2, 3])
64
+ assert_equal [5, 6, 7], type.decode("5,6,7")
65
+ assert_raises(ArgumentError) { type.encode([1, 2, 30]) }
66
+ assert_raises(ArgumentError) { type.decode("10,5,1") }
67
+ end
68
+
69
+ def test_duration
70
+ type = Kali::Type::Duration.new
71
+ assert_equal("-PT15M", type.encode({ negative: true, minute: 15 }))
72
+ assert_equal({ minute: 15, negative: true }, type.decode("-PT15M"))
73
+ assert_equal("P3DT2H15M", type.encode({ day: 3, hour: 2, minute: 15 }))
74
+ assert_equal({ minute: 0, hour: 3, week: 1 }, type.decode("P1WT3H0M"))
75
+ assert_idempotent type, { week: 1, hour: 4, day: 2, minute: 5 }
76
+ end
77
+
78
+ def test_cal_address
79
+ type = Kali::Type::CalAddress.new
80
+ assert_equal "mailto:john@example.org", type.encode(URI("mailto:john@example.org"))
81
+ assert_equal URI("mailto:jane@example.org"), type.decode("mailto:jane@example.org")
82
+ assert_raises(ArgumentError) { type.encode(URI("https://example.org")) }
83
+ assert_raises(ArgumentError) { type.decode("https://example.org") }
84
+ assert_idempotent type, URI("mailto:jane@example.org")
85
+ end
86
+
87
+ def test_time
88
+ type = Kali::Type::Time.new
89
+ assert_equal "103000", type.encode(Time.parse("10:30"))
90
+ assert_equal Time.parse("10:45:30"), type.decode("104530")
91
+
92
+ assert_equal "103000Z", type.encode(Time.parse("10:30 UTC"))
93
+ assert_equal Time.parse("10:45:30 UTC"), type.decode("104530Z")
94
+
95
+ assert_idempotent type, Time.parse("13:10:05")
96
+ end
97
+
98
+ def test_date
99
+ type = Kali::Type::Date.new
100
+ assert_equal "20130731", type.encode(Date.parse("2013-07-31"))
101
+ assert_equal Date.parse("2012-02-29"), type.decode("20120229")
102
+
103
+ assert_idempotent type, Date.parse("2013-04-30")
104
+ end
105
+
106
+ def test_date_time
107
+ type = Kali::Type::DateTime.new
108
+ assert_equal "20130731T103000", type.encode(DateTime.parse("2013-07-31 10:30:00 +02:00"))
109
+ assert_equal DateTime.parse("1985-03-27 20:23:15"), type.decode("19850327T202315")
110
+
111
+ assert_equal "20130731T103000Z", type.encode(DateTime.parse("2013-07-31 10:30:00 UTC"))
112
+ assert_equal DateTime.parse("1985-03-27 20:23:15 UTC"), type.decode("19850327T202315Z")
113
+
114
+ assert_idempotent type, DateTime.parse("2000-01-01 00:00:00")
115
+ end
116
+
117
+ def assert_idempotent(type, test_value)
118
+ assert_equal test_value, type.decode(type.encode(test_value))
119
+ end
120
+ end
@@ -0,0 +1,42 @@
1
+ require "test_helper"
2
+
3
+ class Kali::Utils::TextTest < MiniTest::Unit::TestCase
4
+ def test_fold_lines_shorter_than_75_chars
5
+ line = "a" * 60
6
+ folded = Kali::Utils::Text.fold_line(line)
7
+ assert_equal line, folded
8
+ end
9
+
10
+ def test_fold_lines_exactly_75_chars_long
11
+ line = "a" * 75
12
+ folded = Kali::Utils::Text.fold_line(line)
13
+ assert_equal line, folded
14
+ end
15
+
16
+ def test_fold_line_into_two_line_string
17
+ line = "a" * 120
18
+ folded = Kali::Utils::Text.fold_line(line)
19
+ expected = "#{"a" * 75}\r\n #{"a" * 45}"
20
+ assert_equal expected, folded
21
+ end
22
+
23
+ def test_fold_line_into_three_line_string
24
+ line = "a" * 200
25
+ folded = Kali::Utils::Text.fold_line(line)
26
+ expected = "#{"a" * 75}\r\n #{"a" * 74}\r\n #{"a" * 51}"
27
+ assert_equal expected, folded
28
+ end
29
+
30
+ def test_unfold_long_line
31
+ lines = "#{"a" * 75}\r\n #{"a" * 74}\r\n #{"a" * 51}"
32
+ actual = Kali::Utils::Text.unfold_line(lines)
33
+ expected = "a" * 200
34
+ assert_equal expected, actual
35
+ end
36
+
37
+ def test_fold_unfold_is_idempotent
38
+ expected = "a" * 200
39
+ actual = Kali::Utils::Text.unfold_line(Kali::Utils::Text.fold_line(expected))
40
+ assert_equal expected, actual
41
+ end
42
+ end
metadata ADDED
@@ -0,0 +1,83 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: kali
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Nicolas Sanguinetti
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-07-19 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: Extensible implementation of RFC5545. Also known as 'iCalendar'
15
+ email:
16
+ - hi@nicolassanguinetti.info
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - README.md
22
+ - examples/calendar.rb
23
+ - lib/kali.rb
24
+ - lib/kali/component.rb
25
+ - lib/kali/component/calendar.rb
26
+ - lib/kali/component/event.rb
27
+ - lib/kali/key_value_pair.rb
28
+ - lib/kali/parameter.rb
29
+ - lib/kali/parameters.rb
30
+ - lib/kali/properties.rb
31
+ - lib/kali/property.rb
32
+ - lib/kali/type.rb
33
+ - lib/kali/type/boolean.rb
34
+ - lib/kali/type/cal_address.rb
35
+ - lib/kali/type/date.rb
36
+ - lib/kali/type/date_time.rb
37
+ - lib/kali/type/duration.rb
38
+ - lib/kali/type/float.rb
39
+ - lib/kali/type/geo.rb
40
+ - lib/kali/type/integer.rb
41
+ - lib/kali/type/list.rb
42
+ - lib/kali/type/quoted.rb
43
+ - lib/kali/type/text.rb
44
+ - lib/kali/type/time.rb
45
+ - lib/kali/type/uri.rb
46
+ - lib/kali/typed_list.rb
47
+ - lib/kali/utils.rb
48
+ - lib/kali/utils/named.rb
49
+ - lib/kali/utils/text.rb
50
+ - lib/kali/version.rb
51
+ - test/component/calendar_test.rb
52
+ - test/component/event_test.rb
53
+ - test/property/calendar_properties_test.rb
54
+ - test/property/calendar_property_test.rb
55
+ - test/property/component_properties_test.rb
56
+ - test/test_helper.rb
57
+ - test/type_test.rb
58
+ - test/utils/text_test.rb
59
+ homepage: https://github.com/foca/kali
60
+ licenses: []
61
+ post_install_message:
62
+ rdoc_options: []
63
+ require_paths:
64
+ - lib
65
+ required_ruby_version: !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ! '>='
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ required_rubygems_version: !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ requirements: []
78
+ rubyforge_project:
79
+ rubygems_version: 1.8.23
80
+ signing_key:
81
+ specification_version: 3
82
+ summary: Implementation of the iCalendar standard
83
+ test_files: []