示例#1
0
        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]);
        }
示例#2
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"));
        }
示例#3
0
        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'"));
        }
示例#4
0
        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);
        }
示例#5
0
        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);
        }
示例#6
0
        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);
        }
示例#7
0
        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));
        }
示例#8
0
        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)));
        }
示例#9
0
        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);
        }
示例#10
0
        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);
        }
示例#11
0
        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);
            }
        }