package config

import (
	. "gopkg.in/check.v1"
)

type SectionSuite struct{}

var _ = Suite(&SectionSuite{})

func (s *SectionSuite) TestSection_Option(c *C) {
	sect := &Section{
		Options: []*Option{
			{Key: "key1", Value: "value1"},
			{Key: "key2", Value: "value2"},
			{Key: "key1", Value: "value3"},
		},
	}
	c.Assert(sect.Option("otherkey"), Equals, "")
	c.Assert(sect.Option("key2"), Equals, "value2")
	c.Assert(sect.Option("key1"), Equals, "value3")
}

func (s *SectionSuite) TestSubsection_Option(c *C) {
	sect := &Subsection{
		Options: []*Option{
			{Key: "key1", Value: "value1"},
			{Key: "key2", Value: "value2"},
			{Key: "key1", Value: "value3"},
		},
	}
	c.Assert(sect.Option("otherkey"), Equals, "")
	c.Assert(sect.Option("key2"), Equals, "value2")
	c.Assert(sect.Option("key1"), Equals, "value3")
}

func (s *SectionSuite) TestSection_RemoveOption(c *C) {
	sect := &Section{
		Options: []*Option{
			{Key: "key1", Value: "value1"},
			{Key: "key2", Value: "value2"},
			{Key: "key1", Value: "value3"},
		},
	}
	c.Assert(sect.RemoveOption("otherkey"), DeepEquals, sect)

	expected := &Section{
		Options: []*Option{
			{Key: "key2", Value: "value2"},
		},
	}
	c.Assert(sect.RemoveOption("key1"), DeepEquals, expected)
}

func (s *SectionSuite) TestSubsection_RemoveOption(c *C) {
	sect := &Subsection{
		Options: []*Option{
			{Key: "key1", Value: "value1"},
			{Key: "key2", Value: "value2"},
			{Key: "key1", Value: "value3"},
		},
	}
	c.Assert(sect.RemoveOption("otherkey"), DeepEquals, sect)

	expected := &Subsection{
		Options: []*Option{
			{Key: "key2", Value: "value2"},
		},
	}
	c.Assert(sect.RemoveOption("key1"), DeepEquals, expected)
}
