using Perforce.P4; using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Collections.Generic; using System.Diagnostics; namespace p4api.net.unit.test { /// ///This is a test class for RepositoryTest and is intended ///to contain RepositoryTest Unit Tests /// public partial class RepositoryTest { private static string testClientSpec = @"# 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/... "; /// ///A test for CreateClient /// [TestMethod()] public void CreateClientTest() { bool unicode = false; string uri = "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, 10, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); Client c = new Client(); c.Parse(testClientSpec); c.OwnerName = "Alice"; MapEntry me = new MapEntry(MapType.Include, new DepotPath("//depot/dev/xp1/..."), new ClientPath("//XP1_usr/depot/dev/xp1/...")); c.ViewMap.Add(me); c.Stream = "//Rocket/GUI"; c.StreamAtChange = "82"; Client newGuy = rep.CreateClient(c, null); Assert.IsNotNull(newGuy); Assert.AreEqual("Alice", newGuy.OwnerName); //create another one without stream fields or server id Client b = new Client(); b.Parse(testClientSpec); b.Name = "XP2_usr"; b.OwnerName = "Alice"; b.AltRoots = null; MapEntry me2 = new MapEntry(MapType.Include, new DepotPath("//depot/dev/xp1/..."), new ClientPath("//XP2_usr/depot/dev/xp1/...")); b.ViewMap.Clear(); b.ViewMap.Add(me2); Client anotherNewGuy = rep.CreateClient(b, null); Assert.IsNotNull(anotherNewGuy); Assert.AreEqual("Alice", anotherNewGuy.OwnerName); // add lines with spaces in the view MapEntry me3 = new MapEntry(MapType.Include, new DepotPath("//depot/dev/xp1/file with spaces.txt"), new ClientPath("//XP2_usr/dev/xp1/file with spaces.txt")); b.ViewMap.Clear(); b.ViewMap.Add(me3); anotherNewGuy = rep.UpdateClient(b); Assert.IsNotNull(anotherNewGuy); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for DeleteClient /// [TestMethod()] public void DeleteClientTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; string targetClient = "admin_space2"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 7, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); Client c = new Client(); c.Name = targetClient; Options uFlags = new Options(ClientCmdFlags.Force); rep.DeleteClient(c, uFlags); IList u2 = rep.GetClients( new Options(ClientsCmdFlags.None, null, "XP1_usr", 2, null)); Assert.IsNull(u2); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetClient /// [TestMethod()] public void GetClientTest() { bool unicode = false; string uri = "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, 6, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); Client c = rep.GetClient("alex_space", null); Assert.IsNotNull(c); Assert.AreEqual("alex_space", c.Name); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetClient - get streams client /// [TestMethod()] public void GetClientTest2() { bool unicode = false; string uri = "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, 10, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); Client c = rep.GetClient("bob-main", null); Assert.IsNotNull(c); Assert.AreEqual("bob-main", c.Name); Assert.AreEqual("//Parents/MAIN", c.Stream); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetClients /// [TestMethod()] public void GetClientsTest() { bool unicode = false; string uri = "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, 6, unicode); Server server = new Server(new ServerAddress(uri)); try { Repository rep = new Repository(server); using (Connection con = rep.Connection) { con.UserName = user; con.Client = new Client(); con.Client.Name = ws_client; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); IList u = rep.GetClients( new Options(ClientsCmdFlags.IncludeTime, null, null, 2, null)); Assert.IsNotNull(u); Assert.AreEqual(2, u.Count); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } } }