// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
namespace Microsoft.DbContextPackage.Utilities
{
using System;
using System.Collections.Generic;
using System.Data.Mapping;
using System.IO;
using System.Linq;
using System.Text;
using Microsoft.DbContextPackage.Extensions;
using Microsoft.DbContextPackage.Resources;
using Xunit;
public class EdmxUtilityTests
{
[Fact]
public void GetMappingCollection_returns_mapping()
{
var edmxContents = @"
";
StorageMappingItemCollection mappingCollection;
using (var edmx = new TempFile(edmxContents))
{
mappingCollection = new EdmxUtility(edmx.FileName)
.GetMappingCollection();
}
Assert.True(mappingCollection.Contains("DatabaseEntities"));
}
[Fact]
public void GetMappingCollection_returns_mapping_for_v2_schema()
{
var edmxContents = @"
";
StorageMappingItemCollection mappingCollection;
using (var edmx = new TempFile(edmxContents))
{
mappingCollection = new EdmxUtility(edmx.FileName)
.GetMappingCollection();
}
Assert.True(mappingCollection.Contains("DatabaseEntities"));
}
[Fact]
public void GetMappingCollection_throws_on_schema_errors()
{
var edmxContents = @"
";
using (var edmx = new TempFile(edmxContents))
{
var ex = Assert.Throws(
() => new EdmxUtility(edmx.FileName).GetMappingCollection());
Assert.Equal(
Strings.EdmSchemaError(
Path.GetFileName(edmx.FileName),
"ConceptualModels"),
ex.Message);
}
}
private sealed class TempFile : IDisposable
{
private readonly string _fileName;
private bool _disposed;
public TempFile(string contents)
{
_fileName = Path.GetTempFileName();
File.WriteAllText(_fileName, contents);
}
~TempFile()
{
Dispose(false);
}
public string FileName
{
get
{
HandleDisposed();
return _fileName;
}
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
private void Dispose(bool disposing)
{
if (!_disposed)
{
if (!string.IsNullOrWhiteSpace(_fileName))
{
File.Delete(_fileName);
}
_disposed = true;
}
}
private void HandleDisposed()
{
if (_disposed)
{
throw new ObjectDisposedException(null);
}
}
}
}
}