Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 25 additions & 4 deletions Macaw.xcodeproj/xcshareddata/xcschemes/MacawTests.xcscheme
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,22 @@
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "57FCD26B1D76EA4600CC0FB6"
BuildableName = "Macaw.framework"
BlueprintName = "Macaw"
ReferencedContainer = "container:Macaw.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
Expand All @@ -23,8 +39,6 @@
</BuildableReference>
</TestableReference>
</Testables>
<AdditionalOptions>
</AdditionalOptions>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
Expand All @@ -36,15 +50,22 @@
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "57FCD26B1D76EA4600CC0FB6"
BuildableName = "Macaw.framework"
BlueprintName = "Macaw"
ReferencedContainer = "container:Macaw.xcodeproj">
</BuildableReference>
</MacroExpansion>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
Expand Down
34 changes: 23 additions & 11 deletions MacawTests/MacawSVGTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,13 @@ class MacawSVGTests: XCTestCase {
private let testFolderName = "MacawTestOutputData"
private let shouldComparePNGImages = true
private let multipleTestsWillRun = false
private let shouldSaveFaildedTestImage = false
private let shouldSaveFailedTestImage = false

override func setUp() {
// Put setup code here. This method is called before the invocation of each test method in the class.
super.setUp()

if shouldSaveFaildedTestImage {
if shouldSaveFailedTestImage {
setupTestFolderDirectory()
}
}
Expand All @@ -36,14 +36,29 @@ class MacawSVGTests: XCTestCase {
super.tearDown()
}

func compareResults(nodeContent: String?, referenceContent: String?) {
guard let nodeContent = nodeContent else {
XCTFail("nodeContent is empty")
return
}
guard let referenceContent = referenceContent else {
XCTFail("referenceContent is empty")
return
}

if nodeContent != referenceContent {
XCTFail("nodeContent is not equal to referenceContent" + TestUtils.prettyFirstDifferenceBetweenStrings(s1: nodeContent, s2: referenceContent))
}
}

func validate(node: Node, referenceFile: String) {
let bundle = Bundle(for: type(of: TestUtils()))

do {
if let path = bundle.path(forResource: referenceFile, ofType: "reference") {
let clipReferenceContent = try String.init(contentsOfFile: path).trimmingCharacters(in: .newlines)
let result = SVGSerializer.serialize(node: node)
XCTAssertEqual(result, clipReferenceContent)
compareResults(nodeContent: result, referenceContent: clipReferenceContent)
} else {
XCTFail("No file \(referenceFile)")
}
Expand Down Expand Up @@ -192,13 +207,10 @@ class MacawSVGTests: XCTestCase {
let bundle = Bundle(for: type(of: TestUtils()))
do {
if let path = bundle.path(forResource: referenceFile, ofType: "reference") {

let referenceContent = try String(contentsOfFile: path)

let nodeContent = String(data: getJSONData(node: node), encoding: String.Encoding.utf8)

if nodeContent != referenceContent {
XCTFail("nodeContent is not equal to referenceContent")
}
compareResults(nodeContent: nodeContent, referenceContent: referenceContent)

let nativeImage = getImage(from: referenceFile)

Expand Down Expand Up @@ -261,9 +273,9 @@ class MacawSVGTests: XCTestCase {

if referenceContentData != nodeContentData {

var failInfo = "referenceContentData is not equal to nodeContentData"
var failInfo = "referenceImageData is not equal to nodeImageData"

if shouldSaveFaildedTestImage {
if shouldSaveFailedTestImage {
let _ = saveImage(image: referenceImage, fileName: referenceFile + "_reference")
let _ = saveImage(image: nodeImage, fileName: referenceFile + "_incorrect")

Expand Down Expand Up @@ -314,7 +326,7 @@ class MacawSVGTests: XCTestCase {
}

func writeToFile(string: String, fileName: String) -> URL? {
guard let directory = try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false) as NSURL else {
guard let directory = try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true) as NSURL else {
return .none
}
do {
Expand Down
129 changes: 129 additions & 0 deletions MacawTests/TestUtils.swift
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,133 @@ class TestUtils {
return result
}

class func prettyFirstDifferenceBetweenStrings(s1: String, s2: String) -> String {
return prettyFirstDifferenceBetweenNSStrings(s1: s1 as NSString, s2: s2 as NSString) as String
}

}

/// Find first differing character between two strings
///
/// :param: s1 First String
/// :param: s2 Second String
///
/// :returns: .DifferenceAtIndex(i) or .NoDifference
fileprivate func firstDifferenceBetweenStrings(s1: NSString, s2: NSString) -> FirstDifferenceResult {
let len1 = s1.length
let len2 = s2.length

let lenMin = min(len1, len2)

for i in 0..<lenMin {
if s1.character(at: i) != s2.character(at: i) {
return .DifferenceAtIndex(i)
}
}

if len1 < len2 {
return .DifferenceAtIndex(len1)
}

if len2 < len1 {
return .DifferenceAtIndex(len2)
}

return .NoDifference
}


/// Create a formatted String representation of difference between strings
///
/// :param: s1 First string
/// :param: s2 Second string
///
/// :returns: a string, possibly containing significant whitespace and newlines
fileprivate func prettyFirstDifferenceBetweenNSStrings(s1: NSString, s2: NSString) -> NSString {
let firstDifferenceResult = firstDifferenceBetweenStrings(s1: s1, s2: s2)
return prettyDescriptionOfFirstDifferenceResult(firstDifferenceResult: firstDifferenceResult, s1: s1, s2: s2)
}


/// Create a formatted String representation of a FirstDifferenceResult for two strings
///
/// :param: firstDifferenceResult FirstDifferenceResult
/// :param: s1 First string used in generation of firstDifferenceResult
/// :param: s2 Second string used in generation of firstDifferenceResult
///
/// :returns: a printable string, possibly containing significant whitespace and newlines
fileprivate func prettyDescriptionOfFirstDifferenceResult(firstDifferenceResult: FirstDifferenceResult, s1: NSString, s2: NSString) -> NSString {

func diffString(index: Int, s1: NSString, s2: NSString) -> NSString {
let markerArrow = "\u{2b06}" // "⬆"
let ellipsis = "\u{2026}" // "…"
/// Given a string and a range, return a string representing that substring.
///
/// If the range starts at a position other than 0, an ellipsis
/// will be included at the beginning.
///
/// If the range ends before the actual end of the string,
/// an ellipsis is added at the end.
func windowSubstring(s: NSString, range: NSRange) -> String {
let validRange = NSMakeRange(range.location, min(range.length, s.length - range.location))
let substring = s.substring(with: validRange)

let prefix = range.location > 0 ? ellipsis : ""
let suffix = (s.length - range.location > range.length) ? ellipsis : ""

return "\(prefix)\(substring)\(suffix)"
}

// Show this many characters before and after the first difference
let windowPrefixLength = 10
let windowSuffixLength = 10
let windowLength = windowPrefixLength + 1 + windowSuffixLength

let windowIndex = max(index - windowPrefixLength, 0)
let windowRange = NSMakeRange(windowIndex, windowLength)

let sub1 = windowSubstring(s: s1, range: windowRange)
let sub2 = windowSubstring(s: s2, range: windowRange)

let markerPosition = min(windowSuffixLength, index) + (windowIndex > 0 ? 1 : 0)

let markerPrefix = String(repeating: " ", count: markerPosition)
let markerLine = "\(markerPrefix)\(markerArrow)"

return "Difference at index \(index):\n\(sub1)\n\(sub2)\n\(markerLine)" as NSString
}

switch firstDifferenceResult {
case .NoDifference: return "No difference"
case .DifferenceAtIndex(let index): return diffString(index: index, s1: s1, s2: s2)
}
}

/// Result type for firstDifferenceBetweenStrings()
public enum FirstDifferenceResult {
/// Strings are identical
case NoDifference

/// Strings differ at the specified index.
///
/// This could mean that characters at the specified index are different,
/// or that one string is longer than the other
case DifferenceAtIndex(Int)
}

extension FirstDifferenceResult: CustomStringConvertible {
/// Textual representation of a FirstDifferenceResult
public var description: String {
switch self {
case .NoDifference:
return "NoDifference"
case .DifferenceAtIndex(let index):
return "DifferenceAtIndex(\(index))"
}
}

/// Textual representation of a FirstDifferenceResult for debugging purposes
public var debugDescription: String {
return self.description
}
}
Binary file modified MacawTests/png/color-prop-01-b-manual.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified MacawTests/png/color-prop-03-t-manual.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified MacawTests/png/color-prop-04-t-manual-osx.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified MacawTests/png/color-prop-05-t-manual.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified MacawTests/png/coords-coord-01-t-manual.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified MacawTests/png/coords-coord-02-t-manual.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified MacawTests/png/coords-trans-01-b-manual.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified MacawTests/png/coords-trans-02-t-manual.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified MacawTests/png/coords-trans-03-t-manual.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified MacawTests/png/coords-trans-04-t-manual.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified MacawTests/png/coords-trans-05-t-manual.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified MacawTests/png/coords-trans-06-t-manual.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified MacawTests/png/coords-trans-07-t-manual.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified MacawTests/png/coords-trans-08-t-manual.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified MacawTests/png/coords-trans-09-t-manual.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified MacawTests/png/coords-trans-10-f-manual.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified MacawTests/png/coords-trans-11-f-manual.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified MacawTests/png/coords-trans-12-f-manual.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified MacawTests/png/coords-trans-13-f-manual.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified MacawTests/png/coords-trans-14-f-manual.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified MacawTests/png/coords-transformattr-01-f-manual.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified MacawTests/png/coords-transformattr-02-f-manual.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified MacawTests/png/coords-transformattr-03-f-manual.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified MacawTests/png/coords-transformattr-04-f-manual.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified MacawTests/png/coords-transformattr-05-f-manual.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified MacawTests/png/masking-filter-01-f-manual.png
Binary file modified MacawTests/png/masking-intro-01-f-manual.png
Binary file modified MacawTests/png/masking-mask-02-f-manual.png
Binary file modified MacawTests/png/masking-path-02-b-manual.png
Binary file modified MacawTests/png/masking-path-13-f-manual.png
Binary file modified MacawTests/png/metadata-example-01-t-manual.png
Binary file modified MacawTests/png/painting-control-01-f-manual.png
Binary file modified MacawTests/png/painting-control-02-f-manual.png
Binary file modified MacawTests/png/painting-control-03-f-manual.png
Binary file modified MacawTests/png/painting-control-06-f-manual.png
Binary file modified MacawTests/png/painting-fill-01-t-manual.png
Binary file modified MacawTests/png/painting-fill-02-t-manual.png
Binary file modified MacawTests/png/painting-fill-03-t-manual.png
Binary file modified MacawTests/png/painting-fill-04-t-manual.png
Binary file modified MacawTests/png/painting-fill-05-b-manual.png
Binary file modified MacawTests/png/painting-stroke-01-t-manual.png
Binary file modified MacawTests/png/painting-stroke-02-t-manual.png
Binary file modified MacawTests/png/painting-stroke-03-t-manual.png
Binary file modified MacawTests/png/painting-stroke-04-t-manual.png
Binary file modified MacawTests/png/painting-stroke-05-t-manual.png
Binary file modified MacawTests/png/painting-stroke-06-t-manual.png
Binary file modified MacawTests/png/painting-stroke-07-t-manual.png
Binary file modified MacawTests/png/painting-stroke-08-t-manual.png
Binary file modified MacawTests/png/painting-stroke-09-t-manual.png
Binary file modified MacawTests/png/paths-data-01-t-manual.png
Binary file modified MacawTests/png/paths-data-02-t-manual.png
Binary file modified MacawTests/png/paths-data-03-f-manual.png
Binary file modified MacawTests/png/paths-data-04-t-manual.png
Binary file modified MacawTests/png/paths-data-05-t-manual.png
Binary file modified MacawTests/png/paths-data-06-t-manual.png
Binary file modified MacawTests/png/paths-data-07-t-manual.png
Binary file modified MacawTests/png/paths-data-08-t-manual.png
Binary file modified MacawTests/png/paths-data-09-t-manual.png
Binary file modified MacawTests/png/paths-data-10-t-manual.png
Binary file modified MacawTests/png/paths-data-12-t-manual.png
Binary file modified MacawTests/png/paths-data-13-t-manual.png
Binary file modified MacawTests/png/paths-data-14-t-manual.png
Binary file modified MacawTests/png/paths-data-15-t-manual.png
Binary file modified MacawTests/png/paths-data-16-t-manual.png
Binary file modified MacawTests/png/paths-data-17-f-manual.png
Binary file modified MacawTests/png/paths-data-18-f-manual.png
Binary file modified MacawTests/png/paths-data-19-f-manual.png
Binary file modified MacawTests/png/paths-data-20-f-manual.png
Binary file modified MacawTests/png/pservers-grad-01-b-manual.png
Binary file modified MacawTests/png/pservers-grad-02-b-manual.png
Binary file modified MacawTests/png/pservers-grad-03-b-manual.png
Binary file modified MacawTests/png/pservers-grad-07-b-manual.png
Binary file modified MacawTests/png/pservers-grad-09-b-manual.png
Binary file modified MacawTests/png/pservers-grad-12-b-manual.png
Binary file modified MacawTests/png/pservers-grad-13-b-manual.png
Binary file modified MacawTests/png/pservers-grad-15-b-manual.png
Binary file modified MacawTests/png/pservers-grad-22-b-manual.png
Binary file modified MacawTests/png/pservers-grad-23-f-manual.png
Binary file modified MacawTests/png/pservers-grad-24-f-manual.png
Binary file modified MacawTests/png/pservers-grad-stops-01-f-manual.png
Binary file modified MacawTests/png/render-elems-01-t-manual.png
Binary file modified MacawTests/png/render-elems-02-t-manual.png
Binary file modified MacawTests/png/render-elems-03-t-manual.png
Binary file modified MacawTests/png/shapes-circle-01-t-manual.png
Binary file modified MacawTests/png/shapes-circle-02-t-manual.png
Binary file modified MacawTests/png/shapes-ellipse-01-t-manual.png
Binary file modified MacawTests/png/shapes-ellipse-02-t-manual.png
Binary file modified MacawTests/png/shapes-ellipse-03-f-manual.png
Binary file modified MacawTests/png/shapes-grammar-01-f-manual.png
Binary file modified MacawTests/png/shapes-intro-01-t-manual.png
Binary file modified MacawTests/png/shapes-line-01-t-manual.png
Binary file modified MacawTests/png/shapes-line-02-f-manual.png
Binary file modified MacawTests/png/shapes-polygon-01-t-manual.png
Binary file modified MacawTests/png/shapes-polygon-02-t-manual.png
Binary file modified MacawTests/png/shapes-polygon-03-t-manual.png
Binary file modified MacawTests/png/shapes-polyline-01-t-manual.png
Binary file modified MacawTests/png/shapes-polyline-02-t-manual.png
Binary file modified MacawTests/png/shapes-rect-02-t-manual.png
Binary file modified MacawTests/png/shapes-rect-03-t-manual.png
Binary file modified MacawTests/png/shapes-rect-04-f-manual.png
Binary file modified MacawTests/png/shapes-rect-05-f-manual.png
Binary file modified MacawTests/png/shapes-rect-06-f-manual.png
Binary file modified MacawTests/png/shapes-rect-07-f-manual.png
Binary file modified MacawTests/png/struct-defs-01-t-manual.png
Binary file modified MacawTests/png/struct-frag-02-t-manual.png
Binary file modified MacawTests/png/struct-frag-03-t-manual.png
Binary file modified MacawTests/png/struct-frag-04-t-manual.png
Binary file modified MacawTests/png/struct-frag-06-t-manual.png
Binary file modified MacawTests/png/struct-group-01-t-manual.png
Binary file modified MacawTests/png/struct-use-01-t-manual.png
Binary file modified MacawTests/png/struct-use-03-t-manual.png
Binary file modified MacawTests/png/struct-use-12-f-manual.png
Binary file modified MacawTests/png/text-align-01-b-manual.png
Binary file modified MacawTests/png/text-fonts-01-t-manual.png
Binary file modified MacawTests/png/text-fonts-02-t-manual.png
Binary file modified MacawTests/png/types-basic-01-f-manual.png
2 changes: 1 addition & 1 deletion MacawTests/svg/textBasicTransform.reference
Original file line number Diff line number Diff line change
@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" ><g><g transform="translate(100,100)" ><text dominant-baseline="text-before-edge" fill="black" transform="matrix(0.707106781186548,-0.707106781186547,0.707106781186547,0.707106781186548,0,0)" >Point</text></g></g></svg>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" ><g><g transform="translate(100,100)" ><text dominant-baseline="text-before-edge" fill="black" transform="matrix(0.707107,-0.707107,0.707107,0.707107,0,0)" >Point</text></g></g></svg>
2 changes: 1 addition & 1 deletion MacawTests/w3cSVGTests/coords-trans-05-t-manual.reference
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
}
],
"node" : "Group",
"place" : "7.5, 0, 0, 5, 125.000002, 525"
"place" : "7.5, 0, 0, 5, 125.000003, 525"
}
],
"node" : "Group",
Expand Down
4 changes: 2 additions & 2 deletions MacawTests/w3cSVGTests/coords-trans-07-t-manual.reference
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
}
],
"node" : "Group",
"place" : ".866025, .5, -.5, .866025, 123.205081, 186.60254"
"place" : "0.866025, 0.5, -0.5, 0.866025, 123.205081, 186.60254"
},
{
"align" : "min",
Expand Down Expand Up @@ -86,7 +86,7 @@
}
],
"node" : "Group",
"place" : ".866025, .5, -.5, .866025, 200, 100"
"place" : "0.866025, 0.5, -0.5, 0.866025, 200, 100"
},
{
"align" : "min",
Expand Down
6 changes: 3 additions & 3 deletions MacawTests/w3cSVGTests/coords-trans-09-t-manual.reference
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@
}
],
"node" : "Group",
"place" : "1, 0, .5, 1, 30, 170"
"place" : "1, 0, 0.5, 1, 30, 170"
},
{
"align" : "min",
Expand Down Expand Up @@ -236,7 +236,7 @@
}
],
"node" : "Group",
"place" : "1, .5, 0, 1, 100, 200"
"place" : "1, 0.5, 0, 1, 100, 200"
},
{
"align" : "min",
Expand Down Expand Up @@ -336,7 +336,7 @@
}
],
"node" : "Group",
"place" : "1, .8, .8, 1, 300, 220"
"place" : "1, 0.8, 0.8, 1, 300, 220"
},
{
"align" : "min",
Expand Down
2 changes: 1 addition & 1 deletion MacawTests/w3cSVGTests/coords-trans-14-f-manual.reference
Original file line number Diff line number Diff line change
Expand Up @@ -564,7 +564,7 @@
}
],
"node" : "Group",
"place" : ".704769, -.256515, .256515, .704769, 0, 0"
"place" : "0.704769, -0.256515, 0.256515, 0.704769, 0, 0"
}
],
"node" : "Group"
Expand Down
Loading