confetti 0.8.3 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -27,7 +27,7 @@ module Confetti
27
27
  end
28
28
  end
29
29
 
30
- def initialize(*args)
30
+ def initialize( *args )
31
31
  @author = Author.new
32
32
  @name = Name.new
33
33
  @license = License.new
@@ -43,27 +43,43 @@ module Confetti
43
43
  @plugin_set = TypedSet.new Plugin
44
44
  @viewmodes = []
45
45
 
46
- if args.length > 0 && is_file?(args.first)
47
- populate_from_xml args.first
46
+ return if args.empty?
47
+
48
+ input = args.first
49
+
50
+ if is_file?( input ) || File.extname( input ) == ".xml"
51
+ populate_from_xml input
52
+ elsif input.kind_of?( String )
53
+ populate_from_string input
48
54
  end
49
55
  end
50
56
 
51
57
  def populate_from_xml(xml_file)
52
58
  begin
53
59
  file = File.read(xml_file)
54
- config_doc = REXML::Document.new(file).root
55
- rescue REXML::ParseException
56
- raise XMLError, "malformed config.xml"
57
60
  rescue Errno::ENOENT
58
61
  raise FileError, "file #{ xml_file } doesn't exist"
59
62
  end
63
+
64
+ populate file
65
+ end
66
+
67
+ def populate_from_string( xml_str )
68
+ populate xml_str
69
+ end
70
+
71
+ def populate( config_doc )
72
+ begin
73
+ config_doc = REXML::Document.new( config_doc ).root
74
+ rescue REXML::ParseException
75
+ raise XMLError, "malformed config.xml"
76
+ end
60
77
 
61
78
  if config_doc.nil?
62
79
  raise XMLError, "no doc parsed"
63
80
  end
64
81
 
65
- # save reference to xml doc
66
- @xml_doc = config_doc
82
+ @xml_doc = config_doc # save reference to doc
67
83
 
68
84
  @package = config_doc.attributes["id"]
69
85
  @version_string = config_doc.attributes["version"]
@@ -78,58 +94,37 @@ module Confetti
78
94
  when "http://www.w3.org/ns/widgets"
79
95
  case ele.name
80
96
  when "name"
81
- @name = Name.new(
82
- ele.text.nil? ? "" : ele.text.strip,
83
- attr["shortname"]
84
- )
97
+ @name = Name.new(ele.text.nil? ? "" : ele.text.strip,
98
+ attr["shortname"])
85
99
 
86
100
  when "author"
87
- @author = Author.new(
88
- ele.text.nil? ? "" : ele.text.strip,
89
- attr["href"],
90
- attr["email"]
91
- )
101
+ @author = Author.new(ele.text.nil? ? "" : ele.text.strip,
102
+ attr["href"], attr["email"])
92
103
 
93
104
  when "description"
94
105
  @description = ele.text.nil? ? "" : ele.text.strip
95
106
 
96
107
  when "icon"
97
- @icon_set << Image.new(
98
- attr["src"],
99
- attr["height"],
100
- attr["width"],
101
- attr
102
- )
108
+ @icon_set << Image.new(attr["src"], attr["height"], attr["width"],
109
+ attr)
103
110
  # used for the info.plist file
104
111
  @plist_icon_set << attr["src"]
105
112
 
106
113
  when "feature"
107
- @feature_set << Feature.new(
108
- attr["name"],
109
- attr["required"]
110
- )
114
+ @feature_set << Feature.new(attr["name"], attr["required"])
111
115
 
112
116
  when "preference"
113
- @preference_set << Preference.new(
114
- attr["name"],
115
- attr["value"],
116
- attr["readonly"]
117
- )
117
+ @preference_set << Preference.new(attr["name"], attr["value"],
118
+ attr["readonly"])
118
119
 
119
120
  when "license"
120
- @license = License.new(
121
- ele.text.nil? ? "" : ele.text.strip,
122
- attr["href"]
123
- )
121
+ @license = License.new(ele.text.nil? ? "" : ele.text.strip,
122
+ attr["href"])
124
123
 
125
124
  when "access"
126
125
  sub = boolean_value(attr["subdomains"], true)
127
126
  browserOnly = boolean_value(attr["browserOnly"])
128
- @access_set << Access.new(
129
- attr["origin"],
130
- sub,
131
- browserOnly
132
- )
127
+ @access_set << Access.new(attr["origin"], sub, browserOnly)
133
128
  end
134
129
 
135
130
  # PhoneGap extensions (gap:)
@@ -137,22 +132,15 @@ module Confetti
137
132
  case ele.name
138
133
  when "splash"
139
134
  next if attr["src"].nil? or attr["src"].empty?
140
- @splash_set << Image.new(
141
- attr["src"],
142
- attr["height"],
143
- attr["width"],
144
- attr
145
- )
135
+ @splash_set << Image.new(attr["src"], attr["height"], attr["width"],
136
+ attr)
146
137
 
147
138
  when "plugin"
148
139
  next if attr["name"].nil? or attr["name"].empty?
149
140
  plugin = Plugin.new(attr["name"], attr["version"])
150
141
  ele.each_element('param') do |param|
151
142
  p_attr = param.attributes
152
- plugin.param_set << Param.new(
153
- p_attr["name"],
154
- p_attr["value"]
155
- )
143
+ plugin.param_set << Param.new(p_attr["name"], p_attr["value"])
156
144
  end
157
145
  @plugin_set << plugin
158
146
  end
@@ -277,17 +265,103 @@ module Confetti
277
265
  def filtered_to_s( xpaths = [] )
278
266
  xpaths = [ xpaths ] unless xpaths.kind_of?(Array)
279
267
 
280
- @xml = @xml_doc.dup
268
+ xml = @xml_doc.dup unless @xml_doc.nil?
269
+ xml ||= to_xml
281
270
 
282
271
  xpaths.each do |path|
283
- @xml.root.elements.delete_all path
272
+ xml.root.elements.delete_all path
284
273
  end
285
274
 
286
- @xml.root.to_s
275
+ xml.root.to_s
287
276
  end
288
277
 
289
278
  def to_s
290
279
  @xml_doc.root.to_s
291
280
  end
281
+
282
+ def to_xml
283
+ doc = REXML::Document.new
284
+
285
+ widget = REXML::Element.new( "widget" )
286
+ widget.add_attributes({
287
+ "xmlns" => "http://www.w3.org/ns/widgets",
288
+ "xmlns:gap" => "http://phonegap.com/ns/1.0",
289
+ "id" => @package,
290
+ "version" => @version_string
291
+ })
292
+
293
+ if !@version_code.nil?
294
+ widget.add_attribute({ "versionCode" => @version_code })
295
+ end
296
+
297
+ name = REXML::Element.new( "name" )
298
+ name.text = @name.name
299
+ name.add_attribute({ "shortname" => @name.shortname })
300
+
301
+ author = REXML::Element.new( "author" )
302
+ author.text = @author.name
303
+ author.add_attributes({
304
+ "href" => @author.href,
305
+ "email" => @author.email
306
+ })
307
+
308
+ description = REXML::Element.new( "description" )
309
+ description.text = @description
310
+
311
+ license = REXML::Element.new( "license" )
312
+ license.text = @license.text
313
+ license.add_attribute({ "href" => @license.href })
314
+
315
+ icons = []
316
+ @icon_set.each do | icon |
317
+ ico = REXML::Element.new( "icon" )
318
+ attrs = icon.defined_attrs
319
+ ico.add_attributes attrs
320
+ icons << ico
321
+ end
322
+
323
+ splashes = []
324
+ @splash_set.each do | splash |
325
+ spl = REXML::Element.new( "gap:splash" )
326
+ attrs = splash.defined_attrs
327
+ spl.add_attributes attrs
328
+ splashes << spl
329
+ end
330
+
331
+ preferences = []
332
+ @preference_set.each do | preference |
333
+ pref = REXML::Element.new( "preference" )
334
+ pref.add_attributes({
335
+ "name" => preference.name,
336
+ "value" => preference.value,
337
+ "readonly" => preference.readonly
338
+ })
339
+ preferences << pref
340
+ end
341
+
342
+ features = []
343
+ @feature_set.each do | feature |
344
+ feat = REXML::Element.new( "feature" )
345
+ feat.add_attributes({
346
+ "name" => feature.name,
347
+ "required" => feature.required,
348
+ })
349
+ features << feat
350
+ end
351
+
352
+ widget.elements.add name
353
+ widget.elements.add author
354
+ widget.elements.add description
355
+ widget.elements.add license
356
+
357
+ icons.each { | icon | widget.elements.add icon }
358
+ splashes.each { | splash | widget.elements.add splash }
359
+ preferences.each { | pref | widget.elements.add pref }
360
+ features.each { | feat | widget.elements.add feat }
361
+
362
+ doc << REXML::XMLDecl.new
363
+ doc.elements.add widget
364
+ doc
365
+ end
292
366
  end
293
367
  end
@@ -5,13 +5,80 @@ module Confetti
5
5
  class FiletypeError < Confetti::Error ; end
6
6
 
7
7
  # classes that represent child elements
8
- Author = Class.new Struct.new(:name, :href, :email)
9
- Name = Class.new Struct.new(:name, :shortname)
10
- License = Class.new Struct.new(:text, :href)
11
- Content = Class.new Struct.new(:src, :type, :encoding)
12
- Feature = Class.new Struct.new(:name, :required)
13
- Preference = Class.new Struct.new(:name, :value, :readonly)
14
- Access = Class.new Struct.new(:origin, :subdomains, :browserOnly)
15
- Param = Class.new Struct.new(:name, :value)
8
+ class Author < Struct.new(:name, :href, :email)
9
+ def defined_attrs
10
+ {
11
+ "name" => self[ :name ],
12
+ "href" => self[ :href ],
13
+ "email" => self[ :email ]
14
+ }
15
+ end
16
+ end
17
+
18
+ class Name < Struct.new(:name, :shortname)
19
+ def defined_attrs
20
+ {
21
+ "name" => self[ :name ],
22
+ "shortname" => self[ :shortname ]
23
+ }
24
+ end
25
+ end
26
+
27
+ class License < Struct.new(:text, :href)
28
+ def defined_attrs
29
+ {
30
+ "text" => self[ :text ],
31
+ "href" => self[ :href ]
32
+ }
33
+ end
34
+ end
35
+
36
+ class Content < Struct.new(:src, :type, :encoding)
37
+ def defined_attrs
38
+ {
39
+ "src" => self[ :src ],
40
+ "type" => self[ :type ],
41
+ "encoding" => self[ :encoding ]
42
+ }
43
+ end
44
+ end
45
+
46
+ class Feature < Struct.new(:name, :required)
47
+ def defined_attrs
48
+ {
49
+ "name" => self[ :name ],
50
+ "required" => self[ :required ]
51
+ }
52
+ end
53
+ end
54
+
55
+ class Preference < Struct.new(:name, :value, :readonly)
56
+ def defined_attrs
57
+ {
58
+ "name" => self[ :name ],
59
+ "value" => self[ :value ],
60
+ "readonly" => self[ :readonly ]
61
+ }
62
+ end
63
+ end
64
+
65
+ class Access < Struct.new(:origin, :subdomains, :browserOnly)
66
+ def defined_attrs
67
+ {
68
+ "origin" => self[ :origin ],
69
+ "subdomains" => self[ :subdomains ],
70
+ "browserOnly" => self[ :browserOnly ]
71
+ }
72
+ end
73
+ end
74
+
75
+ class Param < Struct.new(:name, :value)
76
+ def defined_attrs
77
+ {
78
+ "name" => self[ :name ],
79
+ "value" => self[ :value ]
80
+ }
81
+ end
82
+ end
16
83
  end
17
84
  end
@@ -19,6 +19,19 @@ module Confetti
19
19
  @density = @extras['density']
20
20
  @state = @extras['state']
21
21
  end
22
+
23
+ def defined_attrs
24
+ {
25
+ "src" => @src,
26
+ "height" => @height,
27
+ "width" => @width,
28
+ "gap:role" => @role,
29
+ "gap:platform" => @platform,
30
+ "gap:main" => @main,
31
+ "gap:density" => @density,
32
+ "gap:state" => @state
33
+ }
34
+ end
22
35
  end
23
36
  end
24
37
  end
@@ -1,3 +1,3 @@
1
1
  module Confetti
2
- VERSION = "0.8.3"
2
+ VERSION = "0.9.0"
3
3
  end
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe Confetti::Config::Access do
4
+ before do
5
+ @access = Confetti::Config::Access.new
6
+ end
7
+
8
+ it "should define a defined_attrs method" do
9
+ access = Confetti::Config::Access.new( "google.ca", true, false )
10
+
11
+ access.defined_attrs.should == {
12
+ "origin" => "google.ca",
13
+ "subdomains" => true,
14
+ "browserOnly" => false
15
+ }
16
+ end
17
+ end
@@ -11,7 +11,10 @@ describe Confetti::Config::Author do
11
11
  end
12
12
 
13
13
  it "should have a readable and writable href field" do
14
- lambda { @author.href = "http://alunny.github.com" }.should_not raise_error
14
+ lambda {
15
+ @author.href = "http://alunny.github.com"
16
+ }.should_not raise_error
17
+
15
18
  @author.href.should == "http://alunny.github.com"
16
19
  end
17
20
 
@@ -19,4 +22,15 @@ describe Confetti::Config::Author do
19
22
  lambda { @author.email = "alunny@gmail.com" }.should_not raise_error
20
23
  @author.email.should == "alunny@gmail.com"
21
24
  end
25
+
26
+ it "should define a defined_attrs method" do
27
+ author = Confetti::Config::Author.new(
28
+ "hardeep", "127.0.0.1", "shardeep@adobe.com")
29
+
30
+ author.defined_attrs.should == {
31
+ "name" => "hardeep",
32
+ "href" => "127.0.0.1",
33
+ "email" => "shardeep@adobe.com"
34
+ }
35
+ end
22
36
  end
@@ -19,4 +19,13 @@ describe Confetti::Config::Content do
19
19
  lambda { @content.encoding = "GB2313" }.should_not raise_error
20
20
  @content.encoding.should == "GB2313"
21
21
  end
22
+
23
+ it "should define a defined_attrs method" do
24
+ content = Confetti::Config::Content.new(
25
+ "some/path", "text/html", "utf-8")
26
+
27
+ content.defined_attrs.should == {
28
+ "src" => "some/path", "type" => "text/html", "encoding" => "utf-8"
29
+ }
30
+ end
22
31
  end
@@ -30,4 +30,13 @@ describe Confetti::Config::Feature do
30
30
  }.should raise_error
31
31
  end
32
32
  end
33
+
34
+ it "should define a defined_attrs method" do
35
+ feature = Confetti::Config::Feature.new( "Geolocation", true )
36
+
37
+ feature.defined_attrs.should == {
38
+ "name" => "Geolocation",
39
+ "required" => true
40
+ }
41
+ end
33
42
  end
@@ -19,4 +19,19 @@ describe Confetti::Config::Image do
19
19
  lambda { @image.height = 50 }.should_not raise_error
20
20
  @image.height.should == 50
21
21
  end
22
+
23
+ it "should define a attribute dump method" do
24
+ img = Confetti::Config::Image.new
25
+ attrs = img.defined_attrs
26
+ attrs.should == {
27
+ "gap:main"=>nil,
28
+ "gap:platform"=>nil,
29
+ "gap:state"=>nil,
30
+ "src"=>nil,
31
+ "gap:density"=>nil,
32
+ "height"=>nil,
33
+ "gap:role"=>nil,
34
+ "width"=>nil
35
+ }
36
+ end
22
37
  end
@@ -6,12 +6,27 @@ describe Confetti::Config::License do
6
6
  end
7
7
 
8
8
  it "should have a readable and writable text field" do
9
- lambda { @license.text = "You can do WTF you want" }.should_not raise_error
9
+ lambda {
10
+ @license.text = "You can do WTF you want"
11
+ }.should_not raise_error
12
+
10
13
  @license.text.should == "You can do WTF you want"
11
14
  end
12
15
 
13
16
  it "should have a readable and writable href field" do
14
- lambda { @license.href = "http://apache.org/license" }.should_not raise_error
17
+ lambda {
18
+ @license.href = "http://apache.org/license"
19
+ }.should_not raise_error
20
+
15
21
  @license.href.should == "http://apache.org/license"
16
22
  end
23
+
24
+ it "should define a defined_attrs method" do
25
+ license = Confetti::Config::License.new(
26
+ "Some License", "Some Url")
27
+
28
+ license.defined_attrs.should == {
29
+ "text" => "Some License", "href" => "Some Url"
30
+ }
31
+ end
17
32
  end
@@ -6,7 +6,10 @@ describe Confetti::Config::Name do
6
6
  end
7
7
 
8
8
  it "should have a readable and writable name field" do
9
- lambda { @name.name = "Microsoft Windows 7 Ultimate Edition" }.should_not raise_error
9
+ lambda {
10
+ @name.name = "Microsoft Windows 7 Ultimate Edition"
11
+ }.should_not raise_error
12
+
10
13
  @name.name.should == "Microsoft Windows 7 Ultimate Edition"
11
14
  end
12
15
 
@@ -14,4 +17,12 @@ describe Confetti::Config::Name do
14
17
  lambda { @name.shortname = "Windows7" }.should_not raise_error
15
18
  @name.shortname.should == "Windows7"
16
19
  end
20
+
21
+ it "should define a defined_attrs method" do
22
+ name = Confetti::Config::Name.new( "Long Title", "Short Title" )
23
+
24
+ name.defined_attrs.should == {
25
+ "name" => "Long Title", "shortname" => "Short Title"
26
+ }
27
+ end
17
28
  end
@@ -19,4 +19,15 @@ describe Confetti::Config::Preference do
19
19
  lambda { @pref.readonly = true }.should_not raise_error
20
20
  @pref.readonly.should be_true
21
21
  end
22
+
23
+ it "should define a defined_attrs method" do
24
+ pref = Confetti::Config::Preference.new(
25
+ "Some Preference", "Some Setting", false )
26
+
27
+ pref.defined_attrs.should == {
28
+ "name" => "Some Preference",
29
+ "value" => "Some Setting",
30
+ "readonly" => false
31
+ }
32
+ end
22
33
  end
data/spec/config_spec.rb CHANGED
@@ -151,7 +151,8 @@ describe Confetti::Config do
151
151
  end
152
152
 
153
153
  it "should call #is_file? with an argument passed" do
154
- @blank_config.should_receive(:is_file?)
154
+ @blank_config.stub( :populate_from_xml )
155
+ @blank_config.should_receive( :is_file? )
155
156
  @blank_config.send :initialize, "config.xml"
156
157
  end
157
158
 
@@ -160,6 +161,18 @@ describe Confetti::Config do
160
161
  @blank_config.should_receive(:populate_from_xml).with("config.xml")
161
162
  @blank_config.send :initialize, "config.xml"
162
163
  end
164
+
165
+ it "should call #populate_from_string when a string is passed" do
166
+ @blank_config.should_receive(
167
+ :populate_from_string).with("</widget>")
168
+ @blank_config.send :initialize, "</widget>"
169
+ end
170
+
171
+ it "should throw an exception when a bad config path is passed" do
172
+ lambda{
173
+ @blank_config.send :initialize, "config.xml"
174
+ }.should raise_error Confetti::Config::FileError
175
+ end
163
176
  end
164
177
 
165
178
  describe "#populate_from_xml" do
@@ -747,7 +760,28 @@ describe Confetti::Config do
747
760
 
748
761
  it "should serialize when no filters provided" do
749
762
  @config.to_s.should match /icon/
763
+ # this should remove all instances of icons from the string
750
764
  @config.filtered_to_s("//icon").should_not match /icon/
751
765
  end
766
+
767
+ describe "#to_xml" do
768
+
769
+ it "should define a to_xml method" do
770
+ @config.should respond_to :to_xml
771
+ end
772
+
773
+ it "should render the config as valid xml" do
774
+ # if given a config object running a to_xml and feeding
775
+ # it back into a config object should produce the same contents
776
+ out = ""
777
+ @config.to_xml.write( out, 2 )
778
+ config = Confetti::Config.new out
779
+ config.author.name.should == "Andrew Lunny"
780
+ config.feature_set.length.should == 3
781
+ config.preference_set.length.should == 2
782
+ config.icon_set.length.should == 1
783
+ config.splash_set.length.should == 1
784
+ end
785
+ end
752
786
  end
753
787
  end
@@ -0,0 +1,36 @@
1
+ <?xml version='1.0'?>
2
+ <widget xmlns:gap='http://phonegap.com/ns/1.0' id='com.alunny.confetti' version='1.0.0' xmlns='http://www.w3.org/ns/widgets'>
3
+ <name>
4
+ Confetti Sample App
5
+ </name>
6
+ <author href='http://alunny.github.com' email='alunny@gmail.com'>
7
+ Andrew Lunny
8
+ </author>
9
+ <description>
10
+ This is a sample config.xml for integration testing with Confetti
11
+ </description>
12
+ <license>
13
+ The MIT License Copyright (c) 2011 Andrew Lunny Permission is hereby
14
+ granted, free of charge, to any person obtaining a copy of this software and
15
+ associated documentation files (the &quot;Software&quot;), to deal in the
16
+ Software without restriction, including without limitation the rights to
17
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell
18
+ copies of the Software, and to permit persons to whom the Software is
19
+ furnished to do so, subject to the following conditions: The above copyright
20
+ notice and this permission notice shall be included in all copies or
21
+ substantial portions of the Software. THE SOFTWARE IS PROVIDED &quot;AS
22
+ IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
23
+ NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
24
+ PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
25
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
26
+ ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
27
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28
+ </license>
29
+ <icon src='icon.png' height='150' width='200'/>
30
+ <gap:splash src='mainsplash.png' height='480' width='360'/>
31
+ <preference name='phonegap-version' value='1.3.0'/>
32
+ <preference name='universal' value='true'/>
33
+ <feature name='http://api.phonegap.com/1.0/camera' required='true'/>
34
+ <feature name='http://api.phonegap.com/1.0/notification' required='true'/>
35
+ <feature name='http://api.phonegap.com/1.0/geolocation' required='true'/>
36
+ </widget>
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 8
8
- - 3
9
- version: 0.8.3
7
+ - 9
8
+ - 0
9
+ version: 0.9.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Andrew Lunny
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2012-06-26 00:00:00 -07:00
19
+ date: 2012-07-18 00:00:00 -07:00
20
20
  default_executable:
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
@@ -98,6 +98,7 @@ files:
98
98
  - lib/confetti/templates/windows_phone7_manifest.rb
99
99
  - lib/confetti/version.rb
100
100
  - lib/typedset.rb
101
+ - spec/config/config_access_spec.rb
101
102
  - spec/config/config_author_spec.rb
102
103
  - spec/config/config_content_spec.rb
103
104
  - spec/config/config_feature_spec.rb
@@ -123,6 +124,7 @@ files:
123
124
  - spec/fixtures/config-icons.xml
124
125
  - spec/fixtures/config-long-desc.xml
125
126
  - spec/fixtures/config-plugins.xml
127
+ - spec/fixtures/config-to_xml.xml
126
128
  - spec/fixtures/config.xml
127
129
  - spec/fixtures/config_fullscreen.xml
128
130
  - spec/fixtures/config_legacy.xml
@@ -192,6 +194,7 @@ signing_key:
192
194
  specification_version: 3
193
195
  summary: Generate mobile app config files
194
196
  test_files:
197
+ - spec/config/config_access_spec.rb
195
198
  - spec/config/config_author_spec.rb
196
199
  - spec/config/config_content_spec.rb
197
200
  - spec/config/config_feature_spec.rb
@@ -217,6 +220,7 @@ test_files:
217
220
  - spec/fixtures/config-icons.xml
218
221
  - spec/fixtures/config-long-desc.xml
219
222
  - spec/fixtures/config-plugins.xml
223
+ - spec/fixtures/config-to_xml.xml
220
224
  - spec/fixtures/config.xml
221
225
  - spec/fixtures/config_fullscreen.xml
222
226
  - spec/fixtures/config_legacy.xml