public void When_reading_an_invalid_file_it_will_return_null()
 {
     var reader =
         new DefinitionCacheReader()
             .ReadUsing((file) => "invalid content.");
     Assert.That(reader.Read("/file"), Is.Null);
 }
 public void Can_read_definition_cache_file()
 {
     var reader =
         new DefinitionCacheReader()
             .ReadUsing((file) => fileContent());
     var cache = reader.Read("/file");
     Assert.That(cache.Definitions.Length, Is.EqualTo(1));
     Assert.That(cache.Definitions[0].Type, Is.EqualTo(DefinitionCacheItemType.Language));
     Assert.That(cache.Definitions[0].Location, Is.EqualTo("/my/script"));
     Assert.That(cache.Definitions[0].Updated, Is.EqualTo(new DateTime(2013,1,1,2,3,1)));
     Assert.That(cache.Definitions[0].Required, Is.True);
     Assert.That(cache.Definitions[0].Name, Is.EqualTo("mycmd"));
     Assert.That(cache.Definitions[0].Description, Is.EqualTo("My command does my stuff."));
     Assert.That(cache.Definitions[0].Parameters.Length, Is.EqualTo(1));
     Assert.That(cache.Definitions[0].Parameters[0].Type, Is.EqualTo(DefinitionCacheItemType.Language));
     Assert.That(cache.Definitions[0].Parameters[0].Location, Is.EqualTo("/my/script"));
     Assert.That(cache.Definitions[0].Parameters[0].Updated, Is.EqualTo(new DateTime(2013,1,1,2,3,1)));
     Assert.That(cache.Definitions[0].Parameters[0].Required, Is.True);
     Assert.That(cache.Definitions[0].Parameters[0].Name, Is.EqualTo("FILE"));
     Assert.That(cache.Definitions[0].Parameters[0].Description, Is.EqualTo("another param"));
     Assert.That(cache.Definitions[0].Parameters[0].Parameters.Length, Is.EqualTo(1));
     Assert.That(cache.Definitions[0].Parameters[0].Parameters[0].Type, Is.EqualTo(DefinitionCacheItemType.Language));
     Assert.That(cache.Definitions[0].Parameters[0].Parameters[0].Location, Is.EqualTo("/my/script"));
     Assert.That(cache.Definitions[0].Parameters[0].Parameters[0].Updated, Is.EqualTo(new DateTime(2013,1,1,2,3,1)));
     Assert.That(cache.Definitions[0].Parameters[0].Parameters[0].Required, Is.False);
     Assert.That(cache.Definitions[0].Parameters[0].Parameters[0].Name, Is.EqualTo("optional"));
     Assert.That(cache.Definitions[0].Parameters[0].Parameters[0].Description, Is.EqualTo("This one is optional"));
     Assert.That(cache.Definitions[0].Parameters[0].Parameters[0].Parameters.Length, Is.EqualTo(0));
 }