public void SaveState()
		{
			// Arrange
			var viewModel = GetViewModel();

			var expectedFeedItem = new FeedItem();

			var wasCleanupCalled = false;
			this.ShareManager.CleanupDelegate = () =>
			{
				wasCleanupCalled = true;
			};

			// Act
			viewModel.SaveState(null);

			// Assert
			Assert.IsTrue(wasCleanupCalled, "Share Manager Initialize");
		}
		public void LoadState()
		{
			// Arrange
			var viewModel = GetViewModel();

			var expectedFeedItem = new FeedItem();

			var wasInitializeCalled = false;
			this.ShareManager.InitializeDelegate = () =>
				{
					wasInitializeCalled = true;
				};

			// Act
			viewModel.LoadState(expectedFeedItem, null);

			// Assert
			Assert.AreSame(expectedFeedItem, viewModel.FeedItem, "FeedItem");
			Assert.IsTrue(wasInitializeCalled, "Share Manager Initialize");
		}
		public void FeedItem()
		{
			// Arrange
			var viewModel = GetViewModel();

			var expectedFeedItem = new FeedItem();

			// Act
			viewModel.PropertyChanged += this.OnPropertyChanged;
			viewModel.FeedItem = expectedFeedItem;
			viewModel.PropertyChanged -= this.OnPropertyChanged;

			// Assert
			Assert.IsTrue(this.PropertiesChanged.Contains("FeedItem"), "Property Changed");
			Assert.AreSame(expectedFeedItem, viewModel.FeedItem, "Feed Item");
		}
		public async Task ShareRequested()
		{
			// Arrange
			var viewModel = GetViewModel();

			var dataPackage = new DataPackage();
			var dataPackageView = dataPackage.GetView();

			var feedItem = new FeedItem
			{
				Title = Guid.NewGuid().ToString(),
				Author = Guid.NewGuid().ToString(),
				Link = new Uri("http://www.bing.com")
			};

			viewModel.LoadState(feedItem, null);

			// Act
			this.ShareManager.OnShareRequested(dataPackage);

			// Assert
			Assert.IsFalse(string.IsNullOrEmpty(await dataPackageView.GetTextAsync()), "Text Exists");
			Assert.AreEqual(feedItem.Link.ToString(), (await dataPackageView.GetUriAsync()).ToString(), "Uri");
			Assert.IsTrue(!string.IsNullOrEmpty(await dataPackageView.GetHtmlFormatAsync()), "HTML Exists");
		}
		public async Task Pin_PinNotSucceeded()
		{
			// Arrange
			var viewModel = GetViewModel();

			var feedItem = new FeedItem
			{
				Title = Guid.NewGuid().ToString(),
				Author = Guid.NewGuid().ToString(),
				Link = new Uri("http://www.bing.com")
			};

			viewModel.LoadState(feedItem, null);

			Placement actualPlacement = Placement.Default;
			TileInfo actualTileInfo = null;
			SecondaryPinner.PinDelegate = (tileInfo) =>
			{
				actualPlacement = tileInfo.RequestPlacement;
				actualTileInfo = tileInfo;

				return false;
			};

			var wasSaveCalled = false;
			Storage.SaveAsyncDelegate = (key, value) =>
			{
				wasSaveCalled = true;
			};

			// Act
			await viewModel.Pin(null);

			// Assert
			Assert.AreEqual(Placement.Above, actualPlacement, "Placement");
			Assert.AreEqual(string.Format(Constants.SecondaryIdFormat, viewModel.FeedItem.Id), actualTileInfo.TileId, "Tile Info Tile Id");
			Assert.AreEqual(viewModel.FeedItem.Title, actualTileInfo.DisplayName, "Tile Info Display Name");
			Assert.AreEqual(viewModel.FeedItem.Title, actualTileInfo.ShortName, "Tile Info Short Name");
			Assert.AreEqual(viewModel.FeedItem.Id.ToString(), actualTileInfo.Arguments, "Tile Info Arguments");
			Assert.IsFalse(wasSaveCalled, "Was Save Called");
		}
Example #6
0
		public override void LoadState(FeedItem navigationParameter, System.Collections.Generic.Dictionary<string, object> pageState)
		{
			base.LoadState(navigationParameter, pageState);

			UpdateAppBarButtons();
		}
		public async Task Pin_PinSucceeded()
		{
			// Arrange
			var viewModel = GetViewModel();

			var feedItem = new FeedItem
			{
				Title = Guid.NewGuid().ToString(),
				Author = Guid.NewGuid().ToString(),
				Link = new Uri("http://www.bing.com")
			};

			viewModel.LoadState(feedItem, null);

			Placement actualPlacement = Placement.Default;
			TileInfo actualTileInfo = null;
			SecondaryPinner.PinDelegate = (tileInfo) =>
			{
				actualPlacement = tileInfo.RequestPlacement;
				actualTileInfo = tileInfo;

				return true;
			};

			string actualKey = null;
			List<FeedItem> actualPinnedFeedItems = null;
			Storage.SaveAsyncDelegate = (key, value) =>
			{
				actualKey = key;
				actualPinnedFeedItems = (List<FeedItem>)value;
			};

			// Act
			await viewModel.Pin(null);

			// Assert
			Assert.AreEqual(Placement.Above, actualPlacement, "Placement");
			Assert.AreEqual(string.Format(Constants.SecondaryIdFormat, viewModel.FeedItem.Id), actualTileInfo.TileId, "Tile Info Tile Id");
			Assert.AreEqual(viewModel.FeedItem.Title, actualTileInfo.DisplayName, "Tile Info Display Name");
			Assert.AreEqual(viewModel.FeedItem.Id.ToString(), actualTileInfo.Arguments, "Tile Info Arguments");
			Assert.AreEqual(Constants.PinnedFeedItemsKey, actualKey, "Save Key");
			Assert.IsNotNull(actualPinnedFeedItems, "Pinned Feed Items");
		}
Example #8
0
		protected override async Task<Models.FeedData> GetFeedAsync(string feedUriString)
		{
			var client = new SyndicationClient();
			Uri feedUri;
			if (!Uri.TryCreate(feedUriString, UriKind.RelativeOrAbsolute, out feedUri))
			{
				return null;
			}

			try
			{
				var feed = await client.RetrieveFeedAsync(feedUri);
				var feedData = new FeedData();
				if (feed.Title != null && feed.Title.Text != null)
				{
					feedData.Title = feed.Title.Text;
				}
				if (feed.Subtitle != null && feed.Subtitle.Text != null)
				{
					feedData.Description = feed.Subtitle.Text;
				}
				if (feed.Items != null && feed.Items.Count > 0)
				{
					feedData.PublishedDate = feed.Items[0].PublishedDate.DateTime;

					foreach (var item in feed.Items)
					{
						var feedItem = new FeedItem();
						if (item.Title != null && item.Title.Text != null)
						{
							feedItem.Title = item.Title.Text;
						}
						if (item.PublishedDate != null)
						{
							feedItem.PublishedDate = item.PublishedDate.DateTime;
						}
						if (item.Authors != null && item.Authors.Count > 0)
						{
							feedItem.PublishedDate = item.PublishedDate.DateTime;
						}
						if (feed.SourceFormat == SyndicationFormat.Atom10)
						{
							if (item.Content != null && item.Content.Text != null)
							{
								feedItem.Content = item.Content.Text;
							}
							if (item.Id != null)
							{
								feedItem.Link = new Uri(item.Id);
							}
						}
						else if (feed.SourceFormat == SyndicationFormat.Rss20)
						{
							if (item.Summary != null && item.Summary.Text != null)
							{
								feedItem.Content = item.Summary.Text;
							}
							if (item.Links != null && item.Links.Count > 0)
							{
								feedItem.Link = item.Links[0].Uri;
							}
						}

						feedItem.Id = Regex.Replace(feedItem.Link.ToString(), @"[^0-9a-zA-Z\.]+", string.Empty).GetHashCode();

						feedData.Items.Add(feedItem);
					}
				}

				return feedData;
			}
			catch (Exception ex)
			{
				System.Diagnostics.Debug.WriteLine(ex.Message);
				return null;
			}
		}
Example #9
0
		private async Task<Models.FeedData> GetFeedAsync(string feedUriString)
		{
			var client = new SyndicationClient();
			Uri feedUri;
			if (!Uri.TryCreate(feedUriString, UriKind.RelativeOrAbsolute, out feedUri))
			{
				return null;
			}

			try
			{
				var feed = await client.RetrieveFeedAsync(feedUri);
				var feedData = new FeedData();
				if (feed.Title != null && feed.Title.Text != null)
				{
					feedData.Title = feed.Title.Text;
				}
				if (feed.Subtitle != null && feed.Subtitle.Text != null)
				{
					feedData.Description = feed.Subtitle.Text;
				}
				if (feed.Items != null && feed.Items.Count > 0)
				{
					feedData.PublishedDate = feed.Items[0].PublishedDate.DateTime;

					foreach (var item in feed.Items)
					{
						var feedItem = new FeedItem();
						if (item.Title != null && item.Title.Text != null)
						{
							feedItem.Title = item.Title.Text;
						}
						if (item.PublishedDate != null)
						{
							feedItem.PublishedDate = item.PublishedDate.DateTime;
						}
						if (item.Authors != null && item.Authors.Count > 0)
						{
							feedItem.PublishedDate = item.PublishedDate.DateTime;
						}
						if (feed.SourceFormat == SyndicationFormat.Atom10)
						{
							if (item.Content != null && item.Content.Text != null)
							{
								feedItem.Content = item.Content.Text;
							}
							if (item.Id != null)
							{
								feedItem.Link = new Uri(item.Id);
							}
						}
						else if (feed.SourceFormat == SyndicationFormat.Rss20)
						{
							if (item.Summary != null && item.Summary.Text != null)
							{
								feedItem.Content = item.Summary.Text;
							}
							if (item.Links != null && item.Links.Count > 0)
							{
								feedItem.Link = item.Links[0].Uri;
							}
						}

						feedItem.Id = Regex.Replace(feedItem.Link.ToString(), @"[^0-9a-zA-Z\.]+", string.Empty).GetHashCode();

						feedData.Items.Add(feedItem);
					}
				}

				return feedData;
			}
			catch (Exception ex)
			{
				//System.Diagnostics.Debug.WriteLine(ex.Message);
				//return null;
				SyndicationErrorStatus status = SyndicationError.GetStatus(ex.HResult);
				if (status == SyndicationErrorStatus.InvalidXml)
				{
					System.Diagnostics.Debug.WriteLine("An invalid XML exception was thrown. Please make sure to use a URI that points to a RSS or Atom feed.");
				}

				if (status == SyndicationErrorStatus.Unknown)
				{
					Windows.Web.WebErrorStatus webError = Windows.Web.WebError.GetStatus(ex.HResult);

					if (webError == Windows.Web.WebErrorStatus.Unknown)
					{
						// Neither a syndication nor a web error. Rethrow.
						throw;
					}
				}

				return null;
			}
		}
        public void ViewFeed()
        {
            // Arrange
            var viewModel = this.GetViewModel();

            var expectedFeedItem = new FeedItem();

            Type actualViewModelType = null;
            FeedItem actualFeedItem = null;
            this.Navigator.NavigateToViewModelDelegate = (viewModelType, parameter) =>
                {
                    actualViewModelType = viewModelType;
                    actualFeedItem = parameter as FeedItem;
                };

            // Act
            viewModel.ViewFeed(expectedFeedItem);

            // Assert
            Assert.AreSame(expectedFeedItem, actualFeedItem, "FeedItem");
            Assert.AreEqual(typeof(FeedItemViewModel), actualViewModelType, "ViewModel Type");
        }
Example #11
0
        protected override Task<Models.FeedData> GetFeedAsync(string feedUriString)
        {
            var task = new TaskCompletionSource<Models.FeedData>();

            var webClient = new WebClient();
            webClient.DownloadStringCompleted += (sender, args) =>
            {
                if (args.Error == null)
                {
                    var stringReader = new StringReader(args.Result);
                    var feedData = new FeedData();
                    using (var xmlReader = XmlReader.Create(stringReader))
                    {
                        var feed = SyndicationFeed.Load(xmlReader);

                        if (feed.Title != null && feed.Title.Text != null)
                        {
                            feedData.Title = feed.Title.Text;
                        }
                        if (feed.Description != null && feed.Description.Text != null)
                        {
                            feedData.Description = feed.Description.Text;
                        }
                        if (feed.Items != null && feed.Items.Any())
                        {
                            feedData.PublishedDate = feed.Items.First().PublishDate.DateTime;

                            foreach (var item in feed.Items)
                            {
                                var feedItem = new FeedItem();
                                if (item.Title != null && item.Title.Text != null)
                                {
                                    feedItem.Title = item.Title.Text;
                                }
                                if (item.PublishDate != null)
                                {
                                    feedItem.PublishedDate = item.PublishDate.DateTime;
                                }
                                if (item.Authors != null && item.Authors.Count > 0)
                                {
                                    feedItem.PublishedDate = item.PublishDate.DateTime;
                                }
                                if (item.Content != null && ((TextSyndicationContent)item.Content).Text != null)
                                {
                                    feedItem.Content = ((TextSyndicationContent)item.Content).Text;
                                }
                                else if (item.Summary != null && item.Summary.Text != null)
                                {
                                    feedItem.Content = item.Summary.Text;
                                }
                                if (item.Links != null && item.Links.Count > 0)
                                {
                                    feedItem.Link = item.Links[0].Uri;
                                }

                                feedItem.Id = Regex.Replace(feedItem.Link.ToString(), @"[^0-9a-zA-Z\.]+", string.Empty).GetHashCode();

                                feedData.Items.Add(feedItem);
                            }
                        }
                    }
                    task.TrySetResult(feedData);
                }
                else
                {
                    task.TrySetException(args.Error);
                }
            };
            webClient.DownloadStringAsync(new Uri(feedUriString));

            return task.Task;
        }
Example #12
0
 public void ViewFeed(FeedItem feedItem)
 {
     this.navigator.NavigateToViewModel<FeedItemViewModel>(feedItem);
 }