namespace TestRunner.Test open TestRunner open NUnit.Framework open FsUnitTyped [] module TestFilter = let docExamples = [ "(Name~MyClass) | (Name~MyClass2)", ParsedFilter.Or ( ParsedFilter.Contains (ParsedFilter.Name, ParsedFilter.String "MyClass"), ParsedFilter.Contains (ParsedFilter.Name, ParsedFilter.String "MyClass2") ) "xyz", ParsedFilter.Contains (ParsedFilter.FullyQualifiedName, ParsedFilter.String "xyz") "FullyQualifiedName~xyz", ParsedFilter.Contains (ParsedFilter.FullyQualifiedName, ParsedFilter.String "xyz") "FullyQualifiedName!~IntegrationTests", ParsedFilter.Not ( ParsedFilter.Contains (ParsedFilter.FullyQualifiedName, ParsedFilter.String "IntegrationTests") ) "FullyQualifiedName=MyNamespace.MyTestsClass.MyTestMethod", ParsedFilter.Equal ( ParsedFilter.FullyQualifiedName, ParsedFilter.String "MyNamespace.MyTestsClass.MyTestMethod" ) "Name~Method", ParsedFilter.Contains (ParsedFilter.Name, ParsedFilter.String "Method") "FullyQualifiedName!=MSTestNamespace.UnitTest1.TestMethod1", ParsedFilter.Not ( ParsedFilter.Equal ( ParsedFilter.FullyQualifiedName, ParsedFilter.String "MSTestNamespace.UnitTest1.TestMethod1" ) ) "TestCategory=CategoryA", ParsedFilter.Equal (ParsedFilter.TestCategory, ParsedFilter.String "CategoryA") "FullyQualifiedName~UnitTest1|TestCategory=CategoryA", ParsedFilter.Or ( ParsedFilter.Contains (ParsedFilter.FullyQualifiedName, ParsedFilter.String "UnitTest1"), ParsedFilter.Equal (ParsedFilter.TestCategory, ParsedFilter.String "CategoryA") ) "FullyQualifiedName~UnitTest1&TestCategory=CategoryA", ParsedFilter.And ( ParsedFilter.Contains (ParsedFilter.FullyQualifiedName, ParsedFilter.String "UnitTest1"), ParsedFilter.Equal (ParsedFilter.TestCategory, ParsedFilter.String "CategoryA") ) "(FullyQualifiedName~UnitTest1&TestCategory=CategoryA)|TestCategory=1", ParsedFilter.Or ( ParsedFilter.And ( ParsedFilter.Contains (ParsedFilter.FullyQualifiedName, ParsedFilter.String "UnitTest1"), ParsedFilter.Equal (ParsedFilter.TestCategory, ParsedFilter.String "CategoryA") ), ParsedFilter.Equal (ParsedFilter.TestCategory, ParsedFilter.String "1") ) "Name ~\"'hello" world^&foo|bar!><\"", ParsedFilter.Contains (ParsedFilter.Name, ParsedFilter.String """'hello" world^&foo|bar!><""") ] |> List.map TestCaseData // sigh, NUnit doesn't want to run internal tests [] let ``Doc examples`` (example : string, expected : obj) = let expected = expected |> unbox ParsedFilter.parse example |> shouldEqual expected let docExamplesRefined = [ "(Name~MyClass) | (Name~MyClass2)", Filter.Or (Filter.Name (Match.Contains "MyClass"), Filter.Name (Match.Contains "MyClass2")) "xyz", Filter.FullyQualifiedName (Match.Contains "xyz") "FullyQualifiedName~xyz", Filter.FullyQualifiedName (Match.Contains "xyz") "FullyQualifiedName!~IntegrationTests", Filter.Not (Filter.FullyQualifiedName (Match.Contains "IntegrationTests")) "FullyQualifiedName=MyNamespace.MyTestsClass.MyTestMethod", Filter.FullyQualifiedName ( Match.Exact "MyNamespace.MyTestsClass.MyTestMethod" ) // This example has been modified: it's in quotes and XML-escaped. "FullyQualifiedName=\"MyNamespace.MyTestsClass<ParameterType1%2CParameterType2>.MyTestMethod\"", Filter.FullyQualifiedName ( Match.Exact "MyNamespace.MyTestsClass.MyTestMethod" ) "Name~Method", Filter.Name (Match.Contains "Method") "FullyQualifiedName!=MSTestNamespace.UnitTest1.TestMethod1", Filter.Not (Filter.FullyQualifiedName (Match.Exact "MSTestNamespace.UnitTest1.TestMethod1")) "TestCategory=CategoryA", Filter.TestCategory (Match.Exact "CategoryA") "FullyQualifiedName~UnitTest1|TestCategory=CategoryA", Filter.Or ( Filter.FullyQualifiedName (Match.Contains "UnitTest1"), Filter.TestCategory (Match.Exact "CategoryA") ) "FullyQualifiedName~UnitTest1&TestCategory=CategoryA", Filter.And ( Filter.FullyQualifiedName (Match.Contains "UnitTest1"), Filter.TestCategory (Match.Exact "CategoryA") ) "(FullyQualifiedName~UnitTest1&TestCategory=CategoryA)|TestCategory=1", Filter.Or ( Filter.And ( Filter.FullyQualifiedName (Match.Contains "UnitTest1"), Filter.TestCategory (Match.Exact "CategoryA") ), Filter.TestCategory (Match.Exact "1") ) ] |> List.map TestCaseData [] let ``Doc examples, refined`` (example : string, expected : Filter) = Filter.parse example |> shouldEqual expected let xmlExamples = [ "Name ~\"'hello" world^&foo|bar!><\"", Filter.Name (Match.Contains """'hello" world^&foo|bar!><""") ] |> List.map TestCaseData [] let ``XML examples`` (example : string, expected : Filter) = Filter.parse example |> shouldEqual expected