using Perforce.P4; using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Diagnostics; using System.Collections.Generic; namespace UnitTests { /// ///This is a test class for P4WorkspaceTest and is intended ///to contain all P4WorkspaceTest Unit Tests /// [TestClass()] public class P4WorkspaceTest { String TestDir = "c:\\MyTestDir"; private TestContext testContextInstance; /// ///Gets or sets the test context which provides ///information about and functionality for the current test run. /// public TestContext TestContext { get { return testContextInstance; } set { testContextInstance = value; } } #region Additional test attributes // //You can use the following additional attributes as you write your tests: // //Use ClassInitialize to run code before running the first test in the class //[ClassInitialize()] //public static void MyClassInitialize(TestContext testContext) //{ //} // //Use ClassCleanup to run code after all tests in a class have run //[ClassCleanup()] //public static void MyClassCleanup() //{ //} // //Use TestInitialize to run code before running each test //[TestInitialize()] //public void MyTestInitialize() //{ //} // //Use TestCleanup to run code after each test has run //[TestCleanup()] //public void MyTestCleanup() //{ //} // #endregion /// ///A test for Delete /// [TestMethod()] public void DeleteTest() { bool unicode = false; string server = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for( int i = 0; i < 2; i++ ) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer( TestDir, unicode ); try { using (P4Server target = new P4Server(server, user, pass, ws_client)) { P4Workspace actual = P4Workspace.Fetch(target, "admin_space"); Assert.IsNotNull(actual); actual.Delete( true ); } } catch (Exception ex) { Assert.Fail("Exception Thrown: {0} : {1}", ex.ToString(), ex.Message); } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for Fetch /// [TestMethod()] public void FetchTest() { bool unicode = false; string server = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for( int i = 0; i < 2; i++ ) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer( TestDir, unicode ); try { using (P4Server target = new P4Server(server, user, pass, ws_client)) { P4Workspace actual = P4Workspace.Fetch(target, "admin_space"); Assert.IsNotNull(actual); } } catch (Exception ex) { Assert.Fail("Exception Thrown: {0} : {1}", ex.ToString(), ex.Message); } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetView /// [TestMethod()] public void GetViewTest() { bool unicode = false; string server = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, unicode); try { using (P4Server target = new P4Server(server, user, pass, ws_client)) { P4Workspace actual = P4Workspace.Fetch(target, "admin_space"); Assert.IsNotNull(actual); StringList view = actual.GetView(); Assert.AreEqual(view[0], "//depot/... //admin_space/..."); } } catch (Exception ex) { Assert.Fail("Exception Thrown: {0} : {1}", ex.ToString(), ex.Message); } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for Parse /// [TestMethod()] public void ParseTest() { P4Server pserver = new P4Server(false); P4Workspace target = new P4Workspace(pserver, "temp"); bool actual = target.Parse(spec); Assert.IsTrue(actual); Assert.AreEqual(target.Name, "XP1_usr"); } /// ///A test for ToString /// [TestMethod()] public void ToStringTest() { P4Server pserver = new P4Server(false); P4Workspace target = new P4Workspace(pserver, "temp"); bool result = target.Parse(spec); Assert.IsTrue(result); Assert.AreEqual(target.Name, "XP1_usr"); String actual = target.ToString(); Assert.IsTrue(actual.StartsWith("Client:\tXP1_usr")); } /// ///A test for Save /// [TestMethod()] public void SaveTest() { bool unicode = false; string server = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, unicode); try { using (P4Server target = new P4Server(server, user, pass, ws_client)) { P4Workspace actual = P4Workspace.Fetch(target, "admin_space"); Assert.IsNotNull(actual); String newDescription = "This is an new description"; actual.Description = newDescription; actual.Save( false ); P4Workspace newActual = P4Workspace.Fetch(target, "admin_space"); Assert.AreEqual(newActual.Description.TrimEnd(' ','\r','\n'), newDescription); } } catch (Exception ex) { Assert.Fail("Exception Thrown: {0} : {1}", ex.ToString(), ex.Message); } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } string spec = @"# A Perforce Client Specification. # # Client: The client name. # Update: The date this specification was last modified. # Access: The date this client was last used in any way. # Owner: The user who created this client. # Host: If set, restricts access to the named host. # Description: A short description of the client (optional). # Root: The base directory of the client workspace. # AltRoots: Up to two alternate client workspace roots. # Options: Client options: # [no]allwrite [no]clobber [no]compress # [un]locked [no]modtime [no]rmdir # SubmitOptions: # submitunchanged/submitunchanged+reopen # revertunchanged/revertunchanged+reopen # leaveunchanged/leaveunchanged+reopen # LineEnd: Text file line endings on client: local/unix/mac/win/share. # View: Lines to map depot files into the client workspace. # # Use 'p4 help client' to see more about client views and options. Client: XP1_usr Update: 2010/11/29 15:30:32 Access: 2010/11/23 08:26:17 Owner: XP1 Host: XPPro001 Description: Created by xp1. Root: c:\XP1_dev AltRoots: c:\XP1_dev_A1 c:\XP1_dev_A2 Options: noallwrite noclobber nocompress unlocked nomodtime normdir SubmitOptions: submitunchanged LineEnd: local View: //depot/dev/xp1/... //XP1_usr/depot/dev/xp1/... "; // Brain dead property tests /// ///A test for AltRoots /// [TestMethod()] public void AltRootsTest() { P4Server pserver = null; P4Workspace target = new P4Workspace(pserver, "Fred"); StringList expected = new StringList(); expected.Add("Pooh Bear"); expected.Add("Smokey Bear"); StringList actual; target.AltRoots = expected; actual = target.AltRoots; Assert.AreEqual(expected, actual); } /// ///A test for LastAccess /// //[TestMethod()] //[DeploymentItem("p4.net.dll")] //public void LastAccessTest() //{ // P4Server pserver = null; // P4Workspace target = new P4Workspace(pserver, "Fred"); // DateTime expected = DateTime.Now; // DateTime actual; // target.LastAccess = expected; // actual = target.LastAccess; // Assert.AreEqual(expected, actual); //} /// ///A test for Description /// [TestMethod()] public void DescriptionTest() { P4Server pserver = null; P4Workspace target = new P4Workspace(pserver, "Fred"); string expected = "Handy Manny"; string actual; target.Description = expected; actual = target.Description; Assert.AreEqual(expected, actual); } /// ///A test for Host /// [TestMethod()] public void HostTest() { P4Server pserver = null; P4Workspace target = new P4Workspace(pserver, "Fred"); string expected = "Handy Manny"; string actual; target.Host = expected; actual = target.Host; Assert.AreEqual(expected, actual); } /// ///A test for LastUpdate /// //[TestMethod()] //[DeploymentItem("p4.net.dll")] //public void LastUpdateTest() //{ // P4Server pserver = null; // P4Workspace target = new P4Workspace(pserver, "Fred"); // DateTime expected = DateTime.Now; // DateTime actual; // target.LastUpdate = expected; // actual = target.LastUpdate; // Assert.AreEqual(expected, actual); //} /// ///A test for P4Workspace.LineEndOptions /// [TestMethod()] public void LineEndOptionsTest() { P4Server pserver = new P4Server(false); P4Workspace target = new P4Workspace(pserver, "Fred"); // possible values: local, unix, uac, win, share String spec = "local"; P4Workspace.LineEndFlags expected = new P4Workspace.LineEndFlags(spec); // P4Workspace.LineEndFlags actual; target.LineEndOptions = expected; actual = target.LineEndOptions; String formatted = actual.ToString(); Assert.AreEqual(spec, formatted); spec = "unix"; expected = new P4Workspace.LineEndFlags(spec); // target.LineEndOptions = expected; actual = target.LineEndOptions; formatted = actual.ToString(); Assert.AreEqual(spec, formatted); spec = "mac"; expected = new P4Workspace.LineEndFlags(spec); // target.LineEndOptions = expected; actual = target.LineEndOptions; formatted = actual.ToString(); Assert.AreEqual(spec, formatted); spec = "win"; expected = new P4Workspace.LineEndFlags(spec); // target.LineEndOptions = expected; actual = target.LineEndOptions; formatted = actual.ToString(); Assert.AreEqual(spec, formatted); spec = "share"; expected = new P4Workspace.LineEndFlags(spec); // target.LineEndOptions = expected; actual = target.LineEndOptions; formatted = actual.ToString(); Assert.AreEqual(spec, formatted); } /// ///A test for Name /// [TestMethod()] public void NameTest() { P4Server pserver = null; P4Workspace target = new P4Workspace(pserver, "Fred"); string expected = "Handy Manny"; string actual; target.Name = expected; actual = target.Name; Assert.AreEqual(expected, actual); } /// ///A test for Options /// [TestMethod()] public void OptionsTest() { P4Server pserver = new P4Server(false); P4Workspace target = new P4Workspace(pserver, "Fred"); String spec = "noallwrite noclobber nocompress unlocked nomodtime normdir"; P4Workspace.ClientFlags expected = new P4Workspace.ClientFlags(spec); P4Workspace.ClientFlags actual; target.Options = expected; actual = target.Options; String formatted = actual.ToString(); Assert.AreEqual(spec, formatted); spec = "allwrite clobber compress locked modtime rmdir"; expected = new P4Workspace.ClientFlags(spec); target.Options = expected; actual = target.Options; formatted = actual.ToString(); Assert.AreEqual(spec, formatted); } /// ///A test for Owner /// [TestMethod()] public void OwnerTest() { P4Server pserver = null; P4Workspace target = new P4Workspace(pserver, "Fred"); string expected = "Handy Manny"; string actual; target.Owner = expected; actual = target.Owner; Assert.AreEqual(expected, actual); } /// ///A test for Root /// [TestMethod()] public void RootTest() { P4Server pserver = null; P4Workspace target = new P4Workspace(pserver, "Fred"); string expected = "Handy Manny"; string actual; target.Root = expected; actual = target.Root; Assert.AreEqual(expected, actual); } /// ///A test for SubmitOptions /// [TestMethod()] public void SubmitOptionsTest() { P4Server pserver = new P4Server(false); P4Workspace target = new P4Workspace(pserver, "Fred"); // possible values: "submitunchanged", "revertunchanged", "leaveunchanged", "submitunchanged+reopen", "revertunchanged+reopen", "leaveunchanged+reopen"; String spec = "submitunchanged"; P4Workspace.SubmitFlags expected = new P4Workspace.SubmitFlags(spec); P4Workspace.SubmitFlags actual; target.SubmitOptions = expected; actual = target.SubmitOptions; String formatted = actual.ToString(); Assert.AreEqual(spec, formatted); spec = "revertunchanged"; expected = new P4Workspace.SubmitFlags(spec); target.SubmitOptions = expected; actual = target.SubmitOptions; formatted = actual.ToString(); Assert.AreEqual(spec, formatted); spec = "leaveunchanged"; expected = new P4Workspace.SubmitFlags(spec); target.SubmitOptions = expected; actual = target.SubmitOptions; formatted = actual.ToString(); Assert.AreEqual(spec, formatted); spec = "submitunchanged+reopen"; expected = new P4Workspace.SubmitFlags(spec); target.SubmitOptions = expected; actual = target.SubmitOptions; formatted = actual.ToString(); Assert.AreEqual(spec, formatted); spec = "revertunchanged+reopen"; expected = new P4Workspace.SubmitFlags(spec); target.SubmitOptions = expected; actual = target.SubmitOptions; formatted = actual.ToString(); Assert.AreEqual(spec, formatted); spec = "leaveunchanged+reopen"; expected = new P4Workspace.SubmitFlags(spec); target.SubmitOptions = expected; actual = target.SubmitOptions; formatted = actual.ToString(); Assert.AreEqual(spec, formatted); } /// ///A test for View /// [TestMethod()] public void ViewTest() { P4Server pserver = new P4Server(false); P4Workspace target = new P4Workspace(pserver, "Fred"); WorkspaceView expected = new WorkspaceView(pserver, new String[] { "//depot/a //workspace/a" }); WorkspaceView actual; target.View = expected; actual = target.View; Assert.AreEqual(expected.Count, actual.Count); Assert.AreEqual(expected.GetLeft(0), actual.GetLeft(0)); Assert.AreEqual(expected.GetRight(0), actual.GetRight(0)); Assert.AreEqual(expected.GetType(0), actual.GetType(0)); } } }