public void LogoffTest()
        {
            // モックの設定
            var factory = new MockWebClientFactory();
            var mock    = factory.MockClient;
            WebHeaderCollection reqHead = new WebHeaderCollection();

            mock.Setup(client => client.Headers).Returns(reqHead);
            WebHeaderCollection resHead = new WebHeaderCollection();

            resHead.Add("Set-Cookie", "SomeCookie");
            mock.Setup(client => client.ResponseHeaders).Returns(resHead);

            // 実際の呼び出し
            LivetubeClient livetube = new LivetubeClient(factory);

            Assert.True(livetube.Login("hakusai", "password"));

            reqHead.Clear();
            resHead.Clear();
            livetube.Logoff();

            // 結果の確認
            Assert.AreEqual("SomeCookie", reqHead["Cookie"]);
            mock.Verify(client => client.DownloadString("http://livetube.cc/logoff"));

            livetube.Dispose();
        }
        public void FindStreamTest()
        {
            // モックの設定
            var factory = new MockWebClientFactory();
            var mock = factory.MockClient;
            mock.Setup(client => client.DownloadString("http://livetube.cc/hakusai/somesbroadcast")).Returns("<html>\r\nvar comment_entry_id = \"somestreamid\";\r\n</html>\r\n");
            WebHeaderCollection reqHead = new WebHeaderCollection();
            mock.Setup(client => client.Headers).Returns(reqHead);
            WebHeaderCollection resHead = new WebHeaderCollection();
            resHead.Add("Set-Cookie", "SomeCookie");
            mock.Setup(client => client.ResponseHeaders).Returns(resHead);

            // 実際の呼び出し
            LivetubeClient livetube = new LivetubeClient(factory);
            Assert.True(livetube.Login("hakusai", "password"));

            reqHead.Clear();
            resHead.Clear();
            Assert.AreEqual("somestreamid", livetube.FindStream("http://livetube.cc/hakusai/somesbroadcast"));

            reqHead.Clear();
            resHead.Clear();
            livetube.Logoff();

            // 結果の確認
            Assert.AreEqual("SomeCookie", reqHead["Cookie"]);
            mock.Verify(client => client.DownloadString("http://livetube.cc/logoff"));

            livetube.Dispose();
        }
        public void LoginTest2_twice()
        {
            // モックの設定
            var factory = new MockWebClientFactory();
            var mock    = factory.MockClient;
            WebHeaderCollection reqHead = new WebHeaderCollection();

            mock.Setup(client => client.Headers).Returns(reqHead);
            WebHeaderCollection resHead = new WebHeaderCollection();

            resHead.Add("Set-Cookie", "SomeCookie");
            mock.Setup(client => client.ResponseHeaders).Returns(resHead);

            // 実際の呼び出し
            LivetubeClient livetube = new LivetubeClient(factory);

            Assert.True(livetube.Login("hakusai", "password"));
            reqHead.Clear();
            resHead.Add("Set-Cookie", "SomeCookie");
            Assert.True(livetube.Login("hakusai", "password"));

            // 結果の確認
            Assert.AreEqual("application/x-www-form-urlencoded", reqHead["Content-Type"]);
            byte[] bytes = Encoding.ASCII.GetBytes("user=hakusai&password=password");
            mock.Verify(client => client.UploadData("http://livetube.cc/login", "POST", bytes));
            mock.Verify(client => client.DownloadString("http://livetube.cc/logoff"));

            livetube.Dispose();
        }
        public void FindStreamTest()
        {
            // モックの設定
            var factory = new MockWebClientFactory();
            var mock    = factory.MockClient;

            mock.Setup(client => client.DownloadString("http://livetube.cc/hakusai/somesbroadcast")).Returns("<html>\r\nvar comment_entry_id = \"somestreamid\";\r\n</html>\r\n");
            WebHeaderCollection reqHead = new WebHeaderCollection();

            mock.Setup(client => client.Headers).Returns(reqHead);
            WebHeaderCollection resHead = new WebHeaderCollection();

            resHead.Add("Set-Cookie", "SomeCookie");
            mock.Setup(client => client.ResponseHeaders).Returns(resHead);

            // 実際の呼び出し
            LivetubeClient livetube = new LivetubeClient(factory);

            Assert.True(livetube.Login("hakusai", "password"));

            reqHead.Clear();
            resHead.Clear();
            Assert.AreEqual("somestreamid", livetube.FindStream("http://livetube.cc/hakusai/somesbroadcast"));

            reqHead.Clear();
            resHead.Clear();
            livetube.Logoff();

            // 結果の確認
            Assert.AreEqual("SomeCookie", reqHead["Cookie"]);
            mock.Verify(client => client.DownloadString("http://livetube.cc/logoff"));

            livetube.Dispose();
        }
        public void FindCurrentBroadcastingTest()
        {
            // モックの設定
            var factory = new MockWebClientFactory();
            var mock = factory.MockClient;
            mock.Setup(client => client.DownloadString("http://livetube.cc/hakusai/")).Returns("<html>\r\n<a href=\"/hakusai/sometitle\"><img src=\"/images/loading.gif\">実行中</a></html>\r\n");
            WebHeaderCollection reqHead = new WebHeaderCollection();
            mock.Setup(client => client.Headers).Returns(reqHead);
            WebHeaderCollection resHead = new WebHeaderCollection();
            mock.Setup(client => client.ResponseHeaders).Returns(resHead);

            // 実際の呼び出し
            LivetubeClient livetube = new LivetubeClient(factory);
            Assert.AreEqual("http://livetube.cc/hakusai/sometitle", livetube.FindCurrentBroadcasting("http://livetube.cc/hakusai/"));
        }
        public void FindCurrentBroadcastingTest()
        {
            // モックの設定
            var factory = new MockWebClientFactory();
            var mock    = factory.MockClient;

            mock.Setup(client => client.DownloadString("http://livetube.cc/hakusai/")).Returns("<html>\r\n<a href=\"/hakusai/sometitle\"><img src=\"/images/loading.gif\">実行中</a></html>\r\n");
            WebHeaderCollection reqHead = new WebHeaderCollection();

            mock.Setup(client => client.Headers).Returns(reqHead);
            WebHeaderCollection resHead = new WebHeaderCollection();

            mock.Setup(client => client.ResponseHeaders).Returns(resHead);

            // 実際の呼び出し
            LivetubeClient livetube = new LivetubeClient(factory);

            Assert.AreEqual("http://livetube.cc/hakusai/sometitle", livetube.FindCurrentBroadcasting("http://livetube.cc/hakusai/"));
        }
        public void PostCommentTest()
        {
            // モックの設定
            var factory = new MockWebClientFactory();
            var mock    = factory.MockClient;

            mock.Setup(client => client.DownloadString("http://livetube.cc/hakusai/somesbroadcast")).Returns("<html>\r\nvar comment_entry_id = \"somestreamid\";\r\n</html>\r\n");
            WebHeaderCollection reqHead = new WebHeaderCollection();

            mock.Setup(client => client.Headers).Returns(reqHead);
            WebHeaderCollection resHead = new WebHeaderCollection();

            resHead.Add("Set-Cookie", "SomeCookie");
            mock.Setup(client => client.ResponseHeaders).Returns(resHead);

            // 実際の呼び出し
            LivetubeClient livetube = new LivetubeClient(factory);

            Assert.True(livetube.Login("hakusai", "password"));

            reqHead.Clear();
            resHead.Clear();
            var streamid = livetube.FindStream("http://livetube.cc/hakusai/somesbroadcast");

            reqHead.Clear();
            resHead.Clear();
            livetube.PostComment(streamid, "hakusai", "コメント");

            // 結果の確認
            Assert.AreEqual("application/x-www-form-urlencoded", reqHead["Content-Type"]);
            Assert.AreEqual("SomeCookie", reqHead["Cookie"]);
            byte[] bytes = Encoding.ASCII.GetBytes("name=hakusai&c=%E3%82%B3%E3%83%A1%E3%83%B3%E3%83%88");
            mock.Verify(client => client.UploadData("http://livetube.cc/stream/somestreamid.comments", "POST", bytes));

            reqHead.Clear();
            resHead.Clear();
            livetube.Logoff();

            livetube.Dispose();
        }
        public void PostCommentTest()
        {
            // モックの設定
            var factory = new MockWebClientFactory();
            var mock = factory.MockClient;
            mock.Setup(client => client.DownloadString("http://livetube.cc/hakusai/somesbroadcast")).Returns("<html>\r\nvar comment_entry_id = \"somestreamid\";\r\n</html>\r\n");
            WebHeaderCollection reqHead = new WebHeaderCollection();
            mock.Setup(client => client.Headers).Returns(reqHead);
            WebHeaderCollection resHead = new WebHeaderCollection();
            resHead.Add("Set-Cookie", "SomeCookie");
            mock.Setup(client => client.ResponseHeaders).Returns(resHead);

            // 実際の呼び出し
            LivetubeClient livetube = new LivetubeClient(factory);
            Assert.True(livetube.Login("hakusai", "password"));

            reqHead.Clear();
            resHead.Clear();
            var streamid = livetube.FindStream("http://livetube.cc/hakusai/somesbroadcast");

            reqHead.Clear();
            resHead.Clear();
            livetube.PostComment(streamid, "hakusai", "コメント");

            // 結果の確認
            Assert.AreEqual("application/x-www-form-urlencoded", reqHead["Content-Type"]);
            Assert.AreEqual("SomeCookie", reqHead["Cookie"]);
            byte[] bytes = Encoding.ASCII.GetBytes("name=hakusai&c=%E3%82%B3%E3%83%A1%E3%83%B3%E3%83%88");
            mock.Verify(client => client.UploadData("http://livetube.cc/stream/somestreamid.comments", "POST", bytes));

            reqHead.Clear();
            resHead.Clear();
            livetube.Logoff();

            livetube.Dispose();
        }
        public void LogoffTest()
        {
            // モックの設定
            var factory = new MockWebClientFactory();
            var mock = factory.MockClient;
            WebHeaderCollection reqHead = new WebHeaderCollection();
            mock.Setup(client => client.Headers).Returns(reqHead);
            WebHeaderCollection resHead = new WebHeaderCollection();
            resHead.Add("Set-Cookie", "SomeCookie");
            mock.Setup(client => client.ResponseHeaders).Returns(resHead);

            // 実際の呼び出し
            LivetubeClient livetube = new LivetubeClient(factory);
            Assert.True(livetube.Login("hakusai", "password"));

            reqHead.Clear();
            resHead.Clear();
            livetube.Logoff();

            // 結果の確認
            Assert.AreEqual("SomeCookie", reqHead["Cookie"]);
            mock.Verify(client => client.DownloadString("http://livetube.cc/logoff"));

            livetube.Dispose();
        }
        public void LoginTest2_twice()
        {
            // モックの設定
            var factory = new MockWebClientFactory();
            var mock = factory.MockClient;
            WebHeaderCollection reqHead = new WebHeaderCollection();
            mock.Setup(client => client.Headers).Returns(reqHead);
            WebHeaderCollection resHead = new WebHeaderCollection();
            resHead.Add("Set-Cookie", "SomeCookie");
            mock.Setup(client => client.ResponseHeaders).Returns(resHead);

            // 実際の呼び出し
            LivetubeClient livetube = new LivetubeClient(factory);
            Assert.True(livetube.Login("hakusai", "password"));
            reqHead.Clear();
            resHead.Add("Set-Cookie", "SomeCookie");
            Assert.True(livetube.Login("hakusai", "password"));

            // 結果の確認
            Assert.AreEqual("application/x-www-form-urlencoded", reqHead["Content-Type"]);
            byte[] bytes = Encoding.ASCII.GetBytes("user=hakusai&password=password");
            mock.Verify(client => client.UploadData("http://livetube.cc/login", "POST", bytes));
            mock.Verify(client => client.DownloadString("http://livetube.cc/logoff"));

            livetube.Dispose();
        }