<?xml version="1.0" encoding="utf-8"?>
<!--

 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
 distributed with this work for additional information
 regarding copyright ownership.  The ASF licenses this file
 to you under the Apache License, Version 2.0 (the
 "License"); you may not use this file except in compliance
 with the License.  You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing,
 software distributed under the License is distributed on an
 "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.

-->
<Project Sdk="Microsoft.NET.Sdk">

  <Import Project="$(SolutionDir)build/NuGet.props" />

  <PropertyGroup>
    <TargetFrameworks>netstandard2.1;netstandard2.0;</TargetFrameworks>
    <TargetFrameworks Condition="$([MSBuild]::IsOsPlatform('Windows'))">$(TargetFrameworks);net451</TargetFrameworks>

    <AssemblyTitle>Lucene.Net.TestFramework</AssemblyTitle>
    <RootNamespace>Lucene.Net</RootNamespace>
    <Description>Framework for testing third-party code that uses the Lucene.Net API using NUnit.</Description>
    <PackageTags>$(PackageTags);testframework;test;framework;nunit</PackageTags>
    <DocumentationFile>bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml</DocumentationFile>
    
    
    <NoWarn>$(NoWarn);1591;1573</NoWarn>
    <NoWarn Label="Collection initialization can be simplified">$(NoWarn);IDE0028</NoWarn>

    <DefineConstants>$(DefineConstants);TESTFRAMEWORK_NUNIT</DefineConstants>
  </PropertyGroup>

  <ItemGroup>
    <Compile Include="..\Lucene.Net.TestFramework.NUnit\Support\TestFramework\Assert.cs" Link="Support\TestFramework\Assert.cs" />
  </ItemGroup>
  
  <ItemGroup>
    <None Remove="Util\europarl.lines.txt.gz" />
    <EmbeddedResource Include="Util\europarl.lines.txt.gz" />
    <None Include="*.txt" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\Lucene.Net.Analysis.Common\Lucene.Net.Analysis.Common.csproj" />
    <ProjectReference Include="..\Lucene.Net.Codecs\Lucene.Net.Codecs.csproj" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="J2N" Version="$(J2NPackageVersion)" />
    <PackageReference Include="NUnit" Version="$(NUnitPackageVersion)" />
  </ItemGroup>

  <ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
    <PackageReference Include="Microsoft.Extensions.Configuration" Version="$(MicrosoftExtensionsConfigurationPackageVersion)" />
    <PackageReference Include="Microsoft.Extensions.Configuration.CommandLine" Version="$(MicrosoftExtensionsConfigurationCommandLinePackageVersion)" />
    <PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="$(MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion)" />
    <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="$(MicrosoftExtensionsConfigurationJsonPackageVersion)" />
    <PackageReference Include="Microsoft.Extensions.Configuration.Xml" Version="$(MicrosoftExtensionsConfigurationXmlPackageVersion)" />
  </ItemGroup>

  <ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.1'">
    <PackageReference Include="Microsoft.Extensions.Configuration" Version="$(MicrosoftExtensionsConfigurationPackageVersion)" />
    <PackageReference Include="Microsoft.Extensions.Configuration.CommandLine" Version="$(MicrosoftExtensionsConfigurationCommandLinePackageVersion)" />
    <PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="$(MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion)" />
    <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="$(MicrosoftExtensionsConfigurationJsonPackageVersion)" />
    <PackageReference Include="Microsoft.Extensions.Configuration.Xml" Version="$(MicrosoftExtensionsConfigurationXmlPackageVersion)" />
    <PackageReference Include="System.Security.Cryptography.Xml" Version="$(SystemSecurityCryptographyXmlPackageVersion)" />
  </ItemGroup>
  
  <ItemGroup Condition=" '$(TargetFramework)' == 'net451' ">
    <PackageReference Include="Microsoft.Extensions.Configuration" Version="$(MicrosoftExtensionsConfigurationPackageVersion_NET4_5_1)" />
    <PackageReference Include="Microsoft.Extensions.Configuration.CommandLine" Version="$(MicrosoftExtensionsConfigurationCommandLinePackageVersion_NET4_5_1)" />
    <PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="$(MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion_NET4_5_1)" />
    <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="$(MicrosoftExtensionsConfigurationJsonPackageVersion_NET4_5_1)" />
    <PackageReference Include="Microsoft.Extensions.Configuration.Xml" Version="$(MicrosoftExtensionsConfigurationXmlPackageVersion_NET4_5_1)" />
    <PackageReference Include="Newtonsoft.Json" Version="$(NewtonsoftJsonPackageVersion)" />
  </ItemGroup>

  <ItemGroup Condition=" '$(TargetFramework)' == 'net451' ">
    <Reference Include="System.IO.Compression" />
    <Reference Include="System.Numerics" />
    <Reference Include="System.ServiceModel" />
  </ItemGroup>
  
  <ItemGroup>
    <!--  Note that some of the APIs we use to test Lucene.Net are internal because they are only meant to
          make porting tests from Java easier. This means that every Lucene.Net test project requires
          InternalsVisibleTo, now and in the future to keep these APIs from public view. -->
    
    <InternalsVisibleTo Include="Lucene.Net.Tests._A-D" />
    <InternalsVisibleTo Include="Lucene.Net.Tests._E-I" />
    <InternalsVisibleTo Include="Lucene.Net.Tests._I-J" />
    <InternalsVisibleTo Include="Lucene.Net.Tests._J-S" />
    <InternalsVisibleTo Include="Lucene.Net.Tests._T-Z" />
    
    <InternalsVisibleTo Include="Lucene.Net.Tests.Analysis.Common" />
    <InternalsVisibleTo Include="Lucene.Net.Tests.Analysis.Kuromoji" />
    <InternalsVisibleTo Include="Lucene.Net.Tests.Analysis.Morfologik" />
    <InternalsVisibleTo Include="Lucene.Net.Tests.Analysis.OpenNLP" />
    <InternalsVisibleTo Include="Lucene.Net.Tests.Analysis.Phonetic" />
    <InternalsVisibleTo Include="Lucene.Net.Tests.Analysis.SmartCn" />
    <InternalsVisibleTo Include="Lucene.Net.Tests.Analysis.Stempel" />
    
    <InternalsVisibleTo Include="Lucene.Net.Tests.Benchmark" />
    <InternalsVisibleTo Include="Lucene.Net.Tests.Classification" />
    <InternalsVisibleTo Include="Lucene.Net.Tests.Cli" />
    <InternalsVisibleTo Include="Lucene.Net.Tests.Codecs" />
    <InternalsVisibleTo Include="Lucene.Net.Tests.Demo" />
    <InternalsVisibleTo Include="Lucene.Net.Tests.Expressions" />
    <InternalsVisibleTo Include="Lucene.Net.Tests.Facet" />
    <InternalsVisibleTo Include="Lucene.Net.Tests.Grouping" />
    <InternalsVisibleTo Include="Lucene.Net.Tests.Highlighter" />
    <InternalsVisibleTo Include="Lucene.Net.Tests.Join" />
    <InternalsVisibleTo Include="Lucene.Net.Tests.ICU" />
    <InternalsVisibleTo Include="Lucene.Net.Tests.Memory" />
    <InternalsVisibleTo Include="Lucene.Net.Tests.Misc" />
    <InternalsVisibleTo Include="Lucene.Net.Tests.Queries" />
    <InternalsVisibleTo Include="Lucene.Net.Tests.QueryParser" />
    <InternalsVisibleTo Include="Lucene.Net.Tests.Replicator" />
    <InternalsVisibleTo Include="Lucene.Net.Tests.Sandbox" />
    <InternalsVisibleTo Include="Lucene.Net.Tests.Spatial" />
    <InternalsVisibleTo Include="Lucene.Net.Tests.Suggest" />
    <InternalsVisibleTo Include="Lucene.Net.Tests.TestFramework" />
    <InternalsVisibleTo Include="Lucene.Net.Tests.TestFramework.DependencyInjection" />
  </ItemGroup>

</Project>