diff --git a/global.json b/global.json index 1406adc8..2e46e3b8 100644 --- a/global.json +++ b/global.json @@ -2,5 +2,8 @@ "sdk": { "version": "8.0.417", "rollForward": "latestMinor" + }, + "msbuild-sdks": { + "MSTest.Sdk": "4.0.2" } } diff --git a/samples/Test.AppWriter/Test.AppWriter.csproj b/samples/Test.AppWriter/Test.AppWriter.csproj index 776a3c2b..1a9e2f65 100644 --- a/samples/Test.AppWriter/Test.AppWriter.csproj +++ b/samples/Test.AppWriter/Test.AppWriter.csproj @@ -1,19 +1,10 @@ - - + + - Exe net8.0 enable enable - - - - False - True - - - True diff --git a/src/Directory.Build.props b/src/Directory.Build.props index ac4205b3..5c79062b 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -40,6 +40,10 @@ SHA256 + + true + + 0.1.0 dev diff --git a/src/Directory.Packages.props b/src/Directory.Packages.props index 4d7701e9..1423677f 100644 --- a/src/Directory.Packages.props +++ b/src/Directory.Packages.props @@ -1,29 +1,26 @@ - - - true - + + + true + - - - - + + + - - + - - - - - - - - - - - - + + + + + + + + + + - + diff --git a/src/PAModelTests/AppTestsTest.cs b/src/PAModelTests/AppTestsTest.cs index 523ca9a8..adf6a3b8 100644 --- a/src/PAModelTests/AppTestsTest.cs +++ b/src/PAModelTests/AppTestsTest.cs @@ -12,7 +12,7 @@ namespace PAModelTests; public class AppTestsTest { // Validates that the App can be repacked after deleting the EditorState files, when the app contains app tests which refer to screens. - [DataTestMethod] + [TestMethod] [DataRow("TestStudio_Test.msapp")] public void TestPackWhenEditorStateIsDeleted(string appName) { @@ -48,7 +48,7 @@ public void TestPackWhenEditorStateIsDeleted(string appName) } // Validates that the App can be repacked after deleting the Entropy files, when the app contains app tests which refer to screens. - [DataTestMethod] + [TestMethod] [DataRow("TestStudio_Test.msapp")] public void TestPackWhenEntropyIsDeleted(string appName) { diff --git a/src/PAModelTests/ChecksumTests.cs b/src/PAModelTests/ChecksumTests.cs index b0ec7e91..804c503f 100644 --- a/src/PAModelTests/ChecksumTests.cs +++ b/src/PAModelTests/ChecksumTests.cs @@ -11,7 +11,7 @@ namespace PAModelTests; [TestClass] public class ChecksumTests { - [DataTestMethod] + [TestMethod] [DataRow("MyWeather.msapp", "C8_ZXZwZAG3P0lmCkNAGjsIjYb503akWCyudsk8DEi2aX0=", 11, "References\\DataSources.json", "C8_2dpVudcymwNaHoHtQugF1MSpzsY1I6syuPiB0B+jTYc=")] public void TestChecksum(string filename, string expectedChecksum, int expectedFileCount, string file, string innerExpectedChecksum) { @@ -21,7 +21,7 @@ public void TestChecksum(string filename, string expectedChecksum, int expectedF var actualChecksum = ChecksumMaker.GetChecksum(root); Assert.AreEqual(expectedChecksum, actualChecksum.wholeChecksum); - Assert.AreEqual(expectedFileCount, actualChecksum.perFileChecksum.Count); + Assert.HasCount(expectedFileCount, actualChecksum.perFileChecksum); Assert.IsTrue(actualChecksum.perFileChecksum.TryGetValue(file, out var perFileChecksum)); Assert.AreEqual(innerExpectedChecksum, perFileChecksum); @@ -29,7 +29,7 @@ public void TestChecksum(string filename, string expectedChecksum, int expectedF Assert.AreEqual(ChecksumMaker.GetChecksumVersion(expectedChecksum), ChecksumMaker.Version); } - [DataTestMethod] + [TestMethod] [DataRow("a bc", "a bc")] [DataRow(" a b ", "a b")] // leading, trailing [DataRow("a\t\r\nb", "a b")] // other chars @@ -80,7 +80,7 @@ public void ChecksumsUnique() private const string C20 = "C8_2YUFpLVLEYtdFvV9iLN8F6TM+cWczemMx4m0VEIpfrg="; - [DataTestMethod] + [TestMethod] [DataRow(C1, /*lang=json*/ @"' ab\r\ncd'")] // whitespace [DataRow(C1, /*lang=json*/ @"'ab\ncd'")] // same [DataRow(C2, /*lang=json*/ @"'ab\ncd '")] // Trailing whitespace is not trimmed. diff --git a/src/PAModelTests/DataSourceTests.cs b/src/PAModelTests/DataSourceTests.cs index e22f8783..b7f7d93c 100644 --- a/src/PAModelTests/DataSourceTests.cs +++ b/src/PAModelTests/DataSourceTests.cs @@ -17,7 +17,7 @@ namespace PAModelTests; public class DataSourceTests { // Validates that the TableDefinitions are being added at the end of the DataSources.json when the entropy file is deleted. - [DataTestMethod] + [TestMethod] [DataRow("GalleryTestApp.msapp")] [DataRow("AccountPlanReviewerMaster.msapp")] public void TestTableDefinitionsAreLastEntriesWhenEntropyDeleted(string appName) @@ -66,7 +66,7 @@ public void TestTableDefinitionsAreLastEntriesWhenEntropyDeleted(string appName) { var dataSourcesFromMsapp = ToObject(entry); var last = dataSourcesFromMsapp.DataSources.LastOrDefault(); - Assert.AreEqual(last.TableDefinition != null, true); + Assert.IsNotNull(last.TableDefinition); return; } default: @@ -78,7 +78,7 @@ public void TestTableDefinitionsAreLastEntriesWhenEntropyDeleted(string appName) } } - [DataTestMethod] + [TestMethod] [DataRow("EmptyLocalDBRefsHashMismatchProperties.msapp")] public void TestNoLocalDatabaseRefsWhenLocalDatabaseReferencesPropertyWasEmptyJson(string appName) { @@ -95,10 +95,10 @@ public void TestNoLocalDatabaseRefsWhenLocalDatabaseReferencesPropertyWasEmptyJs var loadedMsApp = SourceSerializer.LoadFromSource(sourcesTempDirPath, new ErrorContainer()); Assert.IsTrue(loadedMsApp._entropy.WasLocalDatabaseReferencesEmpty.Value); Assert.IsFalse(loadedMsApp._entropy.LocalDatabaseReferencesAsEmpty); - Assert.IsTrue(loadedMsApp._dataSourceReferences.Count == 0); + Assert.IsEmpty(loadedMsApp._dataSourceReferences); } - [DataTestMethod] + [TestMethod] [DataRow("EmptyLocalDBRefsHashMismatchProperties.msapp")] public void TestConnectionInstanceIDHandling(string appName) { @@ -117,7 +117,7 @@ public void TestConnectionInstanceIDHandling(string appName) errorsCaptured.ThrowOnErrors(); } - [DataTestMethod] + [TestMethod] [DataRow("MultipleDataSourcesWithOneUnused.msapp")] public void TestUnusedDataSourcesArePreserved(string appName) { @@ -137,14 +137,14 @@ public void TestUnusedDataSourcesArePreserved(string appName) Assert.AreEqual(msApp._dataSourceReferences.First().Key, msApp._dataSourceReferences.First().Key); var actualDataSources = msApp1._dataSourceReferences.First().Value.dataSources; var expectedDataSources = msApp._dataSourceReferences.First().Value.dataSources; - Assert.AreEqual(expectedDataSources.Count, actualDataSources.Count); + Assert.HasCount(expectedDataSources.Count, actualDataSources); Assert.IsTrue(actualDataSources.ContainsKey("environment_39a902ba")); foreach (var kvp in actualDataSources) { Assert.IsTrue(expectedDataSources.ContainsKey(kvp.Key)); var expectedDataSource = expectedDataSources[kvp.Key]; var actualDataSource = kvp.Value; - Assert.AreEqual(expectedDataSource.ExtensionData.Count, actualDataSource.ExtensionData.Count); + Assert.HasCount(expectedDataSource.ExtensionData.Count, actualDataSource.ExtensionData); foreach (var kvpExtension in actualDataSource.ExtensionData) { Assert.IsTrue(expectedDataSource.ExtensionData.ContainsKey(kvpExtension.Key)); @@ -152,7 +152,7 @@ public void TestUnusedDataSourcesArePreserved(string appName) } } - [DataTestMethod] + [TestMethod] [DataRow("MultipleDataSourcesWithOneUnused.msapp")] public void TestUnusedDataSourcesAreNotPreservedWhenNotTracked(string appName) { @@ -173,7 +173,7 @@ public void TestUnusedDataSourcesAreNotPreservedWhenNotTracked(string appName) errors1.ThrowOnErrors(); var actualDataSources = msApp1._dataSourceReferences.First().Value.dataSources; - Assert.AreEqual(expectedDataSources.Count - actualDataSources.Count, 1); + Assert.AreEqual(1, expectedDataSources.Count - actualDataSources.Count); foreach (var key in expectedDataSources.Keys) { if (key == "environment_39a902ba") @@ -187,7 +187,7 @@ public void TestUnusedDataSourcesAreNotPreservedWhenNotTracked(string appName) } } - [DataTestMethod] + [TestMethod] [DataRow("MultipleDataSourcesWithOneUnused.msapp")] public void TestWhenDataSourcesAreNotPresent(string appName) { @@ -213,7 +213,7 @@ public void TestWhenDataSourcesAreNotPresent(string appName) Assert.IsNull(msApp._dataSourceReferences.First().Value.dataSources); } - [DataTestMethod] + [TestMethod] [DataRow("MultipleDataSourcesWithOneUnused.msapp")] public void TestWhenDataSourcesIsSetToEmptyDictionary(string appName) { @@ -235,10 +235,10 @@ public void TestWhenDataSourcesIsSetToEmptyDictionary(string appName) errors = msApp.SaveToSources(sources2.Dir, msAppTemp.FullPath); errors.ThrowOnErrors(); - Assert.AreEqual(msApp._dataSourceReferences.First().Value.dataSources.Count, 0); + Assert.IsEmpty(msApp._dataSourceReferences.First().Value.dataSources); } - [DataTestMethod] + [TestMethod] [DataRow("NoUnusedDataSources.msapp")] public void TestAllUsedDataSourcesArePreserved(string appName) { @@ -255,14 +255,14 @@ public void TestAllUsedDataSourcesArePreserved(string appName) var (msApp1, errors1) = CanvasDocument.LoadFromSources(sourcesDir.Dir); errors1.ThrowOnErrors(); - Assert.AreEqual(msApp._dataSourceReferences["default.cds"].dataSources.Count, msApp._dataSourceReferences["default.cds"].dataSources.Count); + Assert.HasCount(msApp._dataSourceReferences["default.cds"].dataSources.Count, msApp._dataSourceReferences["default.cds"].dataSources); foreach (var entry in msApp._dataSourceReferences["default.cds"].dataSources.Keys.OrderBy(key => key).Zip(msApp1._dataSourceReferences["default.cds"].dataSources.Keys.OrderBy(key => key))) { Assert.AreEqual(entry.First, entry.Second); } } - [DataTestMethod] + [TestMethod] [DataRow(new string[] { "FileNameOne.txt" }, ".txt")] [DataRow(new string[] { "FileNameTwo.tx /// Tests that the top parent name is set properly on the editor state file. /// - [DataTestMethod] + [TestMethod] [DataRow("AppWithLabel.msapp", "Screen1")] [DataRow("DuplicateScreen.msapp", "Screen1")] public void TestTopParentSerialization(string appName, string topParentName) @@ -57,7 +57,7 @@ public void TestTopParentSerialization(string appName, string topParentName) /// Tests that the `TopParentName` for each control is set to the correct /// value when the app is deserialized. /// - [DataTestMethod] + [TestMethod] [DataRow("AppWithLabel.msapp", "Screen1")] [DataRow("DuplicateScreen.msapp", "Screen1")] public void TestTopParentNameLoad(string appName, string topParentName) @@ -118,7 +118,7 @@ public void TestTopParentNameLoad(string appName, string topParentName) /// /// When SourceSerializer is updated past v24, this could be removed entirely. /// - [DataTestMethod] + [TestMethod] [DataRow("AppWithLabel.msapp", "Screen1")] [DataRow("DuplicateScreen.msapp", "Screen1")] public void TestTopParentNameFallback(string appName, string topParentName) diff --git a/src/PAModelTests/EntropyTests.cs b/src/PAModelTests/EntropyTests.cs index e9097ef0..28448bc7 100644 --- a/src/PAModelTests/EntropyTests.cs +++ b/src/PAModelTests/EntropyTests.cs @@ -11,7 +11,7 @@ namespace PAModelTests; [TestClass] public class EntropyTests { - [DataTestMethod] + [TestMethod] [DataRow("ComponentTest.msapp", true)] [DataRow("ComponentWithSameParam.msapp", false)] public void TestFunctionParameters(string filename, bool invariantScriptsOnInstancesExist) @@ -38,7 +38,7 @@ public void TestFunctionParameters(string filename, bool invariantScriptsOnInsta } } - [DataTestMethod] + [TestMethod] [DataRow("AnimationControlIdIsGuid.msapp")] public void TestControlIdGuidParsing(string filename) { @@ -48,11 +48,11 @@ public void TestControlIdGuidParsing(string filename) (var msapp, var errors) = CanvasDocument.LoadFromMsapp(root); errors.ThrowOnErrors(); - Assert.IsTrue(msapp._entropy.ControlUniqueGuids.Count > 0); - Assert.AreEqual(msapp._entropy.ControlUniqueIds.Count, 0); + Assert.IsNotEmpty(msapp._entropy.ControlUniqueGuids); + Assert.IsEmpty(msapp._entropy.ControlUniqueIds); } - [DataTestMethod] + [TestMethod] [DataRow("AppWithLabel.msapp")] public void TestControlIdIntParsing(string filename) { @@ -62,13 +62,13 @@ public void TestControlIdIntParsing(string filename) (var msapp, var errors) = CanvasDocument.LoadFromMsapp(root); errors.ThrowOnErrors(); - Assert.IsTrue(msapp._entropy.ControlUniqueIds.Count > 0); - Assert.AreEqual(msapp._entropy.ControlUniqueGuids.Count, 0); + Assert.IsNotEmpty(msapp._entropy.ControlUniqueIds); + Assert.IsEmpty(msapp._entropy.ControlUniqueGuids); } // Validate that the control template fields OverridaleProperties and PCFDynamicSchemaForIRRetrieval are stored in entropy while unpacking // The test app contains control instances with same template but different fields - [DataTestMethod] + [TestMethod] [DataRow("ControlInstancesWithDifferentTemplateFields.msapp")] public void TestControlInstancesWithSameTemplateDifferentFields(string appName) { @@ -78,11 +78,11 @@ public void TestControlInstancesWithSameTemplateDifferentFields(string appName) (var msapp, var errors) = CanvasDocument.LoadFromMsapp(root); errors.ThrowOnErrors(); - Assert.IsTrue(msapp._entropy.OverridablePropertiesEntry.Count > 0); - Assert.IsTrue(msapp._entropy.PCFDynamicSchemaForIRRetrievalEntry.Count > 0); + Assert.IsNotEmpty(msapp._entropy.OverridablePropertiesEntry); + Assert.IsNotEmpty(msapp._entropy.PCFDynamicSchemaForIRRetrievalEntry); } - [DataTestMethod] + [TestMethod] [DataRow("AnimationControlIdIsGuid.msapp")] public void TestGetResourcesJSONIndicesKeyNullException(string filename) { @@ -100,7 +100,7 @@ public void TestGetResourcesJSONIndicesKeyNullException(string filename) // Validate that the pcf control template is stored in entropy while unpacking // The test app contains control instances with same template but different fields - [DataTestMethod] + [TestMethod] [DataRow("PcfTemplates.msapp")] public void TestPCFControlInstancesWithSameTemplateDifferentFields(string appName) { @@ -110,10 +110,10 @@ public void TestPCFControlInstancesWithSameTemplateDifferentFields(string appNam (var msapp, var errors) = CanvasDocument.LoadFromMsapp(root); errors.ThrowOnErrors(); - Assert.IsTrue(msapp._entropy.PCFTemplateEntry.Count > 0); + Assert.IsNotEmpty(msapp._entropy.PCFTemplateEntry); } - [DataTestMethod] + [TestMethod] [DataRow("AnimationControlIdIsGuid.msapp")] public void TestAppWithNoPCFControlInstances(string appName) { @@ -123,12 +123,12 @@ public void TestAppWithNoPCFControlInstances(string appName) (var msapp, var errors) = CanvasDocument.LoadFromMsapp(root); errors.ThrowOnErrors(); - Assert.IsTrue(msapp._entropy.PCFTemplateEntry.Count == 0); + Assert.IsEmpty(msapp._entropy.PCFTemplateEntry); } // Validate that a PCF control will still resolve its template by falling back to // the template store if the control's specific template isn't in Entropy. - [DataTestMethod] + [TestMethod] [DataRow("PcfTemplates.msapp")] public void TestPCFControlWillFallBackToControlTemplate(string appName) { @@ -138,11 +138,11 @@ public void TestPCFControlWillFallBackToControlTemplate(string appName) (var msapp, var errors) = CanvasDocument.LoadFromMsapp(root); errors.ThrowOnErrors(); - Assert.IsTrue(msapp._entropy.PCFTemplateEntry.Count > 0); + Assert.IsNotEmpty(msapp._entropy.PCFTemplateEntry); // Clear out the PCF templates in entropy msapp._entropy.PCFTemplateEntry.Clear(); - Assert.IsTrue(msapp._entropy.PCFTemplateEntry.Count == 0); + Assert.IsEmpty(msapp._entropy.PCFTemplateEntry); // Repack the app and validate it matches the initial msapp using (var tempFile = new TempFile()) diff --git a/src/PAModelTests/ErrorTests.cs b/src/PAModelTests/ErrorTests.cs index f37d38e6..8a193aa4 100644 --- a/src/PAModelTests/ErrorTests.cs +++ b/src/PAModelTests/ErrorTests.cs @@ -59,7 +59,7 @@ public void BadWriteDir() string path = null; // should throw on null - Assert.ThrowsException(() => DirectoryWriter.EnsureFileDirExists(path)); + Assert.ThrowsExactly(() => DirectoryWriter.EnsureFileDirExists(path)); } [TestMethod] @@ -105,7 +105,7 @@ public void CompareChecksumImageNotReadAsJSONTest(string app1, string app2) // When there's a file content mismatch on non-JSON files, // we must throw an error and not use JSON to compare non JSON-files - var exception = Assert.ThrowsException(() => MsAppTest.Compare(pathToZip1, pathToZip2, Console.Out)); + var exception = Assert.ThrowsExactly(() => MsAppTest.Compare(pathToZip1, pathToZip2, Console.Out)); exception.Message.Should().Be("Mismatch detected in non-Json properties: Assets\\Images\\1556681b-11bd-4d72-9b17-4f884fb4b465.png"); } } diff --git a/src/PAModelTests/JsonNormalizerTests.cs b/src/PAModelTests/JsonNormalizerTests.cs index 97da636d..4f4ac7c6 100644 --- a/src/PAModelTests/JsonNormalizerTests.cs +++ b/src/PAModelTests/JsonNormalizerTests.cs @@ -21,7 +21,7 @@ public void Test() } // String escaping normalizing. \u is an escape, Multiple ways to encode the same char. - [DataTestMethod] + [TestMethod] [DataRow("\"a\\\"bc\"")] [DataRow("\"a\\u0022bc\"")] public void StringEncoding(string unescaped) diff --git a/src/PAModelTests/NameCollisionTests.cs b/src/PAModelTests/NameCollisionTests.cs index e6246eb8..e1ad300d 100644 --- a/src/PAModelTests/NameCollisionTests.cs +++ b/src/PAModelTests/NameCollisionTests.cs @@ -62,7 +62,7 @@ public void TestAssetFileRename() Assert.IsTrue(newFileNames.Contains("image_2")); } - [DataTestMethod] + [TestMethod] [DataRow("AppWithLabel.msapp")] [DataRow("DuplicateScreen.msapp")] public void TestScreenRename(string appName) @@ -111,11 +111,11 @@ public void TestScreenRename(string appName) } // There should be no expected files that were not found - Assert.AreEqual(expectedScreens.Count, 0, $"{expectedScreens.Count} screens not found in Src directory."); + Assert.IsEmpty(expectedScreens, $"{expectedScreens.Count} screens not found in Src directory."); } } - [DataTestMethod] + [TestMethod] [DataRow("AppWithLabel.msapp")] [DataRow("DuplicateScreen.msapp")] [DataRow("ComponentNameCollision.msapp")] @@ -167,7 +167,7 @@ public void TestEditorStateRename(string appName) } // There should be no expected files that were not found - Assert.AreEqual(expectedControlsWithEditorState.Count, 0, $"{expectedControlsWithEditorState.Count} editor state files not found in EditorState directory."); + Assert.IsEmpty(expectedControlsWithEditorState, $"{expectedControlsWithEditorState.Count} editor state files not found in EditorState directory."); } } @@ -205,7 +205,7 @@ public void TestAssetPathCollision() Assert.IsFalse(errorContainer.HasErrors); } - [DataTestMethod] + [TestMethod] [DataRow("CollidingFilenames.msapp")] public void TestDataSourceNameCollision(string appName) { @@ -267,6 +267,6 @@ public void TestAssetFileCollision() var errorContainer = new ErrorContainer(); doc.StabilizeAssetFilePaths(errorContainer); - Assert.AreEqual(doc._assetFiles.Count(), 2); + Assert.AreEqual(2, doc._assetFiles.Count()); } } diff --git a/src/PAModelTests/PAModelTests.csproj b/src/PAModelTests/PAModelTests.csproj index bde38195..5bb8a6b7 100644 --- a/src/PAModelTests/PAModelTests.csproj +++ b/src/PAModelTests/PAModelTests.csproj @@ -1,24 +1,22 @@ - - + + net8.0 - Exe - false - + true true - true - - - + + + + @@ -44,16 +42,6 @@ - - - - - - - PreserveNewest - - - PreserveNewest diff --git a/src/PAModelTests/ParserTests.cs b/src/PAModelTests/ParserTests.cs index 31ce042e..bb8bd943 100644 --- a/src/PAModelTests/ParserTests.cs +++ b/src/PAModelTests/ParserTests.cs @@ -8,7 +8,7 @@ namespace PAModelTests; [TestClass] public class ParserTests { - [DataTestMethod] + [TestMethod] [DataRow("Foo", true, "Foo", 3)] [DataRow("'Foo'", true, "Foo", 5)] [DataRow("'Foo Bar'", true, "Foo Bar", 9)] @@ -26,7 +26,7 @@ public void TestParseIdent(string input, bool shouldParse, string output, int ex Assert.AreEqual(expectedLength, length); } - [DataTestMethod] + [TestMethod] [DataRow("Foo As Bar", true, "Foo", "Bar", null)] [DataRow("Foo As Bar.Baz", true, "Foo", "Bar", "Baz")] [DataRow("'escaped foo' As Bar", true, "escaped foo", "Bar", null)] diff --git a/src/PAModelTests/ReadTransformTests.cs b/src/PAModelTests/ReadTransformTests.cs index ceff8c14..1f2f66a7 100644 --- a/src/PAModelTests/ReadTransformTests.cs +++ b/src/PAModelTests/ReadTransformTests.cs @@ -11,7 +11,7 @@ namespace PAModelTests; [TestClass] public class ReadTransformTests { - [DataTestMethod] + [TestMethod] [DataRow("GalleryTemplateNullChildren.msapp", false, false)] [DataRow("TestStepWithInvalidScreen.msapp", false, true)] [DataRow("GroupControlStateEmpty.msapp", false, true)] @@ -50,6 +50,6 @@ public void TestNullResource() var errorContainer = new ErrorContainer(); doc.StabilizeAssetFilePaths(errorContainer); - Assert.AreEqual(errorContainer.HasErrors, false); + Assert.IsFalse(errorContainer.HasErrors); } } diff --git a/src/PAModelTests/SmartMergeTests.cs b/src/PAModelTests/SmartMergeTests.cs index 019e315e..ca08bf7e 100644 --- a/src/PAModelTests/SmartMergeTests.cs +++ b/src/PAModelTests/SmartMergeTests.cs @@ -314,7 +314,7 @@ public void ScreenAddTest() { resultDoc._screens.TryGetValue("Screen32", out var control); Assert.AreEqual(1, control.Properties.Count(item => item.Identifier == "SomeProp")); - Assert.IsTrue(resultDoc._screenOrder.Contains("Screen32")); + Assert.Contains("Screen32", resultDoc._screenOrder); }); } diff --git a/src/PAModelTests/SourceDecoderTests.cs b/src/PAModelTests/SourceDecoderTests.cs index 4ac35f28..0164527a 100644 --- a/src/PAModelTests/SourceDecoderTests.cs +++ b/src/PAModelTests/SourceDecoderTests.cs @@ -14,7 +14,7 @@ public class SourceDecoderTests // Compare actual source output. This catches things like: // - are we removing default properties, from both Theme Json and Template xmL? // - canonical ordering and stable output - [DataTestMethod] + [TestMethod] [DataRow("MyWeather.msapp", "", "Screen1.fx.yaml", "Weather_Screen1.fx.yaml")] [DataRow("GroupControlTest.msapp", "", "Screen1.fx.yaml", "GroupControl_Test.fx.yaml")] [DataRow("GalleryTestApp.msapp", "", "Screen1.fx.yaml", "Gallery_ScreenTest.fx.yaml")] diff --git a/src/PAModelTests/TemplateParserTests.cs b/src/PAModelTests/TemplateParserTests.cs index 6471ec3d..eda920cb 100644 --- a/src/PAModelTests/TemplateParserTests.cs +++ b/src/PAModelTests/TemplateParserTests.cs @@ -28,7 +28,7 @@ public void TestGalleryNestedTemplateParse() var templateStore = new TemplateStore(); Assert.IsTrue(ControlTemplateParser.TryParseTemplate(templateStore, galleryTemplateContents, AppType.DesktopOrTablet, parsedTemplates, out var topTemplate, out var name)); - Assert.AreEqual(2, parsedTemplates.Count); + Assert.HasCount(2, parsedTemplates); Assert.AreEqual("gallery", name); Assert.AreEqual("http://microsoft.com/appmagic/gallery", topTemplate.Id); diff --git a/src/PAModelTests/TemplateStoreTests.cs b/src/PAModelTests/TemplateStoreTests.cs index b7be16db..5e32d90b 100644 --- a/src/PAModelTests/TemplateStoreTests.cs +++ b/src/PAModelTests/TemplateStoreTests.cs @@ -15,7 +15,7 @@ public class TemplateStoreTests { // Validate that the host control template hostType value is stored in entropy while unpacking // This example app has different host control instances with different template values like HostType - [DataTestMethod] + [TestMethod] [DataRow("SharepointAppWithHostControls.msapp")] public void TestHostControlInstancesWithHostType(string appName) { @@ -48,7 +48,7 @@ public void TestHostControlInstancesWithHostType(string appName) // Validate a modern control that has a dynamic template. // The template has a valid template name, but makes reference to another template. // This example app has two modern controls (combobox and dropdown) that make reference to the same template. - [DataTestMethod] + [TestMethod] [DataRow("ComboboxDropdown.msapp")] public void TestModernControlWithDynamicTemplate(string appName) { diff --git a/src/PAModelTests/UtilityTests.cs b/src/PAModelTests/UtilityTests.cs index 77bd6d31..05082d26 100644 --- a/src/PAModelTests/UtilityTests.cs +++ b/src/PAModelTests/UtilityTests.cs @@ -9,7 +9,7 @@ namespace PAModelTests; [TestClass] public class UtilityTests { - [DataTestMethod] + [TestMethod] [DataRow("\r\t!$^%/\\", "%0d%09%21%24%5e%25%2f%5c")] [DataRow("одиндваодиндваодиндваодиндваодиндваодинд", "одиндваодиндваодиндваодиндваодиндваодинд")] [DataRow("İkşzlerAçık芲偁ABC巢für नमस्ते กุ้งจิ้яЧчŠš������ - Copy (2).jpg", "İkşzlerA%e7ık芲偁ABC巢f%fcr नमस्ते กุ้งจิ้яЧчŠš������ - Copy %282%29.jpg")] @@ -19,7 +19,7 @@ public void TestEscaping(string unescaped, string escaped) Assert.AreEqual(FilePath.UnEscapeFilename(escaped), unescaped); } - [DataTestMethod] + [TestMethod] [DataRow("foo-%41", "foo-A")] [DataRow("[]_' ", "[]_' ")] // unescape only touches % character. [DataRow("İkşzlerA%e7ık芲偁ABC巢f%fcr नमस्ते กุ้งจิ้яЧчŠš������ - Copy %282%29.jpg", "İkşzlerAçık芲偁ABC巢für नमस्ते กุ้งจิ้яЧчŠš������ - Copy (2).jpg")] @@ -36,7 +36,7 @@ public void TestNotEscaped() Assert.AreEqual(FilePath.EscapeFilename(a), a); } - [DataTestMethod] + [TestMethod] [DataRow("C:\\Foo\\Bar\\file", "C:\\Foo", "Bar\\file")] [DataRow("C:\\Foo\\Bar\\file", "C:\\Foo\\", "Bar\\file")] [DataRow("C:\\Foo\\Bar.msapp", "C:\\Foo", "Bar.msapp")] @@ -74,13 +74,13 @@ public void Regression153() Assert.AreEqual(path, original); } - [DataTestMethod] + [TestMethod] [DataRow("Long*Control*Name*Truncation*Tests***", "Long%2aControl%2aName%2aTruncation%2aTests%2a_959")] [DataRow("TestReallyLoooooooooooooooooooooooooooooooooooongControlName", "TestReallyLooooooooooooooooooooooooooooooooooo_cad")] [DataRow("TestControlName", "TestControlName")] public void TestControlNameTruncation(string originalName, string expectedName) { var truncatedName = FilePath.TruncateNameIfTooLong(originalName); - Assert.AreEqual(truncatedName, expectedName); + Assert.AreEqual(expectedName, truncatedName); } } diff --git a/src/PAModelTests/WriteTransformTests.cs b/src/PAModelTests/WriteTransformTests.cs index 88c62b8c..8a72c868 100644 --- a/src/PAModelTests/WriteTransformTests.cs +++ b/src/PAModelTests/WriteTransformTests.cs @@ -12,7 +12,7 @@ namespace PAModelTests; [TestClass] public class WriteTransformTests { - [DataTestMethod] + [TestMethod] [DataRow("EmptyTestCase.msapp")] public void TestResourceNullCase(string filename) { @@ -29,7 +29,7 @@ public void TestResourceNullCase(string filename) Assert.IsFalse(errors.HasErrors); } - [DataTestMethod] + [TestMethod] [DataRow("AccountPlanReviewerMaster.msapp")] public void TestAssetFilesNullCase(string filename) { @@ -46,7 +46,7 @@ public void TestAssetFilesNullCase(string filename) Assert.IsFalse(errors.HasErrors); } - [DataTestMethod] + [TestMethod] [DataRow("AccountPlanReviewerMaster.msapp")] public void TestResourcesInResourcesJsonIsNullWhenRestoringAssetFilePaths(string filename) { @@ -62,7 +62,7 @@ public void TestResourcesInResourcesJsonIsNullWhenRestoringAssetFilePaths(string Assert.IsFalse(errors.HasErrors); } - [DataTestMethod] + [TestMethod] [DataRow("AccountPlanReviewerMaster.msapp")] public void TestNullExceptionInRestoreAssetsFilePathsIsLoggedAsAnInternalError(string filename) { @@ -81,7 +81,7 @@ public void TestNullExceptionInRestoreAssetsFilePathsIsLoggedAsAnInternalError(s Assert.IsNotNull(errors.FirstOrDefault(error => error.Code == ErrorCode.InternalError)); } - [DataTestMethod] + [TestMethod] [DataRow("AccountPlanReviewerMaster.msapp")] public void TestNullExceptionInGetMsAppFilesIsLoggedAsAnInternalError(string filename) { diff --git a/src/PAModelTests/YamlTest.cs b/src/PAModelTests/YamlTest.cs index eaf9b290..c5051618 100644 --- a/src/PAModelTests/YamlTest.cs +++ b/src/PAModelTests/YamlTest.cs @@ -39,7 +39,7 @@ public void Write1() } // These values should get automatically multiline escaped. - [DataTestMethod] + [TestMethod] [DataRow("Hi #There")] // Yaml comments are dangerous [DataRow("abc\r\ndef")] [DataRow("Patched({a : b})")] @@ -53,11 +53,11 @@ public void WriteEscapes(string value) var text = sw.ToString(); // We use a | escape. - Assert.IsTrue(text.StartsWith("Foo: |")); + Assert.StartsWith("Foo: |", text); } // Different ending newlines will have different escapes. - [DataTestMethod] + [TestMethod] [DataRow(" 1")] // leading whitespace [DataRow(" 1\n2\n3")] // leading whitespace with multiline [DataRow(" 1\r2\r3")] // leading whitespace with Mac style multiline @@ -107,7 +107,7 @@ public void NewLinesRoundtrip(string value) } - [DataTestMethod] + [TestMethod] [DataRow(true)] [DataRow(false)] public void WriteBool(bool value) @@ -155,7 +155,7 @@ private static string NormNewlines(string x) } // Error on 1st token read - [DataTestMethod] + [TestMethod] [DataRow("Foo: 12")] // missing = [DataRow("Foo: |\r\n=12")] // missing = in newline [DataRow("Foo: =x #comment")] // comments not allowed in single line. @@ -173,7 +173,7 @@ public void ExpectedError(string expr) } // Error on 2nd token read. - [DataTestMethod] + [TestMethod] [DataRow("Foo:\r\n val\r\n")] // Must have escape if there's a newline public void ExpectedError2(string expr) { @@ -458,9 +458,9 @@ public void ReadDict() using var reader = new StringReader(expectedYaml); var props = YamlConverter.Read(reader); - Assert.AreEqual(props.Count, 2); - Assert.AreEqual(props["P1"], "123"); - Assert.AreEqual(props["P2"], " \"hello\" & \"world\""); + Assert.HasCount(2, props); + Assert.AreEqual("123", props["P1"]); + Assert.AreEqual(" \"hello\" & \"world\"", props["P2"]); } @@ -471,7 +471,7 @@ public void ReadDictError() @"P1: sub1: 123"); // error, not supported objects - Assert.ThrowsException( + Assert.ThrowsExactly( () => YamlConverter.Read(reader)); } @@ -631,7 +631,7 @@ private static void AssertLexErrorMessage(YamlLexer y, string expectedErrorMessa { if (p.Kind == YamlTokenKind.Error) { - Assert.AreEqual(p.Value, expectedErrorMessage); + Assert.AreEqual(expectedErrorMessage, p.Value); return; } p = y.ReadNext(); diff --git a/src/Persistence.Tests/MsApp/MsappArchiveTests.cs b/src/Persistence.Tests/MsApp/MsappArchiveTests.cs index 4d51c5a0..37fde27d 100644 --- a/src/Persistence.Tests/MsApp/MsappArchiveTests.cs +++ b/src/Persistence.Tests/MsApp/MsappArchiveTests.cs @@ -53,8 +53,8 @@ public void GetDirectoryEntriesTests(string[] entries, string directoryName, str msappArchive.GetDirectoryEntries(directoryName, extension, true).Count().Should().Be(expectedRecursiveCount); } - [DataTestMethod] - [DynamicData(nameof(AddEntryTestsData), DynamicDataSourceType.Method)] + [TestMethod] + [DynamicData(nameof(AddEntryTestsData))] public void AddEntryTests(string[] entries, string[] expectedEntries) { // Arrange: Create new ZipArchive in memory diff --git a/src/Persistence.Tests/PaYaml/Serialization/PaYamlSerializerTests.cs b/src/Persistence.Tests/PaYaml/Serialization/PaYamlSerializerTests.cs index d62ac4ce..b64ec39e 100644 --- a/src/Persistence.Tests/PaYaml/Serialization/PaYamlSerializerTests.cs +++ b/src/Persistence.Tests/PaYaml/Serialization/PaYamlSerializerTests.cs @@ -167,7 +167,7 @@ public void DeserializeExamplePaYamlSingleFileApp() public void DeserializeDuplicateControlNamesShouldFail() { var path = @"_TestData/InvalidYaml-CI/duplicate-control-in-sequence.pa.yaml"; - var ex = Assert.ThrowsException(() => PaYamlSerializer.Deserialize>(File.ReadAllText(path))); + var ex = Assert.ThrowsExactly(() => PaYamlSerializer.Deserialize>(File.ReadAllText(path))); ex.ErrorCode.Should().Be(PersistenceErrorCode.DuplicateNameInSequence); } diff --git a/src/Persistence.Tests/Persistence.Tests.csproj b/src/Persistence.Tests/Persistence.Tests.csproj index 64edcbe9..6b4bb9f7 100644 --- a/src/Persistence.Tests/Persistence.Tests.csproj +++ b/src/Persistence.Tests/Persistence.Tests.csproj @@ -1,12 +1,9 @@ - + + net8.0 enable enable - true - Exe - false - true true true @@ -16,7 +13,7 @@ PreserveNewest - + PreserveNewest @@ -26,11 +23,7 @@ - - - - diff --git a/src/YamlValidator.Tests/AssemblyInfo.cs b/src/YamlValidator.Tests/AssemblyInfo.cs new file mode 100644 index 00000000..1fe1d92b --- /dev/null +++ b/src/YamlValidator.Tests/AssemblyInfo.cs @@ -0,0 +1,4 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +[assembly: Parallelize(Workers = 16, Scope = ExecutionScope.MethodLevel)] diff --git a/src/YamlValidator.Tests/YamlValidator.Tests.csproj b/src/YamlValidator.Tests/YamlValidator.Tests.csproj index 39f20eee..c77db480 100644 --- a/src/YamlValidator.Tests/YamlValidator.Tests.csproj +++ b/src/YamlValidator.Tests/YamlValidator.Tests.csproj @@ -1,14 +1,11 @@ - - + + net8.0 Latest enable enable - false - true - true true @@ -20,9 +17,6 @@ - - -