Index: Tools/TestWebKitAPI/Tests/JavaScriptCore/VMInspector.cpp |
diff --git a/Tools/TestWebKitAPI/Tests/JavaScriptCore/VMInspector.cpp b/Tools/TestWebKitAPI/Tests/JavaScriptCore/VMInspector.cpp |
deleted file mode 100644 |
index b1c1bacf3f79063cf78a7b2bc5b0fd7596c77499..0000000000000000000000000000000000000000 |
--- a/Tools/TestWebKitAPI/Tests/JavaScriptCore/VMInspector.cpp |
+++ /dev/null |
@@ -1,689 +0,0 @@ |
-/* |
- * Copyright (C) 2012 Apple Inc. All rights reserved. |
- * |
- * Redistribution and use in source and binary forms, with or without |
- * modification, are permitted provided that the following conditions |
- * are met: |
- * 1. Redistributions of source code must retain the above copyright |
- * notice, this list of conditions and the following disclaimer. |
- * 2. Redistributions in binary form must reproduce the above copyright |
- * notice, this list of conditions and the following disclaimer in the |
- * documentation and/or other materials provided with the distribution. |
- * |
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' |
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, |
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS |
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF |
- * THE POSSIBILITY OF SUCH DAMAGE. |
- */ |
- |
-#include "config.h" |
- |
-#include <interpreter/VMInspector.h> |
-#include <stdarg.h> |
-#include <stdio.h> |
- |
-using namespace JSC; |
- |
-// There's not much we can test for the VMInspector::printf() case except to |
-// make sure it does not crash. Unfortunately, we also don't want all the |
-// test strings crowding out stdout. So, we forego the printf tests. |
-// NOTE that the most interesting part of VMInspector::printf() is the |
-// formatting functionality, and it is are already being tested by the |
-// fprintf() and sprintf() cases. |
- |
- |
-// The VMInspector::fprintf() test works by printing the string to a temp file, |
-// and then reading the file content back into a buffer, which we, in turn, |
-// compare against the expected string. |
- |
-TEST(JSC, VMInspectorFprintf) |
-{ |
-#if ENABLE(VMINSPECTOR) |
- char actual[1024]; |
- char expected[1024]; |
- const char* format; |
- const char* expectedLiteral; |
- FILE* file; |
- const char* filename = "/tmp/VMInspectorFprintfTest.txt"; |
- size_t size; |
- |
-#define OPEN_FILE(file) \ |
- do { \ |
- file = fopen(filename, "w"); \ |
- } while (false) |
- |
-#define READ_AND_CLOSE_FILE(file, actual) \ |
- do { \ |
- fclose(file); \ |
- file = fopen(filename, "r"); \ |
- fseek(file, 0, SEEK_END); \ |
- size = ftell(file); \ |
- rewind(file); \ |
- fread(actual, 1, size, file); \ |
- actual[size] = '\0'; \ |
- fclose(file); \ |
- } while (false) |
- |
- // Testing standard default format specifiers: |
- // Note: should work just like sprintf. So, we just compare against that. |
- memset(actual, 'z', sizeof(actual)); |
- // The compiler warning flags are configured to expect a literal string for |
- // ::sprintf below. So, use a #define for this one case to keep the |
- // compiler happy. |
-#undef LITERAL_FORMAT |
-#define LITERAL_FORMAT "'%%%%' ==> '%%'\n" |
- |
- OPEN_FILE(file); |
- VMInspector::fprintf(file, LITERAL_FORMAT); |
- READ_AND_CLOSE_FILE(file, actual); |
- ::sprintf(expected, LITERAL_FORMAT); |
- |
-#undef LITERAL_FORMAT |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%c', 'x' ==> '%c'\n"; |
- OPEN_FILE(file); |
- VMInspector::fprintf(file, format, 'x'); |
- READ_AND_CLOSE_FILE(file, actual); |
- ::sprintf(expected, format, 'x'); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%*c', 8, 'x' ==> '%*c'\n"; |
- OPEN_FILE(file); |
- VMInspector::fprintf(file, format, 8, 'x'); |
- READ_AND_CLOSE_FILE(file, actual); |
- ::sprintf(expected, format, 8, 'x'); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%s', \"hello world\" ==> '%s'\n"; |
- OPEN_FILE(file); |
- VMInspector::fprintf(file, format, "hello world"); |
- READ_AND_CLOSE_FILE(file, actual); |
- ::sprintf(expected, format, "hello world"); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%*s', 8, \"hello world\" ==> '%*s'\n"; |
- OPEN_FILE(file); |
- VMInspector::fprintf(file, format, 8, "hello world"); |
- READ_AND_CLOSE_FILE(file, actual); |
- ::sprintf(expected, format, 8, "hello world"); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%*s', 8, \"hello\" ==> '%*s'\n"; |
- OPEN_FILE(file); |
- VMInspector::fprintf(file, format, 8, "hello"); |
- READ_AND_CLOSE_FILE(file, actual); |
- ::sprintf(expected, format, 8, "hello"); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%d', 987654321 ==> '%d'\n"; |
- OPEN_FILE(file); |
- VMInspector::fprintf(file, format, 987654321); |
- READ_AND_CLOSE_FILE(file, actual); |
- ::sprintf(expected, format, 987654321); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%u', 4276543210u ==> '%u'\n"; |
- OPEN_FILE(file); |
- VMInspector::fprintf(file, format, 4276543210u); |
- READ_AND_CLOSE_FILE(file, actual); |
- ::sprintf(expected, format, 4276543210u); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%u', 0xffffffff ==> '%u'\n"; |
- OPEN_FILE(file); |
- VMInspector::fprintf(file, format, 0xffffffff); |
- READ_AND_CLOSE_FILE(file, actual); |
- ::sprintf(expected, format, 0xffffffff); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%x', 0xffffffff ==> '%x'\n"; |
- OPEN_FILE(file); |
- VMInspector::fprintf(file, format, 0xffffffff); |
- READ_AND_CLOSE_FILE(file, actual); |
- ::sprintf(expected, format, 0xffffffff); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%p', (void*)0xabcdbabe ==> '%p'\n"; |
- OPEN_FILE(file); |
- VMInspector::fprintf(file, format, (void*)0xabcdbabe); |
- READ_AND_CLOSE_FILE(file, actual); |
- ::sprintf(expected, format, (void*)0xabcdbabe); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%lu', 1234567890987654321ul ==> '%lu'\n"; |
- OPEN_FILE(file); |
- VMInspector::fprintf(file, format, 1234567890987654321ul); |
- READ_AND_CLOSE_FILE(file, actual); |
- ::sprintf(expected, format, 1234567890987654321ul); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%f', 1234.567 ==> '%f'\n"; |
- OPEN_FILE(file); |
- VMInspector::fprintf(file, format, 1234.567); |
- READ_AND_CLOSE_FILE(file, actual); |
- ::sprintf(expected, format, 1234.567); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%.2f', 1234.567 ==> '%.2f'\n"; |
- OPEN_FILE(file); |
- VMInspector::fprintf(file, format, 1234.567); |
- READ_AND_CLOSE_FILE(file, actual); |
- ::sprintf(expected, format, 1234.567); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%10.2f', 1234.567 ==> '%10.2f'\n"; |
- OPEN_FILE(file); |
- VMInspector::fprintf(file, format, 1234.567); |
- READ_AND_CLOSE_FILE(file, actual); |
- ::sprintf(expected, format, 1234.567); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%010.2f', 1234.567 ==> '%010.2f'\n"; |
- OPEN_FILE(file); |
- VMInspector::fprintf(file, format, 1234.567); |
- READ_AND_CLOSE_FILE(file, actual); |
- ::sprintf(expected, format, 1234.567); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- // Bad / weird formats: |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%5.4', 987654321 ==> '%5.4'\n"; |
- OPEN_FILE(file); |
- VMInspector::fprintf(file, format, 987654321); |
- READ_AND_CLOSE_FILE(file, actual); |
- expectedLiteral = "'%5.4', 987654321 ==> 'ERROR @ \"%5.4' \"\n"; |
- ASSERT_EQ(strcmp(actual, expectedLiteral), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%5.4' '%%d', 987654321, 4 ==> '%5.4' '%d'\n"; |
- OPEN_FILE(file); |
- VMInspector::fprintf(file, format, 987654321, 4); |
- READ_AND_CLOSE_FILE(file, actual); |
- ::sprintf(expected, format, 987654321, 4); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%w' '%%d', 987654321, 6 ==> '%w' '%d'\n"; |
- OPEN_FILE(file); |
- VMInspector::fprintf(file, format, 987654321, 6); |
- READ_AND_CLOSE_FILE(file, actual); |
- ::sprintf(expected, format, 987654321, 6); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- |
- // Testing the %b extension: |
- memset(actual, 'z', sizeof(actual)); |
- OPEN_FILE(file); |
- VMInspector::fprintf(file, "'%%b', 0 ==> '%b'\n", 0); |
- READ_AND_CLOSE_FILE(file, actual); |
- ASSERT_EQ(strcmp(actual, "'%b', 0 ==> 'FALSE'\n"), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- OPEN_FILE(file); |
- VMInspector::fprintf(file, "'%%b', 1 ==> '%b'\n", 1); |
- READ_AND_CLOSE_FILE(file, actual); |
- ASSERT_EQ(strcmp(actual, "'%b', 1 ==> 'TRUE'\n"), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- OPEN_FILE(file); |
- VMInspector::fprintf(file, "'%%b', -123456789 ==> '%b'\n", -123456789); |
- READ_AND_CLOSE_FILE(file, actual); |
- ASSERT_EQ(strcmp(actual, "'%b', -123456789 ==> 'TRUE'\n"), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- OPEN_FILE(file); |
- VMInspector::fprintf(file, "'%%b', 123456789 ==> '%b'\n", 123456789); |
- READ_AND_CLOSE_FILE(file, actual); |
- ASSERT_EQ(strcmp(actual, "'%b', 123456789 ==> 'TRUE'\n"), 0); |
- |
- |
- // Testing the %J<x> extensions: |
- String str1("Test WTF String"); |
- String str2(""); |
- |
- memset(actual, 'z', sizeof(actual)); |
- OPEN_FILE(file); |
- VMInspector::fprintf(file, "'%%Js' is %%s, &str1, str1.isEmpty()?\"EMPTY\":\"NOT EMPTY\" ==> '%Js' is %s\n", |
- &str1, str1.isEmpty() ? "EMPTY" : "NOT EMPTY"); |
- READ_AND_CLOSE_FILE(file, actual); |
- expectedLiteral = "'%Js' is %s, &str1, str1.isEmpty()?\"EMPTY\":\"NOT EMPTY\" ==> 'Test WTF String' is NOT EMPTY\n"; |
- ASSERT_EQ(strcmp(actual, expectedLiteral), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- OPEN_FILE(file); |
- VMInspector::fprintf(file, "'%%Js' is %%s, &str2, str2.isEmpty()?\"EMPTY\":\"NOT EMPTY\" ==> '%Js' is %s\n", |
- &str2, str2.isEmpty() ? "EMPTY" : "NOT EMPTY"); |
- READ_AND_CLOSE_FILE(file, actual); |
- expectedLiteral = "'%Js' is %s, &str2, str2.isEmpty()?\"EMPTY\":\"NOT EMPTY\" ==> '' is EMPTY\n"; |
- ASSERT_EQ(strcmp(actual, expectedLiteral), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- OPEN_FILE(file); |
- VMInspector::fprintf(file, "'%%J+s' is %%s, &str1, str1.isEmpty()?\"EMPTY\":\"NOT EMPTY\" ==> '%J+s' is %s\n", |
- &str1, str1.isEmpty() ? "EMPTY" : "NOT EMPTY"); |
- READ_AND_CLOSE_FILE(file, actual); |
- expectedLiteral = "'%J+s' is %s, &str1, str1.isEmpty()?\"EMPTY\":\"NOT EMPTY\" ==> 'WTF::String \"Test WTF String\"' is NOT EMPTY\n"; |
- ASSERT_EQ(strcmp(actual, expectedLiteral), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- OPEN_FILE(file); |
- VMInspector::fprintf(file, "'%%J+s' is %%s, &str2, str2.isEmpty()?\"EMPTY\":\"NOT EMPTY\" ==> '%J+s' is %s\n", |
- &str2, str2.isEmpty() ? "EMPTY" : "NOT EMPTY"); |
- READ_AND_CLOSE_FILE(file, actual); |
- expectedLiteral = "'%J+s' is %s, &str2, str2.isEmpty()?\"EMPTY\":\"NOT EMPTY\" ==> 'WTF::String \"\"' is EMPTY\n"; |
- ASSERT_EQ(strcmp(actual, expectedLiteral), 0); |
- |
-#undef OPEN_FILE |
-#undef READ_AND_CLOSE_FILE |
- |
-#endif |
-} |
- |
- |
-TEST(JSC, VMInspectorSprintf) |
-{ |
-#if ENABLE(VMINSPECTOR) |
- char actual[1024]; |
- char expected[1024]; |
- const char* format; |
- const char* expectedLiteral; |
- |
- // Testing standard default format specifiers: |
- // Note: should work just like sprintf. So, we just compare against that. |
- memset(actual, 'z', sizeof(actual)); |
- // The compiler warning flags are configured to expect a literal string for |
- // ::sprintf below. So, use a #define for this one case to keep the |
- // compiler happy. |
-#undef LITERAL_FORMAT |
-#define LITERAL_FORMAT "'%%%%' ==> '%%'\n" |
- VMInspector::sprintf(actual, LITERAL_FORMAT); |
- ::sprintf(expected, LITERAL_FORMAT); |
-#undef LITERAL_FORMAT |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%c', 'x' ==> '%c'\n"; |
- VMInspector::sprintf(actual, format, 'x'); |
- ::sprintf(expected, format, 'x'); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%*c', 8, 'x' ==> '%*c'\n"; |
- VMInspector::sprintf(actual, format, 8, 'x'); |
- ::sprintf(expected, format, 8, 'x'); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%s', \"hello world\" ==> '%s'\n"; |
- VMInspector::sprintf(actual, format, "hello world"); |
- ::sprintf(expected, format, "hello world"); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%*s', 8, \"hello world\" ==> '%*s'\n"; |
- VMInspector::sprintf(actual, format, 8, "hello world"); |
- ::sprintf(expected, format, 8, "hello world"); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%*s', 8, \"hello\" ==> '%*s'\n"; |
- VMInspector::sprintf(actual, format, 8, "hello"); |
- ::sprintf(expected, format, 8, "hello"); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%d', 987654321 ==> '%d'\n"; |
- VMInspector::sprintf(actual, format, 987654321); |
- ::sprintf(expected, format, 987654321); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%u', 4276543210u ==> '%u'\n"; |
- VMInspector::sprintf(actual, format, 4276543210u); |
- ::sprintf(expected, format, 4276543210u); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%u', 0xffffffff ==> '%u'\n"; |
- VMInspector::sprintf(actual, format, 0xffffffff); |
- ::sprintf(expected, format, 0xffffffff); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%x', 0xffffffff ==> '%x'\n"; |
- VMInspector::sprintf(actual, format, 0xffffffff); |
- ::sprintf(expected, format, 0xffffffff); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%p', (void*)0xabcdbabe ==> '%p'\n"; |
- VMInspector::sprintf(actual, format, (void*)0xabcdbabe); |
- ::sprintf(expected, format, (void*)0xabcdbabe); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%lu', 1234567890987654321ul ==> '%lu'\n"; |
- VMInspector::sprintf(actual, format, 1234567890987654321ul); |
- ::sprintf(expected, format, 1234567890987654321ul); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%f', 1234.567 ==> '%f'\n"; |
- VMInspector::sprintf(actual, format, 1234.567); |
- ::sprintf(expected, format, 1234.567); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%.2f', 1234.567 ==> '%.2f'\n"; |
- VMInspector::sprintf(actual, format, 1234.567); |
- ::sprintf(expected, format, 1234.567); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%10.2f', 1234.567 ==> '%10.2f'\n"; |
- VMInspector::sprintf(actual, format, 1234.567); |
- ::sprintf(expected, format, 1234.567); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%010.2f', 1234.567 ==> '%010.2f'\n"; |
- VMInspector::sprintf(actual, format, 1234.567); |
- ::sprintf(expected, format, 1234.567); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- // Bad / weird formats: |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%5.4', 987654321 ==> '%5.4'\n"; |
- VMInspector::sprintf(actual, format, 987654321); |
- expectedLiteral = "'%5.4', 987654321 ==> 'ERROR @ \"%5.4' \"\n"; |
- ASSERT_EQ(strcmp(actual, expectedLiteral), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%5.4' '%%d', 987654321, 4 ==> '%5.4' '%d'\n"; |
- VMInspector::sprintf(actual, format, 987654321, 4); |
- ::sprintf(expected, format, 987654321, 4); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%w' '%%d', 987654321, 6 ==> '%w' '%d'\n"; |
- VMInspector::sprintf(actual, format, 987654321, 6); |
- ::sprintf(expected, format, 987654321, 6); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- |
- // Testing the %b extension: |
- memset(actual, 'z', sizeof(actual)); |
- VMInspector::sprintf(actual, "'%%b', 0 ==> '%b'\n", 0); |
- ASSERT_EQ(strcmp(actual, "'%b', 0 ==> 'FALSE'\n"), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- VMInspector::sprintf(actual, "'%%b', 1 ==> '%b'\n", 1); |
- ASSERT_EQ(strcmp(actual, "'%b', 1 ==> 'TRUE'\n"), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- VMInspector::sprintf(actual, "'%%b', -123456789 ==> '%b'\n", -123456789); |
- ASSERT_EQ(strcmp(actual, "'%b', -123456789 ==> 'TRUE'\n"), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- VMInspector::sprintf(actual, "'%%b', 123456789 ==> '%b'\n", 123456789); |
- ASSERT_EQ(strcmp(actual, "'%b', 123456789 ==> 'TRUE'\n"), 0); |
- |
- |
- // Testing the %J<x> extensions: |
- String str1("Test WTF String"); |
- String str2(""); |
- |
- memset(actual, 'z', sizeof(actual)); |
- VMInspector::sprintf(actual, "'%%Js' is %%s, &str1, str1.isEmpty()?\"EMPTY\":\"NOT EMPTY\" ==> '%Js' is %s\n", |
- &str1, str1.isEmpty() ? "EMPTY" : "NOT EMPTY"); |
- expectedLiteral = "'%Js' is %s, &str1, str1.isEmpty()?\"EMPTY\":\"NOT EMPTY\" ==> 'Test WTF String' is NOT EMPTY\n"; |
- ASSERT_EQ(strcmp(actual, expectedLiteral), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- VMInspector::sprintf(actual, "'%%Js' is %%s, &str2, str2.isEmpty()?\"EMPTY\":\"NOT EMPTY\" ==> '%Js' is %s\n", |
- &str2, str2.isEmpty() ? "EMPTY" : "NOT EMPTY"); |
- expectedLiteral = "'%Js' is %s, &str2, str2.isEmpty()?\"EMPTY\":\"NOT EMPTY\" ==> '' is EMPTY\n"; |
- ASSERT_EQ(strcmp(actual, expectedLiteral), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- VMInspector::sprintf(actual, "'%%J+s' is %%s, &str1, str1.isEmpty()?\"EMPTY\":\"NOT EMPTY\" ==> '%J+s' is %s\n", |
- &str1, str1.isEmpty() ? "EMPTY" : "NOT EMPTY"); |
- expectedLiteral = "'%J+s' is %s, &str1, str1.isEmpty()?\"EMPTY\":\"NOT EMPTY\" ==> 'WTF::String \"Test WTF String\"' is NOT EMPTY\n"; |
- ASSERT_EQ(strcmp(actual, expectedLiteral), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- VMInspector::sprintf(actual, "'%%J+s' is %%s, &str2, str2.isEmpty()?\"EMPTY\":\"NOT EMPTY\" ==> '%J+s' is %s\n", |
- &str2, str2.isEmpty() ? "EMPTY" : "NOT EMPTY"); |
- expectedLiteral = "'%J+s' is %s, &str2, str2.isEmpty()?\"EMPTY\":\"NOT EMPTY\" ==> 'WTF::String \"\"' is EMPTY\n"; |
- ASSERT_EQ(strcmp(actual, expectedLiteral), 0); |
-#endif |
-} |
- |
- |
-TEST(JSC, VMInspectorSnprintf) |
-{ |
-#if ENABLE(VMINSPECTOR) |
- char actual[1024]; |
- char expected[1024]; |
- const char* format; |
- const char* expectedLiteral; |
- |
- size_t size = 1; |
- while (size <= 100) { |
- |
- // Testing standard default format specifiers: |
- // Note: should work just like snprintf. So, we just compare against that. |
- memset(actual, 'z', sizeof(actual)); |
- // The compiler warning flags are configured to expect a literal string for |
- // ::snprintf below. So, use a #define for this one case to keep the |
- // compiler happy. |
-#undef LITERAL_FORMAT |
-#define LITERAL_FORMAT "'%%%%' ==> '%%'\n" |
- VMInspector::snprintf(actual, size, LITERAL_FORMAT); |
- ::snprintf(expected, size, LITERAL_FORMAT); |
-#undef LITERAL_FORMAT |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%c', 'x' ==> '%c'\n"; |
- VMInspector::snprintf(actual, size, format, 'x'); |
- ::snprintf(expected, size, format, 'x'); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%*c', 8, 'x' ==> '%*c'\n"; |
- VMInspector::snprintf(actual, size, format, 8, 'x'); |
- ::snprintf(expected, size, format, 8, 'x'); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%s', \"hello world\" ==> '%s'\n"; |
- VMInspector::snprintf(actual, size, format, "hello world"); |
- ::snprintf(expected, size, format, "hello world"); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%*s', 8, \"hello world\" ==> '%*s'\n"; |
- VMInspector::snprintf(actual, size, format, 8, "hello world"); |
- ::snprintf(expected, size, format, 8, "hello world"); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%*s', 8, \"hello\" ==> '%*s'\n"; |
- VMInspector::snprintf(actual, size, format, 8, "hello"); |
- ::snprintf(expected, size, format, 8, "hello"); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%d', 987654321 ==> '%d'\n"; |
- VMInspector::snprintf(actual, size, format, 987654321); |
- ::snprintf(expected, size, format, 987654321); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%u', 4276543210u ==> '%u'\n"; |
- VMInspector::snprintf(actual, size, format, 4276543210u); |
- ::snprintf(expected, size, format, 4276543210u); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%u', 0xffffffff ==> '%u'\n"; |
- VMInspector::snprintf(actual, size, format, 0xffffffff); |
- ::snprintf(expected, size, format, 0xffffffff); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%x', 0xffffffff ==> '%x'\n"; |
- VMInspector::snprintf(actual, size, format, 0xffffffff); |
- ::snprintf(expected, size, format, 0xffffffff); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%p', (void*)0xabcdbabe ==> '%p'\n"; |
- VMInspector::snprintf(actual, size, format, (void*)0xabcdbabe); |
- ::snprintf(expected, size, format, (void*)0xabcdbabe); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%lu', 1234567890987654321ul ==> '%lu'\n"; |
- VMInspector::snprintf(actual, size, format, 1234567890987654321ul); |
- ::snprintf(expected, size, format, 1234567890987654321ul); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%f', 1234.567 ==> '%f'\n"; |
- VMInspector::snprintf(actual, size, format, 1234.567); |
- ::snprintf(expected, size, format, 1234.567); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%.2f', 1234.567 ==> '%.2f'\n"; |
- VMInspector::snprintf(actual, size, format, 1234.567); |
- ::snprintf(expected, size, format, 1234.567); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%10.2f', 1234.567 ==> '%10.2f'\n"; |
- VMInspector::snprintf(actual, size, format, 1234.567); |
- ::snprintf(expected, size, format, 1234.567); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%010.2f', 1234.567 ==> '%010.2f'\n"; |
- VMInspector::snprintf(actual, size, format, 1234.567); |
- ::snprintf(expected, size, format, 1234.567); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- // Bad / weird formats: |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%5.4', 987654321 ==> '%5.4'\n"; |
- VMInspector::snprintf(actual, size, format, 987654321); |
- expectedLiteral = "'%5.4', 987654321 ==> 'ERROR @ \"%5.4' \"\n"; |
- ::snprintf(expected, size, "%s", expectedLiteral); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%5.4' '%%d', 987654321, 4 ==> '%5.4' '%d'\n"; |
- VMInspector::snprintf(actual, size, format, 987654321, 4); |
- ::snprintf(expected, size, format, 987654321, 4); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- format = "'%%w' '%%d', 987654321, 6 ==> '%w' '%d'\n"; |
- VMInspector::snprintf(actual, size, format, 987654321, 6); |
- ::snprintf(expected, size, format, 987654321, 6); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- |
- // Testing the %b extension: |
- memset(actual, 'z', sizeof(actual)); |
- VMInspector::snprintf(actual, size, "'%%b', 0 ==> '%b'\n", 0); |
- expectedLiteral = "'%b', 0 ==> 'FALSE'\n"; |
- ::snprintf(expected, size, "%s", expectedLiteral); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- VMInspector::snprintf(actual, size, "'%%b', 1 ==> '%b'\n", 1); |
- expectedLiteral = "'%b', 1 ==> 'TRUE'\n"; |
- ::snprintf(expected, size, "%s", expectedLiteral); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- VMInspector::snprintf(actual, size, "'%%b', -123456789 ==> '%b'\n", -123456789); |
- expectedLiteral = "'%b', -123456789 ==> 'TRUE'\n"; |
- ::snprintf(expected, size, "%s", expectedLiteral); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- VMInspector::snprintf(actual, size, "'%%b', 123456789 ==> '%b'\n", 123456789); |
- expectedLiteral = "'%b', 123456789 ==> 'TRUE'\n"; |
- ::snprintf(expected, size, "%s", expectedLiteral); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- // Testing the %J<x> extensions: |
- String str1("Test WTF String"); |
- String str2(""); |
- |
- memset(actual, 'z', sizeof(actual)); |
- VMInspector::snprintf(actual, size, "'%%Js' is %%s, &str1, str1.isEmpty()?\"EMPTY\":\"NOT EMPTY\" ==> '%Js' is %s\n", |
- &str1, str1.isEmpty() ? "EMPTY" : "NOT EMPTY"); |
- expectedLiteral = "'%Js' is %s, &str1, str1.isEmpty()?\"EMPTY\":\"NOT EMPTY\" ==> 'Test WTF String' is NOT EMPTY\n"; |
- ::snprintf(expected, size, "%s", expectedLiteral); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- VMInspector::snprintf(actual, size, "'%%Js' is %%s, &str2, str2.isEmpty()?\"EMPTY\":\"NOT EMPTY\" ==> '%Js' is %s\n", |
- &str2, str2.isEmpty() ? "EMPTY" : "NOT EMPTY"); |
- expectedLiteral = "'%Js' is %s, &str2, str2.isEmpty()?\"EMPTY\":\"NOT EMPTY\" ==> '' is EMPTY\n"; |
- ::snprintf(expected, size, "%s", expectedLiteral); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- VMInspector::snprintf(actual, size, "'%%J+s' is %%s, &str1, str1.isEmpty()?\"EMPTY\":\"NOT EMPTY\" ==> '%J+s' is %s\n", |
- &str1, str1.isEmpty() ? "EMPTY" : "NOT EMPTY"); |
- expectedLiteral = "'%J+s' is %s, &str1, str1.isEmpty()?\"EMPTY\":\"NOT EMPTY\" ==> 'WTF::String \"Test WTF String\"' is NOT EMPTY\n"; |
- ::snprintf(expected, size, "%s", expectedLiteral); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- memset(actual, 'z', sizeof(actual)); |
- VMInspector::snprintf(actual, size, "'%%J+s' is %%s, &str2, str2.isEmpty()?\"EMPTY\":\"NOT EMPTY\" ==> '%J+s' is %s\n", |
- &str2, str2.isEmpty() ? "EMPTY" : "NOT EMPTY"); |
- expectedLiteral = "'%J+s' is %s, &str2, str2.isEmpty()?\"EMPTY\":\"NOT EMPTY\" ==> 'WTF::String \"\"' is EMPTY\n"; |
- ::snprintf(expected, size, "%s", expectedLiteral); |
- ASSERT_EQ(strcmp(actual, expected), 0); |
- |
- // Test lower sizes more densely, and then space out to larger sizes. |
- // We're doing this because the lower sizes might be interesting, but |
- // for expediency, we don't want to test at this fine grain resolution |
- // for all possible sizes. Hence, we accelerate the rate once we're |
- // pass the interesting small sizes. |
- if (size <= 5) |
- size++; |
- else |
- size += 4; |
- } |
-#endif |
-} |