public void ShouldBeDisabledIfNotDefined()
		{
			var toggle = new ToggleChecker(new InMemoryProvider());

			toggle.IsEnabled("non existing")
				.Should().Be.False();
		}
		public void ShouldBeEnabled()
		{
			var content = new[] { "someflag=true" };
			var toggleChecker = new ToggleChecker(new FileProvider(new FileReaderHardCoded(content)));
			toggleChecker.IsEnabled("someflag2")
				.Should().Be.False();
		} 
		public void ShouldFindUntrimmedSpecification()
		{
			var content = new[] { "someflag=         true		  " };
			var toggleChecker = new ToggleChecker(new FileProvider(new FileReaderHardCoded(content)));
			toggleChecker.IsEnabled("someflag")
				.Should().Be.True();
		}
		public void ShouldFindFlagWithWrongCasing()
		{
			var content = new[] { "SOMEfLAg=true" };
			var toggleChecker = new ToggleChecker(new FileProvider(new FileReaderHardCoded(content)));
			toggleChecker.IsEnabled("someflag")
				.Should().Be.True();
		}
		public void ShouldFindSpecificationWithWrongCasing()
		{
			var content = new[] { "someflag=TrUE" };
			var toggleChecker = new ToggleChecker(new FileProvider(new FileReaderHardCoded(content)));
			toggleChecker.IsEnabled("someflag")
				.Should().Be.True();
		}
		public void ShouldBeEnabled()
		{
			var content = new[] {"someflag=true"};
			tempPath = Path.GetTempFileName();
			File.WriteAllLines(tempPath, content);
			var toggleChecker = new ToggleChecker(new FileProvider(new FileReader(tempPath)));
			toggleChecker.IsEnabled("someflag")
				.Should().Be.True();
		}
		public void ShouldContainValidSpecification()
		{
			var content = new[] { "someflag=maybe" };
			var toggleChecker = new ToggleChecker(new FileProvider(new FileReaderHardCoded(content)));
			Assert.Throws<IncorrectTextFileException>(() =>
				toggleChecker.IsEnabled("someflag")
					.Should().Be.False()
				).ToString()
				.Should().Contain(string.Format(FileProvider.MustHaveValidSpecification, "maybe", 1));
		}
		public void ShouldNotContainMoreThanOneEqualSign()
		{
			var content = new[] { "someflag=true=true" };
			var toggleChecker = new ToggleChecker(new FileProvider(new FileReaderHardCoded(content)));
			Assert.Throws<IncorrectTextFileException>(() =>
				toggleChecker.IsEnabled("someflag")
					.Should().Be.False()
				).ToString()
				.Should().Contain(string.Format(FileProvider.MustOnlyContainOneEqualSign, 1));
		}
		public void ShouldBeEnabled()
		{
			const string flag = "someFlag";

			var toggle = new ToggleChecker(new InMemoryProvider(
				new Feature(flag, new TrueSpecification())
			));

			toggle.IsEnabled(flag)
				.Should().Be.True();
		}
		public void ShouldBeAbleToWriteRemarks()
		{
			var content = new[]
			{
				"#this should not throw",
				"someflag=true",
				" # and neither should this"
			};
			var toggleChecker = new ToggleChecker(new FileProvider(new FileReaderHardCoded(content)));
			toggleChecker.IsEnabled("someflag")
				.Should().Be.True();
		}
		public void ShouldBeDisableIfAnySpecificationReturnFalse()
		{
			const string flag = "someFlag";

			var feature = new Feature(flag, new FalseSpecification());
			feature.AddSpecification(new TrueSpecification());

			var toggle = new ToggleChecker(new InMemoryProvider(feature));

			toggle.IsEnabled(flag)
				.Should().Be.False();
		}
		public void ShouldAllowBlankLines()
		{
			var content = new[]
			{
				"				 ",
				"someflag=true",
				"",
				string.Empty
			};
			var toggleChecker = new ToggleChecker(new FileProvider(new FileReaderHardCoded(content)));
			toggleChecker.IsEnabled("someflag")
				.Should().Be.True();
		}
		public void ShouldSupportMultipleFeatures()
		{
			const string trueFlag = "someFlag";
			const string falseFlag = "someOtherFlag";

			var toggle = new ToggleChecker(new InMemoryProvider(
				new Feature(trueFlag, new TrueSpecification()),
				new Feature(falseFlag, new FalseSpecification())
			));

			toggle.IsEnabled(trueFlag).Should().Be.True();
			toggle.IsEnabled(falseFlag).Should().Be.False();
		}
		public void ShouldReturnAllExceptions()
		{
			var content = new[]
			{
				"missingEqual",
				"multipleEqual=false=true"
			};
			var toggleChecker = new ToggleChecker(new FileProvider(new FileReaderHardCoded(content)));
			var ex = Assert.Throws<IncorrectTextFileException>(() =>
				toggleChecker.IsEnabled("someflag")
					.Should().Be.False()
				).ToString();
			ex.Should().Contain(string.Format(FileProvider.MustContainEqualSign, 1));
			ex.Should().Contain(string.Format(FileProvider.MustOnlyContainOneEqualSign, 2));
		}