public void ParseSketchRectangleTest() { var mockSketchArchive = MockSketchArchive.Create(Snippets.RectangleJson); var log = Substitute.For <ILogger>(); var sketchDocument = new SketchParser(log).Parse(mockSketchArchive); Assert.AreEqual(1, sketchDocument.Pages.Count); Assert.NotNull(sketchDocument.Pages[0].Layers); Assert.IsInstanceOf(typeof(SketchRectangle), sketchDocument.Pages[0].Layers[0]); }
public void ParseErrorInLayerLogsAndSkips() { var mockSketchArchive = MockSketchArchive.Create(Snippets.PathInvalidJson); var log = new MessageListLogger(); var document = new SketchParser(log).Parse(mockSketchArchive); Assert.That(document.Pages.Count, Is.EqualTo(1)); Assert.That(document.Pages[0].Layers.Count, Is.EqualTo(0)); Assert.That(log.ErrorsAndWarnings().Count, Is.EqualTo(1)); Assert.That(log.ErrorsAndWarnings()[0], Does.Match("Failed to parse layer")); }
public void UnsupportedLayerWarnsAndSkips() { var mockSketchArchive = MockSketchArchive.Create(Snippets.JellyfishLayerJson); var log = new MessageListLogger(); var document = new SketchParser(log).Parse(mockSketchArchive); Assert.That(document.Pages.Count, Is.EqualTo(1)); Assert.That(document.Pages[0].Layers.Count, Is.EqualTo(0)); Assert.That(log.ErrorsAndWarnings().Count, Is.EqualTo(1)); Assert.That(log.ErrorsAndWarnings()[0], Does.Match("Skipping layer 'Jellyfish' of unsupported type 'jellyfish'")); }
public void ParseShapeGroupWithClippingMaskOn() { var mockSketchArchive = MockSketchArchive.Create(Snippets.MaskedShapeGroup); var log = Substitute.For <ILogger>(); var sketchDocument = new SketchParser(log).Parse(mockSketchArchive); Assert.That(sketchDocument.Pages.Count, Is.EqualTo(1)); var shapeGroup = sketchDocument.Pages.First().Layers.First() as SketchShapeGroup; Assert.That(shapeGroup, Is.Not.Null); Assert.That(shapeGroup.HasClippingMask, Is.True); }
public void ParseStarShape() { var mockSketchArchive = MockSketchArchive.Create(Snippets.Star); var log = Substitute.For <ILogger>(); var sketchDocument = new SketchParser(log).Parse(mockSketchArchive); var shapePath = sketchDocument.Pages[0].Layers[0] as SketchShapePath; Assert.NotNull(shapePath); Assert.AreEqual(10, shapePath.Path.Points.Count); Assert.AreEqual(10, shapePath.Path.Points.Count(p => p.Mode == SketchCurvePoint.CurveMode.Line)); Assert.That(shapePath.Path.IsClosed, Is.True); }
public void ParseLayerWithVerticalFlip() { var mockSketchArchive = MockSketchArchive.Create(Snippets.ShapeWithVerticalFlip); var log = new MessageListLogger(); var sketchDocument = new SketchParser(log).Parse(mockSketchArchive); var shapePath = sketchDocument.Pages[0].Layers[0] as SketchShapePath; Assert.NotNull(shapePath); Assert.That(shapePath.Path.IsClosed, Is.False); Assert.That(shapePath.IsFlippedVertical, Is.True); Assert.That(shapePath.IsFlippedHorizontal, Is.False); Assert.That(log.ErrorsAndWarnings().Count, Is.Zero); }
public void ParseShapePathWithLinesAndCurves() { var mockSketchArchive = MockSketchArchive.Create(Snippets.VectorPath); var log = Substitute.For <ILogger>(); var sketchDocument = new SketchParser(log).Parse(mockSketchArchive); var shapePath = sketchDocument.Pages[0].Layers[0] as SketchShapePath; Assert.NotNull(shapePath); Assert.IsFalse(shapePath.Path.IsClosed); Assert.AreEqual(11, shapePath.Path.Points.Count); Assert.AreEqual(6, shapePath.Path.Points.Count(p => p.Mode == SketchCurvePoint.CurveMode.Line)); Assert.AreEqual(5, shapePath.Path.Points.Count(p => p.Mode == SketchCurvePoint.CurveMode.Curve)); }
public void ParseNestedSketchSymbolTest() { var mockSketchArchive = MockSketchArchive.Create(Snippets.SymbolMasterWithInstance); var log = Substitute.For <ILogger>(); var sketchDocument = new SketchParser(log).Parse(mockSketchArchive); Assert.NotNull(sketchDocument); Assert.AreEqual(1, sketchDocument.Pages.Count); Assert.NotNull(sketchDocument.Pages[0].Layers); Assert.IsInstanceOf <SketchSymbolMaster>(sketchDocument.Pages[0].Layers[0]); var symbolMaster = sketchDocument.Pages[0].Layers[0] as SketchSymbolMaster; Assert.AreEqual("Rectangle", symbolMaster.Name); Assert.AreEqual(1, symbolMaster.Layers.Count(l => l.GetType() == typeof(SketchSymbolInstance))); }
public void ParseShapePathWithStraightLine() { var mockSketchArchive = MockSketchArchive.Create(Snippets.ShapePathJson); var log = Substitute.For <ILogger>(); var sketchDocument = new SketchParser(log).Parse(mockSketchArchive); Assert.NotNull(sketchDocument); Assert.AreEqual(1, sketchDocument.Pages.Count); Assert.NotNull(sketchDocument.Pages[0].Layers); Assert.IsInstanceOf <SketchShapePath>(sketchDocument.Pages[0].Layers[0]); var shapePath = sketchDocument.Pages[0].Layers[0] as SketchShapePath; Assert.IsFalse(shapePath.Path.IsClosed); Assert.AreEqual(2, shapePath.Path.Points.Count); }
public void ParseEmptySketchDocument() { // Create Sketch document where page has an empty layer list // When saving an empty sketch file, the document-class doesn't have an do_objectID var mockSketchArchive = Substitute.For <ISketchArchive>(); mockSketchArchive .OpenFile("document.json") .Returns( new MemoryStream(Encoding.ASCII.GetBytes( @"{ '_class': 'document', 'pages': [] }" ))); var log = new MessageListLogger(); var sketchDocument = new SketchParser(log).Parse(mockSketchArchive); Assert.NotNull(sketchDocument); }
public static void Main(string[] args) { var sketchFilePaths = new List <string>(); string outputDir = null; #pragma warning disable 0219 var watch = false; #pragma warning restore 0219 var showHelp = false; var app = false; var options = new OptionSet { { "i=", "Sketch file to import. Specify multiple sketch-files by using the -i option for each file.", p => sketchFilePaths.Add(p) }, { "o=", "Destination Fuse project directory", p => outputDir = p }, { "a|app", "Write output to MainView.ux inside an app tag", a => app = (a != null) }, { "w|watch", "Watch .sketch file for changes", w => watch = (w != null) }, { "h|?|help", "Display this help message", v => showHelp = (v != null) } }; try { var extra = options.Parse(args); if (extra.Count > 0) { foreach (var arg in extra) { Console.WriteLine("Unknown argument: '" + arg + "'"); PrintUsage(options); } Environment.Exit(1); } } catch (OptionException e) { Console.Error.WriteLine("Error: " + e.Message); PrintUsage(options); Environment.Exit(1); } if (showHelp) { PrintUsage(options); Environment.Exit(0); } if (sketchFilePaths.Count == 0 || string.IsNullOrEmpty(outputDir)) { PrintUsage(options); Environment.Exit(1); } try { var logger = new Logger(); var builder = app ? (IUxBuilder) new ArtboardUxBuilder(logger) : (IUxBuilder) new SymbolsUxBuilder(logger); var parser = new SketchParser(logger); var converter = new Converter(parser, builder, logger); converter.Convert(sketchFilePaths, outputDir); } catch (Exception e) { Console.Error.WriteLine("Error: " + e.Message); Environment.Exit(1); } }