forked from bblanchon/ArduinoJson
Compare commits
33 Commits
Author | SHA1 | Date | |
---|---|---|---|
77b7124cf1 | |||
6a608d4b49 | |||
01924618bd | |||
666e2fd0ce | |||
0cfc25d751 | |||
b6d8e6c989 | |||
ab2502f7b8 | |||
c57e6f3bd8 | |||
b54f1ffc1d | |||
bd0ea42277 | |||
7ae43bc4f8 | |||
056682327b | |||
8b66a25f66 | |||
96245dd3b4 | |||
9cc49da68a | |||
224918b463 | |||
cbeefa2503 | |||
6d68806633 | |||
ba3617c22f | |||
b7d9bb2765 | |||
74b42e2251 | |||
c0cf9c3fcc | |||
9f3ce18f06 | |||
b9e3255c9e | |||
e657396f65 | |||
929f608f2f | |||
c6a4bfa886 | |||
d5e25b12b8 | |||
7cf6fe6d62 | |||
155dd653e7 | |||
b5c8cd1766 | |||
4967e389c5 | |||
ffbaebd198 |
2
.gitignore
vendored
2
.gitignore
vendored
@ -4,3 +4,5 @@
|
|||||||
/bin
|
/bin
|
||||||
/lib
|
/lib
|
||||||
/sftp-config.json
|
/sftp-config.json
|
||||||
|
.tags
|
||||||
|
.tags_sorted_by_file
|
||||||
|
35
.travis.yml
35
.travis.yml
@ -1,20 +1,15 @@
|
|||||||
language: c++
|
sudo: false
|
||||||
compiler:
|
language: cpp
|
||||||
- gcc
|
cache:
|
||||||
- clang
|
directories:
|
||||||
before_install:
|
- "~/.platformio"
|
||||||
- "/sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_1.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :1 -ac -screen 0 1280x1024x16"
|
env:
|
||||||
- sleep 3
|
- COMPILER=gcc
|
||||||
- export DISPLAY=:1.0
|
- COMPILER=clang
|
||||||
- wget http://downloads.arduino.cc/arduino-1.6.5-linux64.tar.xz
|
- COMPILER=arduino VERSION=1.5.8 BOARD=arduino:avr:uno
|
||||||
- tar xf arduino-1.6.5-linux64.tar.xz
|
- COMPILER=arduino VERSION=1.6.7 BOARD=arduino:avr:uno
|
||||||
- sudo mv arduino-1.6.5 /usr/local/share/arduino
|
- COMPILER=platformio BOARD=uno
|
||||||
- sudo ln -s /usr/local/share/arduino/arduino /usr/local/bin/arduino
|
- COMPILER=platformio BOARD=due
|
||||||
- sudo ln -s $PWD /usr/local/share/arduino/libraries/ArduinoJson
|
- COMPILER=platformio BOARD=esp01
|
||||||
- sudo pip install cpp-coveralls
|
- COMPILER=platformio BOARD=teensy31
|
||||||
script:
|
script: scripts/travis/$COMPILER.sh
|
||||||
- cmake -DCOVERAGE=true . && make && make test
|
|
||||||
- arduino --verify --board arduino:avr:uno $PWD/examples/JsonParserExample/JsonParserExample.ino
|
|
||||||
- arduino --verify --board arduino:avr:uno $PWD/examples/JsonGeneratorExample/JsonGeneratorExample.ino
|
|
||||||
after_success:
|
|
||||||
- if [ "$CC" = "gcc" ]; then coveralls --exclude third-party --gcov-options '\-lp'; fi
|
|
||||||
|
14
ArduinoJson.h
Normal file
14
ArduinoJson.h
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
|
// MIT License
|
||||||
|
//
|
||||||
|
// Arduino JSON library
|
||||||
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
|
// About this file
|
||||||
|
// ---------------
|
||||||
|
// This file is here for [PlatformIO](http://platformio.org/).
|
||||||
|
// It must be present in the root for the tool to find it.
|
||||||
|
// Feel free to ignore this file if your working in another environment.
|
||||||
|
|
||||||
|
#include "include/ArduinoJson.h"
|
40
CHANGELOG.md
40
CHANGELOG.md
@ -1,6 +1,46 @@
|
|||||||
ArduinoJson: change log
|
ArduinoJson: change log
|
||||||
=======================
|
=======================
|
||||||
|
|
||||||
|
v5.0.8
|
||||||
|
------
|
||||||
|
|
||||||
|
* Made the library compatible with [PlatformIO](http://platformio.org/) (issue #181)
|
||||||
|
* Fixed `JsonVariant::is<bool>()` that was incorrectly returning false (issue #214)
|
||||||
|
|
||||||
|
v5.0.7
|
||||||
|
------
|
||||||
|
|
||||||
|
* Made library easier to use from a CMake project: simply `add_subdirectory(ArduinoJson/src)`
|
||||||
|
* Changed `String` to be a `typedef` of `std::string` (issues #142 and #161)
|
||||||
|
|
||||||
|
**BREAKING CHANGES**:
|
||||||
|
- `JsonVariant(true).as<String>()` now returns `"true"` instead of `"1"`
|
||||||
|
- `JsonVariant(false).as<String>()` now returns `"false"` instead of `"0"`
|
||||||
|
|
||||||
|
v5.0.6
|
||||||
|
------
|
||||||
|
|
||||||
|
* Added parameter to `DynamicJsonBuffer` constructor to set initial size (issue #152)
|
||||||
|
* Fixed warning about library category in Arduino 1.6.6 (issue #147)
|
||||||
|
* Examples: Added a loop to wait for serial port to be ready (issue #156)
|
||||||
|
|
||||||
|
v5.0.5
|
||||||
|
------
|
||||||
|
|
||||||
|
* Added overload `JsonObjectSuscript::set(value, decimals)` (issue #143)
|
||||||
|
* Use `float` instead of `double` to reduce the size of `JsonVariant` (issue #134)
|
||||||
|
|
||||||
|
v5.0.4
|
||||||
|
------
|
||||||
|
|
||||||
|
* Fixed ambiguous overload with `JsonArraySubscript` and `JsonObjectSubscript` (issue #122)
|
||||||
|
|
||||||
|
v5.0.3
|
||||||
|
------
|
||||||
|
|
||||||
|
* Fixed `printTo(String)` which wrote numbers instead of strings (issue #120)
|
||||||
|
* Fixed return type of `JsonArray::is<T>()` and some others (issue #121)
|
||||||
|
|
||||||
v5.0.2
|
v5.0.2
|
||||||
------
|
------
|
||||||
|
|
||||||
|
@ -1,4 +1,11 @@
|
|||||||
cmake_minimum_required(VERSION 2.8.4)
|
# Copyright Benoit Blanchon 2014-2016
|
||||||
|
# MIT License
|
||||||
|
#
|
||||||
|
# Arduino JSON library
|
||||||
|
# https://github.com/bblanchon/ArduinoJson
|
||||||
|
# If you like this project, please add a star!
|
||||||
|
|
||||||
|
cmake_minimum_required(VERSION 2.8.12)
|
||||||
project(ArduinoJson)
|
project(ArduinoJson)
|
||||||
|
|
||||||
enable_testing()
|
enable_testing()
|
||||||
@ -7,10 +14,6 @@ set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/lib)
|
|||||||
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/lib)
|
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/lib)
|
||||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin)
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin)
|
||||||
|
|
||||||
if(MSVC)
|
|
||||||
add_definitions(-D_CRT_SECURE_NO_WARNINGS -W4)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(${COVERAGE})
|
if(${COVERAGE})
|
||||||
set(CMAKE_CXX_FLAGS "-g -O0 -fprofile-arcs -ftest-coverage")
|
set(CMAKE_CXX_FLAGS "-g -O0 -fprofile-arcs -ftest-coverage")
|
||||||
endif()
|
endif()
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
The MIT License (MIT)
|
The MIT License (MIT)
|
||||||
---------------------
|
---------------------
|
||||||
|
|
||||||
Copyright © 2014-2015 Benoit BLANCHON
|
Copyright © 2014-2016 Benoit BLANCHON
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
74
README.md
74
README.md
@ -1,7 +1,7 @@
|
|||||||
Arduino JSON library
|
Arduino JSON library
|
||||||
====================
|
====================
|
||||||
|
|
||||||
[](https://ci.appveyor.com/project/bblanchon/arduinojson/branch/master) [](https://travis-ci.org/bblanchon/ArduinoJson) [](https://coveralls.io/r/bblanchon/ArduinoJson?branch=master)
|
[](https://ci.appveyor.com/project/bblanchon/arduinojson/branch/master) [](https://travis-ci.org/bblanchon/ArduinoJson) [](https://coveralls.io/r/bblanchon/ArduinoJson?branch=master) [](https://github.com/bblanchon/ArduinoJson)
|
||||||
|
|
||||||
*An elegant and efficient JSON library for embedded systems.*
|
*An elegant and efficient JSON library for embedded systems.*
|
||||||
|
|
||||||
@ -21,37 +21,54 @@ Features
|
|||||||
* Small footprint
|
* Small footprint
|
||||||
* MIT License
|
* MIT License
|
||||||
|
|
||||||
|
Works on
|
||||||
|
--------
|
||||||
|
|
||||||
|
* All Arduino boards
|
||||||
|
* ESP8266
|
||||||
|
* Teensy
|
||||||
|
* Intel Edison
|
||||||
|
* PlatformIO
|
||||||
|
* Energia
|
||||||
|
* Computers (Windows, Linux, OSX...)
|
||||||
|
|
||||||
|
See [FAQ: Compatibility issues](https://github.com/bblanchon/ArduinoJson/wiki/Compatibility-issues)
|
||||||
|
|
||||||
Quick start
|
Quick start
|
||||||
-----------
|
-----------
|
||||||
|
|
||||||
#### Decoding / Parsing
|
#### Decoding / Parsing
|
||||||
|
|
||||||
char json[] = "{\"sensor\":\"gps\",\"time\":1351824120,\"data\":[48.756080,2.302038]}";
|
```c++
|
||||||
|
char json[] = "{\"sensor\":\"gps\",\"time\":1351824120,\"data\":[48.756080,2.302038]}";
|
||||||
|
|
||||||
StaticJsonBuffer<200> jsonBuffer;
|
StaticJsonBuffer<200> jsonBuffer;
|
||||||
|
|
||||||
JsonObject& root = jsonBuffer.parseObject(json);
|
JsonObject& root = jsonBuffer.parseObject(json);
|
||||||
|
|
||||||
const char* sensor = root["sensor"];
|
const char* sensor = root["sensor"];
|
||||||
long time = root["time"];
|
long time = root["time"];
|
||||||
double latitude = root["data"][0];
|
double latitude = root["data"][0];
|
||||||
double longitude = root["data"][1];
|
double longitude = root["data"][1];
|
||||||
|
```
|
||||||
|
|
||||||
#### Encoding / Generating
|
#### Encoding / Generating
|
||||||
|
|
||||||
StaticJsonBuffer<200> jsonBuffer;
|
```c++
|
||||||
|
StaticJsonBuffer<200> jsonBuffer;
|
||||||
|
|
||||||
JsonObject& root = jsonBuffer.createObject();
|
JsonObject& root = jsonBuffer.createObject();
|
||||||
root["sensor"] = "gps";
|
root["sensor"] = "gps";
|
||||||
root["time"] = 1351824120;
|
root["time"] = 1351824120;
|
||||||
|
|
||||||
JsonArray& data = root.createNestedArray("data");
|
JsonArray& data = root.createNestedArray("data");
|
||||||
data.add(48.756080, 6); // 6 is the number of decimals to print
|
data.add(48.756080, 6); // 6 is the number of decimals to print
|
||||||
data.add(2.302038, 6); // if not specified, 2 digits are printed
|
data.add(2.302038, 6); // if not specified, 2 digits are printed
|
||||||
|
|
||||||
root.printTo(Serial);
|
root.printTo(Serial);
|
||||||
// This prints:
|
// This prints:
|
||||||
// {"sensor":"gps","time":1351824120,"data":[48.756080,2.302038]}
|
// {"sensor":"gps","time":1351824120,"data":[48.756080,2.302038]}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
Documentation
|
Documentation
|
||||||
@ -78,6 +95,27 @@ From GitHub user `zacsketches`:
|
|||||||
> I've been watching you consistently develop this library over the past six months, and I used it today for a publish and subscribe architecture designed to help hobbyists move into more advanced robotics. Your library allowed me to implement remote subscription in order to facilitate multi-processor robots.
|
> I've been watching you consistently develop this library over the past six months, and I used it today for a publish and subscribe architecture designed to help hobbyists move into more advanced robotics. Your library allowed me to implement remote subscription in order to facilitate multi-processor robots.
|
||||||
> ArduinoJson saved me a week's worth of time!!
|
> ArduinoJson saved me a week's worth of time!!
|
||||||
|
|
||||||
|
[From Reddit user `erm_what_`](https://www.reddit.com/r/arduino/comments/3jj6ep/announcing_arduinojson_50/cusjk8c):
|
||||||
|
|
||||||
|
> This is a great library and I wouldn't be able to do the project I'm doing without it. I completely recommend it.
|
||||||
|
|
||||||
|
[From Reddit user `makerhacks`](https://www.reddit.com/r/arduino/comments/3jj6ep/announcing_arduinojson_50/cusqg7b):
|
||||||
|
|
||||||
|
> I am just starting an ESP8266 clock project and now I can output JSON from my server script and interpret it painlessly.
|
||||||
|
|
||||||
|
Donators
|
||||||
|
--------
|
||||||
|
|
||||||
|
Special thanks to the following persons and companies who made generous donations to the library author:
|
||||||
|
|
||||||
|
* Robert Murphy
|
||||||
|
* Surge Communications
|
||||||
|
* Alex Scott
|
||||||
|
* Firepick Services LLC
|
||||||
|
* A B Doodkorte
|
||||||
|
* Scott Smith
|
||||||
|
* Johann Stieger
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
Found this library useful? Please star this project or [help me back with a donation!](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=donate%40benoitblanchon%2efr&lc=GB&item_name=Benoit%20Blanchon&item_number=Arduino%20JSON¤cy_code=EUR&bn=PP%2dDonationsBF%3abtn_donate_LG%2egif%3aNonHosted) :smile:
|
Found this library useful? Please star this project or [help me back with a donation!](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=donate%40benoitblanchon%2efr&lc=GB&item_name=Benoit%20Blanchon&item_number=Arduino%20JSON¤cy_code=EUR&bn=PP%2dDonationsBF%3abtn_donate_LG%2egif%3aNonHosted) :smile:
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#include <ArduinoJson.h>
|
#include <ArduinoJson.h>
|
||||||
|
|
||||||
@ -10,6 +11,9 @@ using namespace ArduinoJson::Internals;
|
|||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
Serial.begin(9600);
|
Serial.begin(9600);
|
||||||
|
while (!Serial) {
|
||||||
|
// wait serial port initialization
|
||||||
|
}
|
||||||
|
|
||||||
IndentedPrint serial(Serial);
|
IndentedPrint serial(Serial);
|
||||||
serial.setTabSize(4);
|
serial.setTabSize(4);
|
||||||
|
@ -1,13 +1,17 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#include <ArduinoJson.h>
|
#include <ArduinoJson.h>
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
Serial.begin(9600);
|
Serial.begin(9600);
|
||||||
|
while (!Serial) {
|
||||||
|
// wait serial port initialization
|
||||||
|
}
|
||||||
|
|
||||||
StaticJsonBuffer<200> jsonBuffer;
|
StaticJsonBuffer<200> jsonBuffer;
|
||||||
|
|
||||||
|
@ -1,13 +1,17 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#include <ArduinoJson.h>
|
#include <ArduinoJson.h>
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
Serial.begin(9600);
|
Serial.begin(9600);
|
||||||
|
while (!Serial) {
|
||||||
|
// wait serial port initialization
|
||||||
|
}
|
||||||
|
|
||||||
StaticJsonBuffer<200> jsonBuffer;
|
StaticJsonBuffer<200> jsonBuffer;
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
// You can easily test this program with netcat:
|
// You can easily test this program with netcat:
|
||||||
// $ nc -ulp 8888
|
// $ nc -ulp 8888
|
||||||
//
|
//
|
||||||
// by Benoit Blanchon, MIT License 2015
|
// by Benoit Blanchon, MIT License 2015-2016
|
||||||
|
|
||||||
#include <SPI.h>
|
#include <SPI.h>
|
||||||
#include <Ethernet.h>
|
#include <Ethernet.h>
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#include "ArduinoJson/DynamicJsonBuffer.hpp"
|
#include "ArduinoJson/DynamicJsonBuffer.hpp"
|
||||||
#include "ArduinoJson/JsonArray.hpp"
|
#include "ArduinoJson/JsonArray.hpp"
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
@ -20,6 +21,7 @@ class Print {
|
|||||||
|
|
||||||
size_t print(const char[]);
|
size_t print(const char[]);
|
||||||
size_t print(double, int = 2);
|
size_t print(double, int = 2);
|
||||||
|
size_t print(int);
|
||||||
size_t print(long);
|
size_t print(long);
|
||||||
size_t println();
|
size_t println();
|
||||||
};
|
};
|
||||||
|
@ -1,23 +1,16 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#ifndef ARDUINO
|
#ifndef ARDUINO
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
typedef std::string String;
|
||||||
// This class reproduces Arduino's String class
|
|
||||||
class String : public std::string {
|
|
||||||
public:
|
|
||||||
String(const char *cstr = "") : std::string(cstr) {}
|
|
||||||
String(const String &str) : std::string(str) {}
|
|
||||||
explicit String(long);
|
|
||||||
explicit String(double, unsigned char decimalPlaces = 2);
|
|
||||||
};
|
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
@ -31,7 +32,8 @@ class BlockJsonBuffer : public JsonBuffer {
|
|||||||
};
|
};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
BlockJsonBuffer() : _head(NULL) {}
|
BlockJsonBuffer(size_t initialSize = 256)
|
||||||
|
: _head(NULL), _nextBlockSize(initialSize) {}
|
||||||
|
|
||||||
~BlockJsonBuffer() {
|
~BlockJsonBuffer() {
|
||||||
Block* currentBlock = _head;
|
Block* currentBlock = _head;
|
||||||
@ -55,8 +57,6 @@ class BlockJsonBuffer : public JsonBuffer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static const size_t FIRST_BLOCK_CAPACITY = 32;
|
|
||||||
|
|
||||||
bool canAllocInHead(size_t bytes) const {
|
bool canAllocInHead(size_t bytes) const {
|
||||||
return _head != NULL && _head->size + bytes <= _head->capacity;
|
return _head != NULL && _head->size + bytes <= _head->capacity;
|
||||||
}
|
}
|
||||||
@ -68,10 +68,10 @@ class BlockJsonBuffer : public JsonBuffer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void* allocInNewBlock(size_t bytes) {
|
void* allocInNewBlock(size_t bytes) {
|
||||||
size_t capacity = FIRST_BLOCK_CAPACITY;
|
size_t capacity = _nextBlockSize;
|
||||||
if (_head != NULL) capacity = _head->capacity * 2;
|
|
||||||
if (bytes > capacity) capacity = bytes;
|
if (bytes > capacity) capacity = bytes;
|
||||||
if (!addNewBlock(capacity)) return NULL;
|
if (!addNewBlock(capacity)) return NULL;
|
||||||
|
_nextBlockSize *= 2;
|
||||||
return allocInHead(bytes);
|
return allocInHead(bytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -86,8 +86,9 @@ class BlockJsonBuffer : public JsonBuffer {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
Block* _head;
|
|
||||||
TAllocator _allocator;
|
TAllocator _allocator;
|
||||||
|
Block* _head;
|
||||||
|
size_t _nextBlockSize;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
@ -18,7 +19,8 @@ class DynamicStringBuilder : public Print {
|
|||||||
DynamicStringBuilder(String &str) : _str(str) {}
|
DynamicStringBuilder(String &str) : _str(str) {}
|
||||||
|
|
||||||
virtual size_t write(uint8_t c) {
|
virtual size_t write(uint8_t c) {
|
||||||
_str += c;
|
// Need to cast to char, otherwise String will print a number (issue #120)
|
||||||
|
_str += static_cast<char>(c);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
@ -32,7 +33,7 @@ class Encoding {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static const char _escapeTable[];
|
static const char _escapeTable[];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
21
include/ArduinoJson/Internals/JsonFloat.hpp
Normal file
21
include/ArduinoJson/Internals/JsonFloat.hpp
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
|
// MIT License
|
||||||
|
//
|
||||||
|
// Arduino JSON library
|
||||||
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace ArduinoJson {
|
||||||
|
namespace Internals {
|
||||||
|
|
||||||
|
#ifdef ARDUINO
|
||||||
|
// On embedded platform, we with use float instead of double to keep JsonVariant
|
||||||
|
// small (issue #134)
|
||||||
|
typedef float JsonFloat;
|
||||||
|
#else
|
||||||
|
typedef double JsonFloat;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
14
include/ArduinoJson/Internals/JsonInteger.hpp
Normal file
14
include/ArduinoJson/Internals/JsonInteger.hpp
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
|
// MIT License
|
||||||
|
//
|
||||||
|
// Arduino JSON library
|
||||||
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace ArduinoJson {
|
||||||
|
namespace Internals {
|
||||||
|
typedef long JsonInteger;
|
||||||
|
}
|
||||||
|
}
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
@ -1,11 +1,15 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "JsonFloat.hpp"
|
||||||
|
#include "JsonInteger.hpp"
|
||||||
|
|
||||||
namespace ArduinoJson {
|
namespace ArduinoJson {
|
||||||
|
|
||||||
// Forward declarations
|
// Forward declarations
|
||||||
@ -13,12 +17,11 @@ class JsonArray;
|
|||||||
class JsonObject;
|
class JsonObject;
|
||||||
|
|
||||||
namespace Internals {
|
namespace Internals {
|
||||||
|
|
||||||
// A union that defines the actual content of a JsonVariant.
|
// A union that defines the actual content of a JsonVariant.
|
||||||
// The enum JsonVariantType determines which member is in use.
|
// The enum JsonVariantType determines which member is in use.
|
||||||
union JsonVariantContent {
|
union JsonVariantContent {
|
||||||
double asDouble; // asDouble is also used for float
|
JsonFloat asFloat; // used for double and float
|
||||||
long asLong; // asLong is also used for bool, char, short and int
|
JsonInteger asInteger; // used for bool, char, short, int and longs
|
||||||
const char* asString; // asString can be null
|
const char* asString; // asString can be null
|
||||||
JsonArray* asArray; // asArray cannot be null
|
JsonArray* asArray; // asArray cannot be null
|
||||||
JsonObject* asObject; // asObject cannot be null
|
JsonObject* asObject; // asObject cannot be null
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
@ -19,17 +20,17 @@ enum JsonVariantType {
|
|||||||
JSON_UNPARSED, // the JsonVariant contains an unparsed string
|
JSON_UNPARSED, // the JsonVariant contains an unparsed string
|
||||||
JSON_STRING, // the JsonVariant stores a const char*
|
JSON_STRING, // the JsonVariant stores a const char*
|
||||||
JSON_BOOLEAN, // the JsonVariant stores a bool
|
JSON_BOOLEAN, // the JsonVariant stores a bool
|
||||||
JSON_LONG, // the JsonVariant stores a long
|
JSON_INTEGER, // the JsonVariant stores an integer
|
||||||
JSON_ARRAY, // the JsonVariant stores a pointer to a JsonArray
|
JSON_ARRAY, // the JsonVariant stores a pointer to a JsonArray
|
||||||
JSON_OBJECT, // the JsonVariant stores a pointer to a JsonObject
|
JSON_OBJECT, // the JsonVariant stores a pointer to a JsonObject
|
||||||
|
|
||||||
// The following values are reserved for double values
|
// The following values are reserved for float values
|
||||||
// Multiple values are used for double, depending on the number of decimal
|
// Multiple values are used for double, depending on the number of decimal
|
||||||
// digits that must be printed in the JSON output.
|
// digits that must be printed in the JSON output.
|
||||||
// This little trick allow to save one extra member in JsonVariant
|
// This little trick allow to save one extra member in JsonVariant
|
||||||
JSON_DOUBLE_0_DECIMALS
|
JSON_FLOAT_0_DECIMALS
|
||||||
// JSON_DOUBLE_1_DECIMAL
|
// JSON_FLOAT_1_DECIMAL
|
||||||
// JSON_DOUBLE_2_DECIMALS
|
// JSON_FLOAT_2_DECIMALS
|
||||||
// ...
|
// ...
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -1,14 +1,17 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "../Arduino/Print.hpp"
|
#include "../Arduino/Print.hpp"
|
||||||
#include "Encoding.hpp"
|
#include "Encoding.hpp"
|
||||||
#include "ForceInline.hpp"
|
#include "ForceInline.hpp"
|
||||||
|
#include "JsonFloat.hpp"
|
||||||
|
#include "JsonInteger.hpp"
|
||||||
|
|
||||||
namespace ArduinoJson {
|
namespace ArduinoJson {
|
||||||
namespace Internals {
|
namespace Internals {
|
||||||
@ -60,9 +63,9 @@ class JsonWriter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void writeLong(long value) { _length += _sink.print(value); }
|
void writeInteger(JsonInteger value) { _length += _sink.print(value); }
|
||||||
|
|
||||||
void writeDouble(double value, uint8_t decimals) {
|
void writeFloat(JsonFloat value, uint8_t decimals) {
|
||||||
_length += _sink.print(value, decimals);
|
_length += _sink.print(value, decimals);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
@ -14,7 +15,7 @@ namespace Internals {
|
|||||||
// A Print implementation that allows to write in a char[]
|
// A Print implementation that allows to write in a char[]
|
||||||
class StaticStringBuilder : public Print {
|
class StaticStringBuilder : public Print {
|
||||||
public:
|
public:
|
||||||
StaticStringBuilder(char *buf, int size)
|
StaticStringBuilder(char *buf, size_t size)
|
||||||
: buffer(buf), capacity(size - 1), length(0) {
|
: buffer(buf), capacity(size - 1), length(0) {
|
||||||
buffer[0] = '\0';
|
buffer[0] = '\0';
|
||||||
}
|
}
|
||||||
@ -23,8 +24,8 @@ class StaticStringBuilder : public Print {
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
char *buffer;
|
char *buffer;
|
||||||
int capacity;
|
size_t capacity;
|
||||||
int length;
|
size_t length;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
@ -63,7 +64,8 @@ class JsonArray : public Internals::JsonPrintable<JsonArray>,
|
|||||||
FORCE_INLINE bool add(const String &value);
|
FORCE_INLINE bool add(const String &value);
|
||||||
FORCE_INLINE bool add(JsonArray &array);
|
FORCE_INLINE bool add(JsonArray &array);
|
||||||
FORCE_INLINE bool add(JsonObject &object);
|
FORCE_INLINE bool add(JsonObject &object);
|
||||||
FORCE_INLINE bool add(const JsonVariant &object);
|
template <typename T>
|
||||||
|
FORCE_INLINE bool add(const T &value);
|
||||||
|
|
||||||
// Sets the value at specified index.
|
// Sets the value at specified index.
|
||||||
FORCE_INLINE void set(size_t index, bool value);
|
FORCE_INLINE void set(size_t index, bool value);
|
||||||
@ -81,7 +83,8 @@ class JsonArray : public Internals::JsonPrintable<JsonArray>,
|
|||||||
FORCE_INLINE void set(size_t index, const String &value);
|
FORCE_INLINE void set(size_t index, const String &value);
|
||||||
FORCE_INLINE void set(size_t index, JsonArray &array);
|
FORCE_INLINE void set(size_t index, JsonArray &array);
|
||||||
FORCE_INLINE void set(size_t index, JsonObject &object);
|
FORCE_INLINE void set(size_t index, JsonObject &object);
|
||||||
FORCE_INLINE void set(size_t index, const JsonVariant &object);
|
template <typename T>
|
||||||
|
FORCE_INLINE void set(size_t index, const T &value);
|
||||||
|
|
||||||
// Gets the value at the specified index.
|
// Gets the value at the specified index.
|
||||||
FORCE_INLINE JsonVariant get(size_t index) const;
|
FORCE_INLINE JsonVariant get(size_t index) const;
|
||||||
@ -92,7 +95,7 @@ class JsonArray : public Internals::JsonPrintable<JsonArray>,
|
|||||||
|
|
||||||
// Check the type of the value at specified index.
|
// Check the type of the value at specified index.
|
||||||
template <typename T>
|
template <typename T>
|
||||||
FORCE_INLINE T is(size_t index) const;
|
FORCE_INLINE bool is(size_t index) const;
|
||||||
|
|
||||||
// Creates a JsonArray and adds a reference at the end of the array.
|
// Creates a JsonArray and adds a reference at the end of the array.
|
||||||
// It's a shortcut for JsonBuffer::createArray() and JsonArray::add()
|
// It's a shortcut for JsonBuffer::createArray() and JsonArray::add()
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
@ -77,8 +78,9 @@ inline bool JsonArray::add(JsonObject &object) {
|
|||||||
return addNode<JsonObject &>(object);
|
return addNode<JsonObject &>(object);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool JsonArray::add(const JsonVariant &object) {
|
template <typename T>
|
||||||
return addNode<const JsonVariant &>(object);
|
inline bool JsonArray::add(const T &variant) {
|
||||||
|
return addNode<const JsonVariant &>(variant);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename TValue>
|
template <typename TValue>
|
||||||
@ -149,8 +151,9 @@ inline void JsonArray::set(size_t index, JsonObject &object) {
|
|||||||
return setNodeAt<JsonObject &>(index, object);
|
return setNodeAt<JsonObject &>(index, object);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void JsonArray::set(size_t index, const JsonVariant &object) {
|
template <typename T>
|
||||||
return setNodeAt<const JsonVariant &>(index, object);
|
inline void JsonArray::set(size_t index, const T &variant) {
|
||||||
|
return setNodeAt<const JsonVariant &>(index, variant);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename TValue>
|
template <typename TValue>
|
||||||
@ -182,7 +185,7 @@ inline T JsonArray::get(size_t index) const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
inline T JsonArray::is(size_t index) const {
|
inline bool JsonArray::is(size_t index) const {
|
||||||
node_type *node = getNodeAt(index);
|
node_type *node = getNodeAt(index);
|
||||||
return node ? node->content.is<T>() : false;
|
return node ? node->content.is<T>() : false;
|
||||||
}
|
}
|
||||||
|
@ -1,13 +1,19 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "JsonSubscriptBase.hpp"
|
#include "JsonSubscriptBase.hpp"
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
#pragma warning(push)
|
||||||
|
#pragma warning(disable : 4522)
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace ArduinoJson {
|
namespace ArduinoJson {
|
||||||
class JsonArraySubscript : public JsonSubscriptBase<JsonArraySubscript> {
|
class JsonArraySubscript : public JsonSubscriptBase<JsonArraySubscript> {
|
||||||
public:
|
public:
|
||||||
@ -16,6 +22,15 @@ class JsonArraySubscript : public JsonSubscriptBase<JsonArraySubscript> {
|
|||||||
|
|
||||||
using JsonSubscriptBase<JsonArraySubscript>::operator=;
|
using JsonSubscriptBase<JsonArraySubscript>::operator=;
|
||||||
|
|
||||||
|
JsonArraySubscript& operator=(const JsonArraySubscript& src) {
|
||||||
|
return assign<const JsonVariant&>(src);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
JsonArraySubscript& operator=(const T& src) {
|
||||||
|
return assign<const JsonVariant&>(src);
|
||||||
|
}
|
||||||
|
|
||||||
FORCE_INLINE bool success() const { return _index < _array.size(); }
|
FORCE_INLINE bool success() const { return _index < _array.size(); }
|
||||||
|
|
||||||
FORCE_INLINE operator JsonVariant() const { return _array.get(_index); }
|
FORCE_INLINE operator JsonVariant() const { return _array.get(_index); }
|
||||||
@ -26,7 +41,7 @@ class JsonArraySubscript : public JsonSubscriptBase<JsonArraySubscript> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
FORCE_INLINE T is() const {
|
FORCE_INLINE bool is() const {
|
||||||
return _array.is<T>(_index);
|
return _array.is<T>(_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -52,3 +67,7 @@ inline std::ostream& operator<<(std::ostream& os,
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
} // namespace ArduinoJson
|
} // namespace ArduinoJson
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
#pragma warning(pop)
|
||||||
|
#endif
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
@ -65,6 +66,9 @@ class JsonObject : public Internals::JsonPrintable<JsonObject>,
|
|||||||
FORCE_INLINE bool set(const char* key, JsonArray& array);
|
FORCE_INLINE bool set(const char* key, JsonArray& array);
|
||||||
FORCE_INLINE bool set(const char* key, JsonObject& object);
|
FORCE_INLINE bool set(const char* key, JsonObject& object);
|
||||||
FORCE_INLINE bool set(const char* key, const JsonVariant& value);
|
FORCE_INLINE bool set(const char* key, const JsonVariant& value);
|
||||||
|
template <typename T>
|
||||||
|
FORCE_INLINE bool set(const char* key, const T& value);
|
||||||
|
|
||||||
FORCE_INLINE bool set(const String& key, bool value);
|
FORCE_INLINE bool set(const String& key, bool value);
|
||||||
FORCE_INLINE bool set(const String& key, float value, uint8_t decimals = 2);
|
FORCE_INLINE bool set(const String& key, float value, uint8_t decimals = 2);
|
||||||
FORCE_INLINE bool set(const String& key, double value, uint8_t decimals = 2);
|
FORCE_INLINE bool set(const String& key, double value, uint8_t decimals = 2);
|
||||||
@ -81,6 +85,8 @@ class JsonObject : public Internals::JsonPrintable<JsonObject>,
|
|||||||
FORCE_INLINE bool set(const String& key, JsonArray& array);
|
FORCE_INLINE bool set(const String& key, JsonArray& array);
|
||||||
FORCE_INLINE bool set(const String& key, JsonObject& object);
|
FORCE_INLINE bool set(const String& key, JsonObject& object);
|
||||||
FORCE_INLINE bool set(const String& key, const JsonVariant& value);
|
FORCE_INLINE bool set(const String& key, const JsonVariant& value);
|
||||||
|
template <typename T>
|
||||||
|
FORCE_INLINE bool set(const String& key, const T& value);
|
||||||
|
|
||||||
// Gets the value associated with the specified key.
|
// Gets the value associated with the specified key.
|
||||||
FORCE_INLINE JsonVariant get(JsonObjectKey) const;
|
FORCE_INLINE JsonVariant get(JsonObjectKey) const;
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
@ -116,6 +117,10 @@ inline bool JsonObject::set(const char *key, JsonObject &object) {
|
|||||||
inline bool JsonObject::set(const char *key, const JsonVariant &value) {
|
inline bool JsonObject::set(const char *key, const JsonVariant &value) {
|
||||||
return setNodeAt<const char *, const JsonVariant &>(key, value);
|
return setNodeAt<const char *, const JsonVariant &>(key, value);
|
||||||
}
|
}
|
||||||
|
template <typename T>
|
||||||
|
inline bool JsonObject::set(const char *key, const T &value) {
|
||||||
|
return setNodeAt<const char *, JsonVariant>(key, value);
|
||||||
|
}
|
||||||
inline bool JsonObject::set(const String &key, bool value) {
|
inline bool JsonObject::set(const String &key, bool value) {
|
||||||
return setNodeAt<const String &, bool>(key, value);
|
return setNodeAt<const String &, bool>(key, value);
|
||||||
}
|
}
|
||||||
@ -166,6 +171,10 @@ inline bool JsonObject::set(const String &key, JsonObject &object) {
|
|||||||
inline bool JsonObject::set(const String &key, const JsonVariant &value) {
|
inline bool JsonObject::set(const String &key, const JsonVariant &value) {
|
||||||
return setNodeAt<const String &, const JsonVariant &>(key, value);
|
return setNodeAt<const String &, const JsonVariant &>(key, value);
|
||||||
}
|
}
|
||||||
|
template <typename T>
|
||||||
|
inline bool JsonObject::set(const String &key, const T &value) {
|
||||||
|
return setNodeAt<const String &, JsonVariant>(key, value);
|
||||||
|
}
|
||||||
|
|
||||||
template <typename TKey, typename TValue>
|
template <typename TKey, typename TValue>
|
||||||
inline bool JsonObject::setNodeAt(TKey key, TValue value) {
|
inline bool JsonObject::setNodeAt(TKey key, TValue value) {
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
@ -1,13 +1,19 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "JsonSubscriptBase.hpp"
|
#include "JsonSubscriptBase.hpp"
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
#pragma warning(push)
|
||||||
|
#pragma warning(disable : 4522)
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace ArduinoJson {
|
namespace ArduinoJson {
|
||||||
|
|
||||||
template <typename TKey>
|
template <typename TKey>
|
||||||
@ -19,6 +25,17 @@ class JsonObjectSubscript
|
|||||||
|
|
||||||
using JsonSubscriptBase<JsonObjectSubscript<TKey> >::operator=;
|
using JsonSubscriptBase<JsonObjectSubscript<TKey> >::operator=;
|
||||||
|
|
||||||
|
JsonObjectSubscript<TKey>& operator=(const JsonObjectSubscript<TKey>& src) {
|
||||||
|
return JsonSubscriptBase<JsonObjectSubscript<TKey> >::template assign<
|
||||||
|
JsonVariant>(src);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
JsonObjectSubscript<TKey>& operator=(const T& src) {
|
||||||
|
return JsonSubscriptBase<JsonObjectSubscript<TKey> >::template assign<
|
||||||
|
JsonVariant>(src);
|
||||||
|
}
|
||||||
|
|
||||||
FORCE_INLINE bool success() const { return _object.containsKey(_key); }
|
FORCE_INLINE bool success() const { return _object.containsKey(_key); }
|
||||||
|
|
||||||
FORCE_INLINE operator JsonVariant() const { return _object.get(_key); }
|
FORCE_INLINE operator JsonVariant() const { return _object.get(_key); }
|
||||||
@ -29,7 +46,7 @@ class JsonObjectSubscript
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename TValue>
|
template <typename TValue>
|
||||||
FORCE_INLINE TValue is() const {
|
FORCE_INLINE bool is() const {
|
||||||
return _object.is<TValue>(_key);
|
return _object.is<TValue>(_key);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -38,6 +55,11 @@ class JsonObjectSubscript
|
|||||||
return _object.set(_key, value);
|
return _object.set(_key, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename TValue>
|
||||||
|
FORCE_INLINE bool set(TValue value, uint8_t decimals) {
|
||||||
|
return _object.set(_key, value, decimals);
|
||||||
|
}
|
||||||
|
|
||||||
FORCE_INLINE JsonVariant get() { return _object.get(_key); }
|
FORCE_INLINE JsonVariant get() { return _object.get(_key); }
|
||||||
|
|
||||||
void writeTo(Internals::JsonWriter& writer) const {
|
void writeTo(Internals::JsonWriter& writer) const {
|
||||||
@ -60,4 +82,8 @@ inline std::ostream& operator<<(
|
|||||||
return source.printTo(os);
|
return source.printTo(os);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
} // namespace ArduinoJson
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
#pragma warning(pop)
|
||||||
|
#endif
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
@ -68,10 +69,10 @@ class JsonSubscriptBase : public JsonVariantBase<TImpl> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
FORCE_INLINE TImpl& operator=(JsonVariant value) {
|
FORCE_INLINE TImpl& operator=(JsonVariant value) {
|
||||||
return assign<JsonVariant>(value);
|
return assign<const JsonVariant&>(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
protected:
|
||||||
template <typename TValue>
|
template <typename TValue>
|
||||||
FORCE_INLINE TImpl& assign(TValue value) {
|
FORCE_INLINE TImpl& assign(TValue value) {
|
||||||
TImpl* that = static_cast<TImpl*>(this);
|
TImpl* that = static_cast<TImpl*>(this);
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
@ -83,6 +84,9 @@ class JsonVariant : public JsonVariantBase<JsonVariant> {
|
|||||||
static T invalid();
|
static T invalid();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
Internals::JsonFloat asFloat() const;
|
||||||
|
Internals::JsonInteger asInteger() const;
|
||||||
|
|
||||||
// The current type of the variant
|
// The current type of the variant
|
||||||
Internals::JsonVariantType _type;
|
Internals::JsonVariantType _type;
|
||||||
|
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
@ -11,8 +12,9 @@
|
|||||||
namespace ArduinoJson {
|
namespace ArduinoJson {
|
||||||
|
|
||||||
inline JsonVariant::JsonVariant(bool value) {
|
inline JsonVariant::JsonVariant(bool value) {
|
||||||
_type = Internals::JSON_BOOLEAN;
|
using namespace Internals;
|
||||||
_content.asLong = value;
|
_type = JSON_BOOLEAN;
|
||||||
|
_content.asInteger = static_cast<JsonInteger>(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline JsonVariant::JsonVariant(const char *value) {
|
inline JsonVariant::JsonVariant(const char *value) {
|
||||||
@ -26,15 +28,15 @@ inline JsonVariant::JsonVariant(Internals::Unparsed value) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
inline JsonVariant::JsonVariant(double value, uint8_t decimals) {
|
inline JsonVariant::JsonVariant(double value, uint8_t decimals) {
|
||||||
_type = static_cast<Internals::JsonVariantType>(
|
using namespace Internals;
|
||||||
Internals::JSON_DOUBLE_0_DECIMALS + decimals);
|
_type = static_cast<JsonVariantType>(JSON_FLOAT_0_DECIMALS + decimals);
|
||||||
_content.asDouble = value;
|
_content.asFloat = static_cast<JsonFloat>(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline JsonVariant::JsonVariant(float value, uint8_t decimals) {
|
inline JsonVariant::JsonVariant(float value, uint8_t decimals) {
|
||||||
_type = static_cast<Internals::JsonVariantType>(
|
using namespace Internals;
|
||||||
Internals::JSON_DOUBLE_0_DECIMALS + decimals);
|
_type = static_cast<JsonVariantType>(JSON_FLOAT_0_DECIMALS + decimals);
|
||||||
_content.asDouble = value;
|
_content.asFloat = static_cast<JsonFloat>(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline JsonVariant::JsonVariant(JsonArray &array) {
|
inline JsonVariant::JsonVariant(JsonArray &array) {
|
||||||
@ -48,51 +50,53 @@ inline JsonVariant::JsonVariant(JsonObject &object) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
inline JsonVariant::JsonVariant(signed char value) {
|
inline JsonVariant::JsonVariant(signed char value) {
|
||||||
_type = Internals::JSON_LONG;
|
using namespace Internals;
|
||||||
_content.asLong = value;
|
_type = JSON_INTEGER;
|
||||||
|
_content.asInteger = static_cast<JsonInteger>(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline JsonVariant::JsonVariant(signed int value) {
|
inline JsonVariant::JsonVariant(signed int value) {
|
||||||
_type = Internals::JSON_LONG;
|
using namespace Internals;
|
||||||
_content.asLong = value;
|
_type = JSON_INTEGER;
|
||||||
|
_content.asInteger = static_cast<JsonInteger>(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline JsonVariant::JsonVariant(signed long value) {
|
inline JsonVariant::JsonVariant(signed long value) {
|
||||||
_type = Internals::JSON_LONG;
|
using namespace Internals;
|
||||||
_content.asLong = value;
|
_type = JSON_INTEGER;
|
||||||
|
_content.asInteger = static_cast<JsonInteger>(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline JsonVariant::JsonVariant(signed short value) {
|
inline JsonVariant::JsonVariant(signed short value) {
|
||||||
_type = Internals::JSON_LONG;
|
using namespace Internals;
|
||||||
_content.asLong = value;
|
_type = JSON_INTEGER;
|
||||||
|
_content.asInteger = static_cast<JsonInteger>(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline JsonVariant::JsonVariant(unsigned char value) {
|
inline JsonVariant::JsonVariant(unsigned char value) {
|
||||||
_type = Internals::JSON_LONG;
|
using namespace Internals;
|
||||||
_content.asLong = value;
|
_type = JSON_INTEGER;
|
||||||
|
_content.asInteger = static_cast<JsonInteger>(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline JsonVariant::JsonVariant(unsigned int value) {
|
inline JsonVariant::JsonVariant(unsigned int value) {
|
||||||
_type = Internals::JSON_LONG;
|
using namespace Internals;
|
||||||
_content.asLong = value;
|
_type = JSON_INTEGER;
|
||||||
|
_content.asInteger = static_cast<JsonInteger>(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline JsonVariant::JsonVariant(unsigned long value) {
|
inline JsonVariant::JsonVariant(unsigned long value) {
|
||||||
_type = Internals::JSON_LONG;
|
using namespace Internals;
|
||||||
_content.asLong = value;
|
_type = JSON_INTEGER;
|
||||||
|
_content.asInteger = static_cast<JsonInteger>(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline JsonVariant::JsonVariant(unsigned short value) {
|
inline JsonVariant::JsonVariant(unsigned short value) {
|
||||||
_type = Internals::JSON_LONG;
|
using namespace Internals;
|
||||||
_content.asLong = value;
|
_type = JSON_INTEGER;
|
||||||
|
_content.asInteger = static_cast<JsonInteger>(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <>
|
|
||||||
double JsonVariant::as<double>() const;
|
|
||||||
|
|
||||||
template <>
|
|
||||||
long JsonVariant::as<long>() const;
|
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
String JsonVariant::as<String>() const;
|
String JsonVariant::as<String>() const;
|
||||||
|
|
||||||
@ -101,47 +105,57 @@ const char *JsonVariant::as<const char *>() const;
|
|||||||
|
|
||||||
template <>
|
template <>
|
||||||
inline bool JsonVariant::as<bool>() const {
|
inline bool JsonVariant::as<bool>() const {
|
||||||
return as<long>() != 0;
|
return asInteger() != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
inline signed char JsonVariant::as<signed char>() const {
|
inline signed char JsonVariant::as<signed char>() const {
|
||||||
return static_cast<signed char>(as<long>());
|
return static_cast<signed char>(asInteger());
|
||||||
}
|
}
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
inline unsigned char JsonVariant::as<unsigned char>() const {
|
inline unsigned char JsonVariant::as<unsigned char>() const {
|
||||||
return static_cast<unsigned char>(as<long>());
|
return static_cast<unsigned char>(asInteger());
|
||||||
}
|
}
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
inline signed short JsonVariant::as<signed short>() const {
|
inline signed short JsonVariant::as<signed short>() const {
|
||||||
return static_cast<signed short>(as<long>());
|
return static_cast<signed short>(asInteger());
|
||||||
}
|
}
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
inline unsigned short JsonVariant::as<unsigned short>() const {
|
inline unsigned short JsonVariant::as<unsigned short>() const {
|
||||||
return static_cast<unsigned short>(as<long>());
|
return static_cast<unsigned short>(asInteger());
|
||||||
}
|
}
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
inline signed int JsonVariant::as<signed int>() const {
|
inline signed int JsonVariant::as<signed int>() const {
|
||||||
return static_cast<signed int>(as<long>());
|
return static_cast<signed int>(asInteger());
|
||||||
}
|
}
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
inline unsigned int JsonVariant::as<unsigned int>() const {
|
inline unsigned int JsonVariant::as<unsigned int>() const {
|
||||||
return static_cast<unsigned int>(as<long>());
|
return static_cast<unsigned int>(asInteger());
|
||||||
}
|
}
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
inline unsigned long JsonVariant::as<unsigned long>() const {
|
inline unsigned long JsonVariant::as<unsigned long>() const {
|
||||||
return static_cast<unsigned long>(as<long>());
|
return static_cast<unsigned long>(asInteger());
|
||||||
|
}
|
||||||
|
|
||||||
|
template <>
|
||||||
|
inline signed long JsonVariant::as<signed long>() const {
|
||||||
|
return static_cast<unsigned long>(asInteger());
|
||||||
|
}
|
||||||
|
|
||||||
|
template <>
|
||||||
|
inline double JsonVariant::as<double>() const {
|
||||||
|
return static_cast<double>(asFloat());
|
||||||
}
|
}
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
inline float JsonVariant::as<float>() const {
|
inline float JsonVariant::as<float>() const {
|
||||||
return static_cast<float>(as<double>());
|
return static_cast<float>(asFloat());
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
@ -160,10 +174,8 @@ bool JsonVariant::is<signed long>() const;
|
|||||||
template <> // in .cpp
|
template <> // in .cpp
|
||||||
bool JsonVariant::is<double>() const;
|
bool JsonVariant::is<double>() const;
|
||||||
|
|
||||||
template <>
|
template <> // int .cpp
|
||||||
inline bool JsonVariant::is<bool>() const {
|
bool JsonVariant::is<bool>() const;
|
||||||
return _type == Internals::JSON_BOOLEAN;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
inline bool JsonVariant::is<char const *>() const {
|
inline bool JsonVariant::is<char const *>() const {
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
15
library.json
15
library.json
@ -2,16 +2,21 @@
|
|||||||
"name": "Json",
|
"name": "Json",
|
||||||
"keywords": "json, rest, http, web",
|
"keywords": "json, rest, http, web",
|
||||||
"description": "An elegant and efficient JSON library for embedded systems",
|
"description": "An elegant and efficient JSON library for embedded systems",
|
||||||
"repository":
|
"repository": {
|
||||||
{
|
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/bblanchon/ArduinoJson.git"
|
"url": "https://github.com/bblanchon/ArduinoJson.git"
|
||||||
},
|
},
|
||||||
"authors":
|
"version": "5.0.8",
|
||||||
{
|
"authors": {
|
||||||
"name": "Benoit Blanchon",
|
"name": "Benoit Blanchon",
|
||||||
"url": "http://blog.benoitblanchon.fr"
|
"url": "http://blog.benoitblanchon.fr"
|
||||||
},
|
},
|
||||||
|
"exclude": [
|
||||||
|
"scripts",
|
||||||
|
"src/ArduinoJson.h",
|
||||||
|
"test",
|
||||||
|
"third-party"
|
||||||
|
],
|
||||||
"frameworks": "arduino",
|
"frameworks": "arduino",
|
||||||
"platforms": "atmelavr"
|
"platforms": "*"
|
||||||
}
|
}
|
@ -1,8 +1,9 @@
|
|||||||
name=ArduinoJson
|
name=ArduinoJson
|
||||||
version=5.0.2
|
version=5.0.8
|
||||||
author=Benoit Blanchon <blog.benoitblanchon.fr>
|
author=Benoit Blanchon <blog.benoitblanchon.fr>
|
||||||
maintainer=Benoit Blanchon <blog.benoitblanchon.fr>
|
maintainer=Benoit Blanchon <blog.benoitblanchon.fr>
|
||||||
sentence=An efficient and elegant JSON library for Arduino.
|
sentence=An efficient and elegant JSON library for Arduino.
|
||||||
paragraph=Like this project? Please star it on GitHub!
|
paragraph=Like this project? Please star it on GitHub!
|
||||||
|
category=Data Processing
|
||||||
url=https://github.com/bblanchon/ArduinoJson
|
url=https://github.com/bblanchon/ArduinoJson
|
||||||
architectures=*
|
architectures=*
|
||||||
|
52
scripts/build-old-arduino-package.sh
Executable file
52
scripts/build-old-arduino-package.sh
Executable file
@ -0,0 +1,52 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
TAG=$(git describe)
|
||||||
|
OUTPUT="ArduinoJson-$TAG-old-layout.zip"
|
||||||
|
|
||||||
|
cd $(dirname $0)/..
|
||||||
|
|
||||||
|
cat > ArduinoJson.h <<END
|
||||||
|
// WARNING:
|
||||||
|
// --------
|
||||||
|
// This file is a workaround for old version of the Arduino IDE.
|
||||||
|
// If you are using Arduino IDE 1.0.6 or above, then you installed the wrong
|
||||||
|
// package of ArduinoJson.
|
||||||
|
// In that case, just delete the current installation and install the package.
|
||||||
|
|
||||||
|
END
|
||||||
|
cp ArduinoJson.h ArduinoJson.cpp
|
||||||
|
|
||||||
|
cat "include/ArduinoJson.h" | sed 's!include "!include "include/!g' >> ArduinoJson.h
|
||||||
|
|
||||||
|
find src -name "*.cpp" |
|
||||||
|
while read FILE; do
|
||||||
|
echo >> ArduinoJson.cpp
|
||||||
|
echo "// $FILE" >> ArduinoJson.cpp
|
||||||
|
echo "//" >> ArduinoJson.cpp
|
||||||
|
cat "$FILE" | sed 's!\.\./!!g' >> ArduinoJson.cpp
|
||||||
|
done
|
||||||
|
|
||||||
|
unix2dos ArduinoJson.cpp
|
||||||
|
unix2dos ArduinoJson.h
|
||||||
|
|
||||||
|
pushd ..
|
||||||
|
|
||||||
|
# remove existing file
|
||||||
|
rm -f $OUTPUT
|
||||||
|
|
||||||
|
# create zipman dos2
|
||||||
|
7z a $OUTPUT \
|
||||||
|
ArduinoJson/CHANGELOG.md \
|
||||||
|
ArduinoJson/examples \
|
||||||
|
ArduinoJson/include/ArduinoJson \
|
||||||
|
ArduinoJson/keywords.txt \
|
||||||
|
ArduinoJson/LICENSE.md \
|
||||||
|
ArduinoJson/README.md \
|
||||||
|
ArduinoJson/ArduinoJson.h \
|
||||||
|
ArduinoJson/ArduinoJson.cpp \
|
||||||
|
-x!ArduinoJson/src/CMakeLists.txt
|
||||||
|
|
||||||
|
popd
|
||||||
|
|
||||||
|
rm ArduinoJson.h
|
||||||
|
rm ArduinoJson.cpp
|
15
scripts/travis/arduino.sh
Executable file
15
scripts/travis/arduino.sh
Executable file
@ -0,0 +1,15 @@
|
|||||||
|
#!/bin/sh -eux
|
||||||
|
|
||||||
|
/sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_1.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :1 -ac -screen 0 1280x1024x16
|
||||||
|
sleep 3
|
||||||
|
export DISPLAY=:1.0
|
||||||
|
|
||||||
|
mkdir -p /tmp/arduino
|
||||||
|
curl -sS http://downloads.arduino.cc/arduino-$VERSION-linux64.tar.xz | tar xJ -C /tmp/arduino --strip 1 ||
|
||||||
|
curl -sS http://downloads.arduino.cc/arduino-$VERSION-linux64.tgz | tar xz -C /tmp/arduino --strip 1
|
||||||
|
export PATH=$PATH:/tmp/arduino/
|
||||||
|
|
||||||
|
ln -s $PWD /tmp/arduino/libraries/ArduinoJson
|
||||||
|
|
||||||
|
arduino --verify --board $BOARD $PWD/examples/JsonParserExample/JsonParserExample.ino
|
||||||
|
arduino --verify --board $BOARD $PWD/examples/JsonGeneratorExample/JsonGeneratorExample.ino
|
10
scripts/travis/clang.sh
Executable file
10
scripts/travis/clang.sh
Executable file
@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/sh -eux
|
||||||
|
|
||||||
|
export CC=clang
|
||||||
|
export CXX=clang++
|
||||||
|
|
||||||
|
curl -sS https://cmake.org/files/v3.4/cmake-3.4.0-Linux-x86_64.tar.gz | tar xz -C /tmp --strip 1
|
||||||
|
|
||||||
|
/tmp/bin/cmake .
|
||||||
|
make
|
||||||
|
make test
|
13
scripts/travis/gcc.sh
Executable file
13
scripts/travis/gcc.sh
Executable file
@ -0,0 +1,13 @@
|
|||||||
|
#!/bin/sh -eux
|
||||||
|
|
||||||
|
export CC=gcc
|
||||||
|
export CXX=g++
|
||||||
|
|
||||||
|
curl https://cmake.org/files/v3.4/cmake-3.4.0-Linux-x86_64.tar.gz | tar xz -C /tmp --strip 1
|
||||||
|
|
||||||
|
/tmp/bin/cmake -DCOVERAGE=true .
|
||||||
|
make
|
||||||
|
make test
|
||||||
|
|
||||||
|
pip install --user cpp-coveralls
|
||||||
|
coveralls --exclude third-party --gcov-options '\-lp'; fi
|
10
scripts/travis/platformio.sh
Executable file
10
scripts/travis/platformio.sh
Executable file
@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/sh -eux
|
||||||
|
|
||||||
|
pip install --user platformio
|
||||||
|
|
||||||
|
rm -r test
|
||||||
|
|
||||||
|
for EXAMPLE in JsonParserExample JsonGeneratorExample
|
||||||
|
do
|
||||||
|
platformio ci examples/$EXAMPLE/$EXAMPLE.ino -l '.' -b $BOARD
|
||||||
|
done
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#ifndef ARDUINO
|
#ifndef ARDUINO
|
||||||
|
|
||||||
@ -60,6 +61,12 @@ size_t Print::print(long value) {
|
|||||||
return print(tmp);
|
return print(tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
size_t Print::print(int value) {
|
||||||
|
char tmp[32];
|
||||||
|
sprintf(tmp, "%d", value);
|
||||||
|
return print(tmp);
|
||||||
|
}
|
||||||
|
|
||||||
size_t Print::println() { return write('\r') + write('\n'); }
|
size_t Print::println() { return write('\r') + write('\n'); }
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,25 +0,0 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
|
||||||
// MIT License
|
|
||||||
//
|
|
||||||
// Arduino JSON library
|
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
|
||||||
|
|
||||||
#ifndef ARDUINO
|
|
||||||
|
|
||||||
#include "../../include/ArduinoJson/Arduino/String.hpp"
|
|
||||||
|
|
||||||
#include <stdio.h> // for sprintf()
|
|
||||||
|
|
||||||
String::String(double value, unsigned char digits) {
|
|
||||||
char tmp[32];
|
|
||||||
sprintf(tmp, "%.*f", digits, value);
|
|
||||||
*this = tmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
String::String(long value) {
|
|
||||||
char tmp[32];
|
|
||||||
sprintf(tmp, "%ld", value);
|
|
||||||
*this = tmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
// About this file
|
// About this file
|
||||||
// ---------------
|
// ---------------
|
||||||
|
@ -1,3 +1,10 @@
|
|||||||
|
# Copyright Benoit Blanchon 2014-2016
|
||||||
|
# MIT License
|
||||||
|
#
|
||||||
|
# Arduino JSON library
|
||||||
|
# https://github.com/bblanchon/ArduinoJson
|
||||||
|
# If you like this project, please add a star!
|
||||||
|
|
||||||
file(GLOB_RECURSE HPP_FILES ../include/*.hpp)
|
file(GLOB_RECURSE HPP_FILES ../include/*.hpp)
|
||||||
file(GLOB_RECURSE IPP_FILES ../include/*.ipp)
|
file(GLOB_RECURSE IPP_FILES ../include/*.ipp)
|
||||||
file(GLOB_RECURSE CPP_FILES *.cpp)
|
file(GLOB_RECURSE CPP_FILES *.cpp)
|
||||||
@ -5,6 +12,7 @@ file(GLOB_RECURSE CPP_FILES *.cpp)
|
|||||||
if(CMAKE_CXX_COMPILER_ID MATCHES "(GNU|Clang)")
|
if(CMAKE_CXX_COMPILER_ID MATCHES "(GNU|Clang)")
|
||||||
add_definitions(
|
add_definitions(
|
||||||
-fno-exceptions
|
-fno-exceptions
|
||||||
|
-fno-rtti
|
||||||
-pedantic
|
-pedantic
|
||||||
-Wall
|
-Wall
|
||||||
-Wcast-align
|
-Wcast-align
|
||||||
@ -47,4 +55,12 @@ if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
|||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(MSVC)
|
||||||
|
add_definitions(
|
||||||
|
-D_CRT_SECURE_NO_WARNINGS
|
||||||
|
-W4)
|
||||||
|
endif()
|
||||||
|
|
||||||
add_library(ArduinoJson ${CPP_FILES} ${HPP_FILES} ${IPP_FILES})
|
add_library(ArduinoJson ${CPP_FILES} ${HPP_FILES} ${IPP_FILES})
|
||||||
|
|
||||||
|
target_include_directories(ArduinoJson INTERFACE ${CMAKE_CURRENT_LIST_DIR}/../include)
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#include "../../include/ArduinoJson/Internals/Comments.hpp"
|
#include "../../include/ArduinoJson/Internals/Comments.hpp"
|
||||||
|
|
||||||
|
@ -1,12 +1,14 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#include "../../include/ArduinoJson/Internals/Encoding.hpp"
|
#include "../../include/ArduinoJson/Internals/Encoding.hpp"
|
||||||
|
|
||||||
// How to escape special chars:
|
// How to escape special chars:
|
||||||
// _escapeTable[2*i+1] => the special char
|
// _escapeTable[2*i+1] => the special char
|
||||||
// _escapeTable[2*i] => the char to use instead
|
// _escapeTable[2*i] => the char to use instead
|
||||||
const char ArduinoJson::Internals::Encoding::_escapeTable[] = "\"\"\\\\b\bf\fn\nr\rt\t";
|
const char ArduinoJson::Internals::Encoding::_escapeTable[] =
|
||||||
|
"\"\"\\\\b\bf\fn\nr\rt\t";
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#include "../../include/ArduinoJson/Internals/IndentedPrint.hpp"
|
#include "../../include/ArduinoJson/Internals/IndentedPrint.hpp"
|
||||||
|
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#include "../../include/ArduinoJson/Internals/JsonParser.hpp"
|
#include "../../include/ArduinoJson/Internals/JsonParser.hpp"
|
||||||
|
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#include "../../include/ArduinoJson/Internals/List.hpp"
|
#include "../../include/ArduinoJson/Internals/List.hpp"
|
||||||
|
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#include "../../include/ArduinoJson/Internals/Prettyfier.hpp"
|
#include "../../include/ArduinoJson/Internals/Prettyfier.hpp"
|
||||||
|
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#include "../../include/ArduinoJson/Internals/StaticStringBuilder.hpp"
|
#include "../../include/ArduinoJson/Internals/StaticStringBuilder.hpp"
|
||||||
|
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#include "../include/ArduinoJson/JsonArray.hpp"
|
#include "../include/ArduinoJson/JsonArray.hpp"
|
||||||
|
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#include "../include/ArduinoJson/JsonBuffer.hpp"
|
#include "../include/ArduinoJson/JsonBuffer.hpp"
|
||||||
|
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#include "../include/ArduinoJson/JsonObject.hpp"
|
#include "../include/ArduinoJson/JsonObject.hpp"
|
||||||
|
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#include "../include/ArduinoJson/JsonVariant.hpp"
|
#include "../include/ArduinoJson/JsonVariant.hpp"
|
||||||
|
|
||||||
@ -16,6 +17,29 @@ using namespace ArduinoJson::Internals;
|
|||||||
|
|
||||||
namespace ArduinoJson {
|
namespace ArduinoJson {
|
||||||
|
|
||||||
|
template <typename TFloat>
|
||||||
|
static TFloat parse(const char *);
|
||||||
|
|
||||||
|
template <>
|
||||||
|
float parse<float>(const char *s) {
|
||||||
|
return static_cast<float>(strtod(s, NULL));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <>
|
||||||
|
double parse<double>(const char *s) {
|
||||||
|
return strtod(s, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <>
|
||||||
|
long parse<long>(const char *s) {
|
||||||
|
return strtol(s, NULL, 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <>
|
||||||
|
int parse<int>(const char *s) {
|
||||||
|
return atoi(s);
|
||||||
|
}
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
const char *JsonVariant::as<const char *>() const {
|
const char *JsonVariant::as<const char *>() const {
|
||||||
if (_type == JSON_UNPARSED && _content.asString &&
|
if (_type == JSON_UNPARSED && _content.asString &&
|
||||||
@ -25,29 +49,27 @@ const char *JsonVariant::as<const char *>() const {
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <>
|
JsonFloat JsonVariant::asFloat() const {
|
||||||
double JsonVariant::as<double>() const {
|
if (_type >= JSON_FLOAT_0_DECIMALS) return _content.asFloat;
|
||||||
if (_type >= JSON_DOUBLE_0_DECIMALS) return _content.asDouble;
|
|
||||||
|
|
||||||
if (_type == JSON_LONG || _type == JSON_BOOLEAN)
|
if (_type == JSON_INTEGER || _type == JSON_BOOLEAN)
|
||||||
return static_cast<double>(_content.asLong);
|
return static_cast<JsonFloat>(_content.asInteger);
|
||||||
|
|
||||||
if ((_type == JSON_STRING || _type == JSON_UNPARSED) && _content.asString)
|
if ((_type == JSON_STRING || _type == JSON_UNPARSED) && _content.asString)
|
||||||
return strtod(_content.asString, NULL);
|
return parse<JsonFloat>(_content.asString);
|
||||||
|
|
||||||
return 0.0;
|
return 0.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <>
|
JsonInteger JsonVariant::asInteger() const {
|
||||||
long JsonVariant::as<long>() const {
|
if (_type == JSON_INTEGER || _type == JSON_BOOLEAN) return _content.asInteger;
|
||||||
if (_type == JSON_LONG || _type == JSON_BOOLEAN) return _content.asLong;
|
|
||||||
|
|
||||||
if (_type >= JSON_DOUBLE_0_DECIMALS)
|
if (_type >= JSON_FLOAT_0_DECIMALS)
|
||||||
return static_cast<long>(_content.asDouble);
|
return static_cast<JsonInteger>(_content.asFloat);
|
||||||
|
|
||||||
if ((_type == JSON_STRING || _type == JSON_UNPARSED) && _content.asString) {
|
if ((_type == JSON_STRING || _type == JSON_UNPARSED) && _content.asString) {
|
||||||
if (!strcmp("true", _content.asString)) return 1;
|
if (!strcmp("true", _content.asString)) return 1;
|
||||||
return strtol(_content.asString, NULL, 10);
|
return parse<JsonInteger>(_content.asString);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0L;
|
return 0L;
|
||||||
@ -55,26 +77,28 @@ long JsonVariant::as<long>() const {
|
|||||||
|
|
||||||
template <>
|
template <>
|
||||||
String JsonVariant::as<String>() const {
|
String JsonVariant::as<String>() const {
|
||||||
|
String s;
|
||||||
if ((_type == JSON_STRING || _type == JSON_UNPARSED) &&
|
if ((_type == JSON_STRING || _type == JSON_UNPARSED) &&
|
||||||
_content.asString != NULL)
|
_content.asString != NULL)
|
||||||
return String(_content.asString);
|
s = _content.asString;
|
||||||
|
else
|
||||||
if (_type == JSON_LONG || _type == JSON_BOOLEAN)
|
|
||||||
return String(_content.asLong);
|
|
||||||
|
|
||||||
if (_type >= JSON_DOUBLE_0_DECIMALS) {
|
|
||||||
uint8_t decimals = static_cast<uint8_t>(_type - JSON_DOUBLE_0_DECIMALS);
|
|
||||||
return String(_content.asDouble, decimals);
|
|
||||||
}
|
|
||||||
|
|
||||||
String s;
|
|
||||||
printTo(s);
|
printTo(s);
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <>
|
||||||
|
bool JsonVariant::is<bool>() const {
|
||||||
|
if (_type == JSON_BOOLEAN) return true;
|
||||||
|
|
||||||
|
if (_type != JSON_UNPARSED || _content.asString == NULL) return false;
|
||||||
|
|
||||||
|
return !strcmp(_content.asString, "true") ||
|
||||||
|
!strcmp(_content.asString, "false");
|
||||||
|
}
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
bool JsonVariant::is<signed long>() const {
|
bool JsonVariant::is<signed long>() const {
|
||||||
if (_type == JSON_LONG) return true;
|
if (_type == JSON_INTEGER) return true;
|
||||||
|
|
||||||
if (_type != JSON_UNPARSED || _content.asString == NULL) return false;
|
if (_type != JSON_UNPARSED || _content.asString == NULL) return false;
|
||||||
|
|
||||||
@ -87,7 +111,7 @@ bool JsonVariant::is<signed long>() const {
|
|||||||
|
|
||||||
template <>
|
template <>
|
||||||
bool JsonVariant::is<double>() const {
|
bool JsonVariant::is<double>() const {
|
||||||
if (_type >= JSON_DOUBLE_0_DECIMALS) return true;
|
if (_type >= JSON_FLOAT_0_DECIMALS) return true;
|
||||||
|
|
||||||
if (_type != JSON_UNPARSED || _content.asString == NULL) return false;
|
if (_type != JSON_UNPARSED || _content.asString == NULL) return false;
|
||||||
|
|
||||||
@ -111,15 +135,15 @@ void JsonVariant::writeTo(JsonWriter &writer) const {
|
|||||||
else if (_type == JSON_UNPARSED)
|
else if (_type == JSON_UNPARSED)
|
||||||
writer.writeRaw(_content.asString);
|
writer.writeRaw(_content.asString);
|
||||||
|
|
||||||
else if (_type == JSON_LONG)
|
else if (_type == JSON_INTEGER)
|
||||||
writer.writeLong(_content.asLong);
|
writer.writeInteger(_content.asInteger);
|
||||||
|
|
||||||
else if (_type == JSON_BOOLEAN)
|
else if (_type == JSON_BOOLEAN)
|
||||||
writer.writeBoolean(_content.asLong != 0);
|
writer.writeBoolean(_content.asInteger != 0);
|
||||||
|
|
||||||
else if (_type >= JSON_DOUBLE_0_DECIMALS) {
|
else if (_type >= JSON_FLOAT_0_DECIMALS) {
|
||||||
uint8_t decimals = static_cast<uint8_t>(_type - JSON_DOUBLE_0_DECIMALS);
|
uint8_t decimals = static_cast<uint8_t>(_type - JSON_FLOAT_0_DECIMALS);
|
||||||
writer.writeDouble(_content.asDouble, decimals);
|
writer.writeFloat(_content.asFloat, decimals);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
#include <ArduinoJson.h>
|
#include <ArduinoJson.h>
|
||||||
@ -71,6 +72,26 @@ TEST_F(ArduinoStringTests, JsonObject_SetKeyValue) {
|
|||||||
ASSERT_STREQ("world", object["hello"]);
|
ASSERT_STREQ("world", object["hello"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(ArduinoStringTests, JsonObject_SetToArraySubscript) {
|
||||||
|
JsonArray &arr = _jsonBuffer.createArray();
|
||||||
|
arr.add("world");
|
||||||
|
|
||||||
|
JsonObject &object = _jsonBuffer.createObject();
|
||||||
|
object.set(String("hello"), arr[0]);
|
||||||
|
|
||||||
|
ASSERT_STREQ("world", object["hello"]);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(ArduinoStringTests, JsonObject_SetToObjectSubscript) {
|
||||||
|
JsonObject &arr = _jsonBuffer.createObject();
|
||||||
|
arr.set("x", "world");
|
||||||
|
|
||||||
|
JsonObject &object = _jsonBuffer.createObject();
|
||||||
|
object.set(String("hello"), arr["x"]);
|
||||||
|
|
||||||
|
ASSERT_STREQ("world", object["hello"]);
|
||||||
|
}
|
||||||
|
|
||||||
TEST_F(ArduinoStringTests, JsonObject_Get) {
|
TEST_F(ArduinoStringTests, JsonObject_Get) {
|
||||||
char json[] = "{\"key\":\"value\"}";
|
char json[] = "{\"key\":\"value\"}";
|
||||||
const JsonObject &object = _jsonBuffer.parseObject(json);
|
const JsonObject &object = _jsonBuffer.parseObject(json);
|
||||||
|
@ -1,10 +1,15 @@
|
|||||||
|
# Copyright Benoit Blanchon 2014-2016
|
||||||
|
# MIT License
|
||||||
|
#
|
||||||
|
# Arduino JSON library
|
||||||
|
# https://github.com/bblanchon/ArduinoJson
|
||||||
|
# If you like this project, please add a star!
|
||||||
|
|
||||||
set(GTEST_DIR ../third-party/gtest-1.7.0)
|
set(GTEST_DIR ../third-party/gtest-1.7.0)
|
||||||
|
|
||||||
file(GLOB_RECURSE INC_FILES ../include/*.h)
|
|
||||||
file(GLOB TESTS_FILES *.hpp *.cpp)
|
file(GLOB TESTS_FILES *.hpp *.cpp)
|
||||||
|
|
||||||
include_directories(
|
include_directories(
|
||||||
../include
|
|
||||||
${GTEST_DIR}
|
${GTEST_DIR}
|
||||||
${GTEST_DIR}/include)
|
${GTEST_DIR}/include)
|
||||||
|
|
||||||
@ -17,7 +22,6 @@ endif()
|
|||||||
|
|
||||||
add_executable(ArduinoJsonTests
|
add_executable(ArduinoJsonTests
|
||||||
${TESTS_FILES}
|
${TESTS_FILES}
|
||||||
${INC_FILES}
|
|
||||||
${GTEST_DIR}/src/gtest-all.cc
|
${GTEST_DIR}/src/gtest-all.cc
|
||||||
${GTEST_DIR}/src/gtest_main.cc)
|
${GTEST_DIR}/src/gtest_main.cc)
|
||||||
|
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
#include <ArduinoJson.h>
|
#include <ArduinoJson.h>
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
|
|
||||||
@ -22,9 +23,9 @@ TEST_F(DynamicJsonBuffer_Basic_Tests, InitialSizeIsZero) {
|
|||||||
|
|
||||||
TEST_F(DynamicJsonBuffer_Basic_Tests, SizeIncreasesAfterAlloc) {
|
TEST_F(DynamicJsonBuffer_Basic_Tests, SizeIncreasesAfterAlloc) {
|
||||||
buffer.alloc(1);
|
buffer.alloc(1);
|
||||||
ASSERT_LE(1, buffer.size());
|
ASSERT_LE(1U, buffer.size());
|
||||||
buffer.alloc(1);
|
buffer.alloc(1);
|
||||||
ASSERT_LE(2, buffer.size());
|
ASSERT_LE(2U, buffer.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(DynamicJsonBuffer_Basic_Tests, ReturnDifferentPointer) {
|
TEST_F(DynamicJsonBuffer_Basic_Tests, ReturnDifferentPointer) {
|
||||||
|
@ -1,23 +1,29 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
#include <ArduinoJson.h>
|
#include <ArduinoJson.h>
|
||||||
|
|
||||||
class DynamicJsonBuffer_NoMemory_Tests : public ::testing::Test {
|
class NoMemoryAllocator {
|
||||||
class NoMemoryAllocator {
|
|
||||||
public:
|
public:
|
||||||
void* allocate(size_t) { return NULL; }
|
void* allocate(size_t) { return NULL; }
|
||||||
void deallocate(void*) {}
|
void deallocate(void*) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class DynamicJsonBuffer_NoMemory_Tests : public ::testing::Test {
|
||||||
protected:
|
protected:
|
||||||
Internals::BlockJsonBuffer<NoMemoryAllocator> _jsonBuffer;
|
Internals::BlockJsonBuffer<NoMemoryAllocator> _jsonBuffer;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
TEST_F(DynamicJsonBuffer_NoMemory_Tests, FixCodeCoverage) {
|
||||||
|
// call this function to fix code coverage
|
||||||
|
NoMemoryAllocator().deallocate(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
TEST_F(DynamicJsonBuffer_NoMemory_Tests, CreateArray) {
|
TEST_F(DynamicJsonBuffer_NoMemory_Tests, CreateArray) {
|
||||||
ASSERT_FALSE(_jsonBuffer.createArray().success());
|
ASSERT_FALSE(_jsonBuffer.createArray().success());
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
#include <ArduinoJson.h>
|
#include <ArduinoJson.h>
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
#define ARDUINOJSON_ENABLE_STD_STREAM
|
#define ARDUINOJSON_ENABLE_STD_STREAM
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
#include <ArduinoJson.h>
|
#include <ArduinoJson.h>
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
#include <ArduinoJson.h>
|
#include <ArduinoJson.h>
|
||||||
|
16
test/Issue214.cpp
Normal file
16
test/Issue214.cpp
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
|
// MIT License
|
||||||
|
//
|
||||||
|
// Arduino JSON library
|
||||||
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
|
#include <ArduinoJson.h>
|
||||||
|
#include <gtest/gtest.h>
|
||||||
|
|
||||||
|
TEST(Issue214, IsBool) {
|
||||||
|
char json[] = "{\"ota\": {\"enabled\": true}}";
|
||||||
|
StaticJsonBuffer<JSON_OBJECT_SIZE(1) + JSON_OBJECT_SIZE(1)> jsonBuffer;
|
||||||
|
JsonObject& parsedJson = jsonBuffer.parseObject(json);
|
||||||
|
ASSERT_TRUE(parsedJson["ota"]["enabled"].is<bool>());
|
||||||
|
}
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
#include <ArduinoJson.h>
|
#include <ArduinoJson.h>
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
#include <ArduinoJson.h>
|
#include <ArduinoJson.h>
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
#include <limits.h> // for LONG_MAX
|
#include <limits.h> // for LONG_MAX
|
||||||
|
91
test/JsonArray_Add_Tests.cpp
Normal file
91
test/JsonArray_Add_Tests.cpp
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
|
// MIT License
|
||||||
|
//
|
||||||
|
// Arduino JSON library
|
||||||
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
|
#include <gtest/gtest.h>
|
||||||
|
#define ARDUINOJSON_ENABLE_STD_STREAM
|
||||||
|
#include <ArduinoJson.h>
|
||||||
|
|
||||||
|
class JsonArray_Add_Tests : public ::testing::Test {
|
||||||
|
protected:
|
||||||
|
JsonArray_Add_Tests() : _array(_jsonBuffer.createArray()) {}
|
||||||
|
|
||||||
|
DynamicJsonBuffer _jsonBuffer;
|
||||||
|
JsonArray& _array;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define TEST_(name) TEST_F(JsonArray_Add_Tests, name)
|
||||||
|
|
||||||
|
TEST_(SizeIncreased_WhenValuesAreAdded) {
|
||||||
|
_array.add("hello");
|
||||||
|
EXPECT_EQ(1U, _array.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_(StoreInteger) {
|
||||||
|
_array.add(123);
|
||||||
|
EXPECT_EQ(123, _array[0].as<int>());
|
||||||
|
EXPECT_TRUE(_array[0].is<int>());
|
||||||
|
EXPECT_FALSE(_array[0].is<double>());
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_(StoreDouble) {
|
||||||
|
_array.add(123.45);
|
||||||
|
EXPECT_EQ(123.45, _array[0].as<double>());
|
||||||
|
EXPECT_TRUE(_array[0].is<double>());
|
||||||
|
EXPECT_FALSE(_array[0].is<int>());
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_(StoreBoolean) {
|
||||||
|
_array.add(true);
|
||||||
|
EXPECT_EQ(true, _array[0].as<bool>());
|
||||||
|
EXPECT_TRUE(_array[0].is<bool>());
|
||||||
|
EXPECT_FALSE(_array[0].is<int>());
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_(StoreString) {
|
||||||
|
_array.add("hello");
|
||||||
|
EXPECT_STREQ("hello", _array[0].as<const char*>());
|
||||||
|
EXPECT_TRUE(_array[0].is<const char*>());
|
||||||
|
EXPECT_FALSE(_array[0].is<int>());
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_(StoreNestedArray) {
|
||||||
|
JsonArray& arr = _jsonBuffer.createArray();
|
||||||
|
|
||||||
|
_array.add(arr);
|
||||||
|
|
||||||
|
EXPECT_EQ(&arr, &_array[0].as<JsonArray&>());
|
||||||
|
EXPECT_TRUE(_array[0].is<JsonArray&>());
|
||||||
|
EXPECT_FALSE(_array[0].is<int>());
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_(StoreNestedObject) {
|
||||||
|
JsonObject& obj = _jsonBuffer.createObject();
|
||||||
|
|
||||||
|
_array.add(obj);
|
||||||
|
|
||||||
|
EXPECT_EQ(&obj, &_array[0].as<JsonObject&>());
|
||||||
|
EXPECT_TRUE(_array[0].is<JsonObject&>());
|
||||||
|
EXPECT_FALSE(_array[0].is<int>());
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_(StoreArraySubscript) {
|
||||||
|
JsonArray& arr = _jsonBuffer.createArray();
|
||||||
|
arr.add("hello");
|
||||||
|
|
||||||
|
_array.add(arr[0]);
|
||||||
|
|
||||||
|
EXPECT_STREQ("hello", _array[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_(StoreObjectSubscript) {
|
||||||
|
JsonObject& obj = _jsonBuffer.createObject();
|
||||||
|
obj["x"] = "hello";
|
||||||
|
|
||||||
|
_array.add(obj["x"]);
|
||||||
|
|
||||||
|
EXPECT_STREQ("hello", _array[0]);
|
||||||
|
}
|
42
test/JsonArray_Basic_Tests.cpp
Normal file
42
test/JsonArray_Basic_Tests.cpp
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
|
// MIT License
|
||||||
|
//
|
||||||
|
// Arduino JSON library
|
||||||
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
|
#include <gtest/gtest.h>
|
||||||
|
#define ARDUINOJSON_ENABLE_STD_STREAM
|
||||||
|
#include <ArduinoJson.h>
|
||||||
|
|
||||||
|
#define TEST_(name) TEST(JsonArray_Basic_Tests, name)
|
||||||
|
|
||||||
|
TEST_(SuccessIsTrue) {
|
||||||
|
DynamicJsonBuffer _jsonBuffer;
|
||||||
|
JsonArray& array = _jsonBuffer.createArray();
|
||||||
|
|
||||||
|
EXPECT_TRUE(array.success());
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_(InitialSizeIsZero) {
|
||||||
|
DynamicJsonBuffer _jsonBuffer;
|
||||||
|
JsonArray& array = _jsonBuffer.createArray();
|
||||||
|
|
||||||
|
EXPECT_EQ(0U, array.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_(CreateNestedArray) {
|
||||||
|
DynamicJsonBuffer _jsonBuffer;
|
||||||
|
JsonArray& array = _jsonBuffer.createArray();
|
||||||
|
|
||||||
|
JsonArray& arr = array.createNestedArray();
|
||||||
|
EXPECT_EQ(&arr, &array[0].as<JsonArray&>());
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_(CreateNestedObject) {
|
||||||
|
DynamicJsonBuffer _jsonBuffer;
|
||||||
|
JsonArray& array = _jsonBuffer.createArray();
|
||||||
|
|
||||||
|
JsonObject& obj = array.createNestedObject();
|
||||||
|
EXPECT_EQ(&obj, &array[0].as<JsonObject&>());
|
||||||
|
}
|
@ -1,180 +0,0 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
|
||||||
// MIT License
|
|
||||||
//
|
|
||||||
// Arduino JSON library
|
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
|
||||||
|
|
||||||
#include <gtest/gtest.h>
|
|
||||||
#include <ArduinoJson.h>
|
|
||||||
|
|
||||||
class JsonArray_Container_Tests : public ::testing::Test {
|
|
||||||
protected:
|
|
||||||
JsonArray_Container_Tests() : _array(_jsonBuffer.createArray()) {}
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
void firstMustEqual(T expected) {
|
|
||||||
itemMustEqual(0, expected);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
void secondMustEqual(T expected) {
|
|
||||||
itemMustEqual(1, expected);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
void firstMustReference(const T& expected) {
|
|
||||||
itemMustReference(0, expected);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
void secondMustReference(const T& expected) {
|
|
||||||
itemMustReference(1, expected);
|
|
||||||
}
|
|
||||||
|
|
||||||
void sizeMustBe(int expected) { EXPECT_EQ(expected, _array.size()); }
|
|
||||||
|
|
||||||
DynamicJsonBuffer _jsonBuffer;
|
|
||||||
JsonArray& _array;
|
|
||||||
|
|
||||||
private:
|
|
||||||
template <typename T>
|
|
||||||
void itemMustEqual(int index, T expected) {
|
|
||||||
EXPECT_EQ(expected, _array[index].as<T>());
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
void itemMustReference(int index, const T& expected) {
|
|
||||||
EXPECT_EQ(&expected, &_array[index].as<T&>());
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
void JsonArray_Container_Tests::itemMustEqual(int index, const char* expected) {
|
|
||||||
EXPECT_STREQ(expected, _array[index].asString());
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(JsonArray_Container_Tests, SuccessIsTrue) {
|
|
||||||
EXPECT_TRUE(_array.success());
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(JsonArray_Container_Tests, InitialSizeIsZero) { sizeMustBe(0); }
|
|
||||||
|
|
||||||
TEST_F(JsonArray_Container_Tests, Grow_WhenValuesAreAdded) {
|
|
||||||
_array.add("hello");
|
|
||||||
sizeMustBe(1);
|
|
||||||
|
|
||||||
_array.add("world");
|
|
||||||
sizeMustBe(2);
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(JsonArray_Container_Tests, DontGrow_WhenValuesAreReplaced) {
|
|
||||||
_array.add("hello");
|
|
||||||
_array[0] = "world";
|
|
||||||
sizeMustBe(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(JsonArray_Container_Tests, CanStoreIntegers) {
|
|
||||||
_array.add(123);
|
|
||||||
_array.add(456);
|
|
||||||
|
|
||||||
firstMustEqual(123);
|
|
||||||
secondMustEqual(456);
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(JsonArray_Container_Tests, CanStoreDoubles) {
|
|
||||||
_array.add(123.45);
|
|
||||||
_array.add(456.78);
|
|
||||||
|
|
||||||
firstMustEqual(123.45);
|
|
||||||
secondMustEqual(456.78);
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(JsonArray_Container_Tests, CanStoreBooleans) {
|
|
||||||
_array.add(true);
|
|
||||||
_array.add(false);
|
|
||||||
|
|
||||||
firstMustEqual(true);
|
|
||||||
secondMustEqual(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(JsonArray_Container_Tests, CanStoreStrings) {
|
|
||||||
_array.add("hello");
|
|
||||||
_array.add("world");
|
|
||||||
|
|
||||||
firstMustEqual("hello");
|
|
||||||
secondMustEqual("world");
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(JsonArray_Container_Tests, CanStoreNestedArrays) {
|
|
||||||
JsonArray& inner_array1 = _jsonBuffer.createArray();
|
|
||||||
JsonArray& inner_array2 = _jsonBuffer.createArray();
|
|
||||||
|
|
||||||
_array.add(inner_array1);
|
|
||||||
_array.add(inner_array2);
|
|
||||||
|
|
||||||
firstMustReference(inner_array1);
|
|
||||||
secondMustReference(inner_array2);
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(JsonArray_Container_Tests, CanStoreNestedObjects) {
|
|
||||||
JsonObject& innerObject1 = _jsonBuffer.createObject();
|
|
||||||
JsonObject& innerObject2 = _jsonBuffer.createObject();
|
|
||||||
|
|
||||||
_array.add(innerObject1);
|
|
||||||
_array.add(innerObject2);
|
|
||||||
|
|
||||||
firstMustReference(innerObject1);
|
|
||||||
secondMustReference(innerObject2);
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(JsonArray_Container_Tests, CanCreateNestedArrays) {
|
|
||||||
JsonArray& inner_array1 = _array.createNestedArray();
|
|
||||||
JsonArray& inner_array2 = _array.createNestedArray();
|
|
||||||
|
|
||||||
firstMustReference(inner_array1);
|
|
||||||
secondMustReference(inner_array2);
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(JsonArray_Container_Tests, CanCreateNestedObjects) {
|
|
||||||
JsonObject& innerObject1 = _array.createNestedObject();
|
|
||||||
JsonObject& innerObject2 = _array.createNestedObject();
|
|
||||||
|
|
||||||
firstMustReference(innerObject1);
|
|
||||||
secondMustReference(innerObject2);
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(JsonArray_Container_Tests, RemoveFirstElement) {
|
|
||||||
_array.add("one");
|
|
||||||
_array.add("two");
|
|
||||||
_array.add("three");
|
|
||||||
|
|
||||||
_array.removeAt(0);
|
|
||||||
|
|
||||||
sizeMustBe(2);
|
|
||||||
firstMustEqual("two");
|
|
||||||
secondMustEqual("three");
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(JsonArray_Container_Tests, RemoveMiddleElement) {
|
|
||||||
_array.add("one");
|
|
||||||
_array.add("two");
|
|
||||||
_array.add("three");
|
|
||||||
|
|
||||||
_array.removeAt(1);
|
|
||||||
|
|
||||||
sizeMustBe(2);
|
|
||||||
firstMustEqual("one");
|
|
||||||
secondMustEqual("three");
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(JsonArray_Container_Tests, RemoveLastElement) {
|
|
||||||
_array.add("one");
|
|
||||||
_array.add("two");
|
|
||||||
_array.add("three");
|
|
||||||
|
|
||||||
_array.removeAt(2);
|
|
||||||
|
|
||||||
sizeMustBe(2);
|
|
||||||
firstMustEqual("one");
|
|
||||||
secondMustEqual("two");
|
|
||||||
}
|
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
#include <ArduinoJson.h>
|
#include <ArduinoJson.h>
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
#include <ArduinoJson.h>
|
#include <ArduinoJson.h>
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
#include <ArduinoJson.h>
|
#include <ArduinoJson.h>
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
// MIT License
|
// MIT License
|
||||||
//
|
//
|
||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
#include <ArduinoJson.h>
|
#include <ArduinoJson.h>
|
||||||
|
47
test/JsonArray_Remove_Tests.cpp
Normal file
47
test/JsonArray_Remove_Tests.cpp
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
|
// MIT License
|
||||||
|
//
|
||||||
|
// Arduino JSON library
|
||||||
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
|
#include <gtest/gtest.h>
|
||||||
|
#include <ArduinoJson.h>
|
||||||
|
|
||||||
|
class JsonArray_Remove_Tests : public ::testing::Test {
|
||||||
|
protected:
|
||||||
|
JsonArray_Remove_Tests() : _array(_jsonBuffer.createArray()) {
|
||||||
|
_array.add("one");
|
||||||
|
_array.add("two");
|
||||||
|
_array.add("three");
|
||||||
|
}
|
||||||
|
|
||||||
|
DynamicJsonBuffer _jsonBuffer;
|
||||||
|
JsonArray& _array;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define TEST_(name) TEST_F(JsonArray_Remove_Tests, name)
|
||||||
|
|
||||||
|
TEST_(RemoveFirstElement) {
|
||||||
|
_array.removeAt(0);
|
||||||
|
|
||||||
|
EXPECT_EQ(2, _array.size());
|
||||||
|
EXPECT_STREQ("two", _array[0]);
|
||||||
|
EXPECT_STREQ("three", _array[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_(RemoveMiddleElement) {
|
||||||
|
_array.removeAt(1);
|
||||||
|
|
||||||
|
EXPECT_EQ(2, _array.size());
|
||||||
|
EXPECT_STREQ("one", _array[0]);
|
||||||
|
EXPECT_STREQ("three", _array[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_(RemoveLastElement) {
|
||||||
|
_array.removeAt(2);
|
||||||
|
|
||||||
|
EXPECT_EQ(2, _array.size());
|
||||||
|
EXPECT_STREQ("one", _array[0]);
|
||||||
|
EXPECT_STREQ("two", _array[1]);
|
||||||
|
}
|
91
test/JsonArray_Set_Tests.cpp
Normal file
91
test/JsonArray_Set_Tests.cpp
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
|
// MIT License
|
||||||
|
//
|
||||||
|
// Arduino JSON library
|
||||||
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
|
#include <gtest/gtest.h>
|
||||||
|
#define ARDUINOJSON_ENABLE_STD_STREAM
|
||||||
|
#include <ArduinoJson.h>
|
||||||
|
|
||||||
|
class JsonArray_Set_Tests : public ::testing::Test {
|
||||||
|
protected:
|
||||||
|
JsonArray_Set_Tests() : _array(_jsonBuffer.createArray()) { _array.add(0); }
|
||||||
|
|
||||||
|
DynamicJsonBuffer _jsonBuffer;
|
||||||
|
JsonArray& _array;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define TEST_(name) TEST_F(JsonArray_Set_Tests, name)
|
||||||
|
|
||||||
|
TEST_(SizeIsUnchanged) {
|
||||||
|
_array.set(0, "hello");
|
||||||
|
EXPECT_EQ(1U, _array.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_(StoreInteger) {
|
||||||
|
_array.set(0, 123);
|
||||||
|
EXPECT_EQ(123, _array[0].as<int>());
|
||||||
|
EXPECT_TRUE(_array[0].is<int>());
|
||||||
|
EXPECT_FALSE(_array[0].is<double>());
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_(StoreDouble) {
|
||||||
|
_array.set(0, 123.45);
|
||||||
|
EXPECT_EQ(123.45, _array[0].as<double>());
|
||||||
|
EXPECT_TRUE(_array[0].is<double>());
|
||||||
|
EXPECT_FALSE(_array[0].is<int>());
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_(StoreBoolean) {
|
||||||
|
_array.set(0, true);
|
||||||
|
EXPECT_EQ(true, _array[0].as<bool>());
|
||||||
|
EXPECT_TRUE(_array[0].is<bool>());
|
||||||
|
EXPECT_FALSE(_array[0].is<int>());
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_(StoreString) {
|
||||||
|
_array.set(0, "hello");
|
||||||
|
EXPECT_STREQ("hello", _array[0].as<const char*>());
|
||||||
|
EXPECT_TRUE(_array[0].is<const char*>());
|
||||||
|
EXPECT_FALSE(_array[0].is<int>());
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_(StoreNestedArray) {
|
||||||
|
JsonArray& arr = _jsonBuffer.createArray();
|
||||||
|
|
||||||
|
_array.set(0, arr);
|
||||||
|
|
||||||
|
EXPECT_EQ(&arr, &_array[0].as<JsonArray&>());
|
||||||
|
EXPECT_TRUE(_array[0].is<JsonArray&>());
|
||||||
|
EXPECT_FALSE(_array[0].is<int>());
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_(StoreNestedObject) {
|
||||||
|
JsonObject& obj = _jsonBuffer.createObject();
|
||||||
|
|
||||||
|
_array.set(0, obj);
|
||||||
|
|
||||||
|
EXPECT_EQ(&obj, &_array[0].as<JsonObject&>());
|
||||||
|
EXPECT_TRUE(_array[0].is<JsonObject&>());
|
||||||
|
EXPECT_FALSE(_array[0].is<int>());
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_(StoreArraySubscript) {
|
||||||
|
JsonArray& arr = _jsonBuffer.createArray();
|
||||||
|
arr.add("hello");
|
||||||
|
|
||||||
|
_array.set(0, arr[0]);
|
||||||
|
|
||||||
|
EXPECT_STREQ("hello", _array[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_(StoreObjectSubscript) {
|
||||||
|
JsonObject& obj = _jsonBuffer.createObject();
|
||||||
|
obj["x"] = "hello";
|
||||||
|
|
||||||
|
_array.set(0, obj["x"]);
|
||||||
|
|
||||||
|
EXPECT_STREQ("hello", _array[0]);
|
||||||
|
}
|
93
test/JsonArray_Subscript_Tests.cpp
Normal file
93
test/JsonArray_Subscript_Tests.cpp
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
|
// MIT License
|
||||||
|
//
|
||||||
|
// Arduino JSON library
|
||||||
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
|
#include <gtest/gtest.h>
|
||||||
|
#define ARDUINOJSON_ENABLE_STD_STREAM
|
||||||
|
#include <ArduinoJson.h>
|
||||||
|
|
||||||
|
class JsonArray_Subscript_Tests : public ::testing::Test {
|
||||||
|
protected:
|
||||||
|
JsonArray_Subscript_Tests() : _array(_jsonBuffer.createArray()) {
|
||||||
|
_array.add(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
DynamicJsonBuffer _jsonBuffer;
|
||||||
|
JsonArray& _array;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define TEST_(name) TEST_F(JsonArray_Subscript_Tests, name)
|
||||||
|
|
||||||
|
TEST_(SizeIsUnchanged) {
|
||||||
|
_array[0] = "hello";
|
||||||
|
EXPECT_EQ(1U, _array.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_(StoreInteger) {
|
||||||
|
_array[0] = 123;
|
||||||
|
EXPECT_EQ(123, _array[0].as<int>());
|
||||||
|
EXPECT_TRUE(_array[0].is<int>());
|
||||||
|
EXPECT_FALSE(_array[0].is<double>());
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_(StoreDouble) {
|
||||||
|
_array[0] = 123.45;
|
||||||
|
EXPECT_EQ(123.45, _array[0].as<double>());
|
||||||
|
EXPECT_TRUE(_array[0].is<double>());
|
||||||
|
EXPECT_FALSE(_array[0].is<int>());
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_(StoreBoolean) {
|
||||||
|
_array[0] = true;
|
||||||
|
EXPECT_EQ(true, _array[0].as<bool>());
|
||||||
|
EXPECT_TRUE(_array[0].is<bool>());
|
||||||
|
EXPECT_FALSE(_array[0].is<int>());
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_(StoreString) {
|
||||||
|
_array[0] = "hello";
|
||||||
|
EXPECT_STREQ("hello", _array[0].as<const char*>());
|
||||||
|
EXPECT_TRUE(_array[0].is<const char*>());
|
||||||
|
EXPECT_FALSE(_array[0].is<int>());
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_(StoreNestedArray) {
|
||||||
|
JsonArray& arr = _jsonBuffer.createArray();
|
||||||
|
|
||||||
|
_array[0] = arr;
|
||||||
|
|
||||||
|
EXPECT_EQ(&arr, &_array[0].as<JsonArray&>());
|
||||||
|
EXPECT_TRUE(_array[0].is<JsonArray&>());
|
||||||
|
EXPECT_FALSE(_array[0].is<int>());
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_(StoreNestedObject) {
|
||||||
|
JsonObject& obj = _jsonBuffer.createObject();
|
||||||
|
|
||||||
|
_array[0] = obj;
|
||||||
|
|
||||||
|
EXPECT_EQ(&obj, &_array[0].as<JsonObject&>());
|
||||||
|
EXPECT_TRUE(_array[0].is<JsonObject&>());
|
||||||
|
EXPECT_FALSE(_array[0].is<int>());
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_(StoreArraySubscript) {
|
||||||
|
JsonArray& arr = _jsonBuffer.createArray();
|
||||||
|
arr.add("hello");
|
||||||
|
|
||||||
|
_array[0] = arr[0];
|
||||||
|
|
||||||
|
EXPECT_STREQ("hello", _array[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_(StoreObjectSubscript) {
|
||||||
|
JsonObject& obj = _jsonBuffer.createObject();
|
||||||
|
obj["x"] = "hello";
|
||||||
|
|
||||||
|
_array[0] = obj["x"];
|
||||||
|
|
||||||
|
EXPECT_STREQ("hello", _array[0]);
|
||||||
|
}
|
25
test/JsonObject_Basic_Tests.cpp
Normal file
25
test/JsonObject_Basic_Tests.cpp
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
// Copyright Benoit Blanchon 2014-2016
|
||||||
|
// MIT License
|
||||||
|
//
|
||||||
|
// Arduino JSON library
|
||||||
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
// If you like this project, please add a star!
|
||||||
|
|
||||||
|
#include <gtest/gtest.h>
|
||||||
|
#include <ArduinoJson.h>
|
||||||
|
|
||||||
|
#define TEST_(name) TEST(JsonObject_Basic_Tests, name)
|
||||||
|
|
||||||
|
TEST_(InitialSizeIsZero) {
|
||||||
|
DynamicJsonBuffer _jsonBuffer;
|
||||||
|
JsonObject& _object = _jsonBuffer.createObject();
|
||||||
|
|
||||||
|
EXPECT_EQ(0, _object.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_(SuccessIsTrue) {
|
||||||
|
DynamicJsonBuffer _jsonBuffer;
|
||||||
|
JsonObject& _object = _jsonBuffer.createObject();
|
||||||
|
|
||||||
|
EXPECT_TRUE(_object.success());
|
||||||
|
}
|
@ -1,121 +0,0 @@
|
|||||||
// Copyright Benoit Blanchon 2014-2015
|
|
||||||
// MIT License
|
|
||||||
//
|
|
||||||
// Arduino JSON library
|
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
|
||||||
|
|
||||||
#include <gtest/gtest.h>
|
|
||||||
#include <ArduinoJson.h>
|
|
||||||
|
|
||||||
class JsonObject_Container_Tests : public ::testing::Test {
|
|
||||||
public:
|
|
||||||
JsonObject_Container_Tests() : _object(_jsonBuffer.createObject()) {}
|
|
||||||
|
|
||||||
protected:
|
|
||||||
DynamicJsonBuffer _jsonBuffer;
|
|
||||||
JsonObject& _object;
|
|
||||||
};
|
|
||||||
|
|
||||||
TEST_F(JsonObject_Container_Tests, InitialSizeIsZero) {
|
|
||||||
EXPECT_EQ(0, _object.size());
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(JsonObject_Container_Tests, Grow_WhenValuesAreAdded) {
|
|
||||||
_object["hello"] = 1;
|
|
||||||
EXPECT_EQ(1, _object.size());
|
|
||||||
|
|
||||||
_object.set("world", 2);
|
|
||||||
EXPECT_EQ(2, _object.size());
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(JsonObject_Container_Tests, DoNotGrow_WhenSameValueIsAdded) {
|
|
||||||
_object["hello"] = 1;
|
|
||||||
EXPECT_EQ(1, _object.size());
|
|
||||||
|
|
||||||
_object["hello"] = 2;
|
|
||||||
EXPECT_EQ(1, _object.size());
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(JsonObject_Container_Tests, Shrink_WhenValuesAreRemoved) {
|
|
||||||
_object["hello"] = 1;
|
|
||||||
_object["world"] = 2;
|
|
||||||
|
|
||||||
_object.remove("hello");
|
|
||||||
EXPECT_EQ(1, _object.size());
|
|
||||||
|
|
||||||
_object.remove("world");
|
|
||||||
EXPECT_EQ(0, _object.size());
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(JsonObject_Container_Tests,
|
|
||||||
DoNotShrink_WhenRemoveIsCalledWithAWrongKey) {
|
|
||||||
_object["hello"] = 1;
|
|
||||||
_object["world"] = 2;
|
|
||||||
|
|
||||||
_object.remove(":-P");
|
|
||||||
|
|
||||||
EXPECT_EQ(2, _object.size());
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(JsonObject_Container_Tests, CanStoreIntegers) {
|
|
||||||
_object["hello"] = 123;
|
|
||||||
_object.set("world", 456);
|
|
||||||
|
|
||||||
EXPECT_EQ(123, _object["hello"].as<int>());
|
|
||||||
EXPECT_EQ(456, _object["world"].as<int>());
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(JsonObject_Container_Tests, CanStoreDoubles) {
|
|
||||||
_object["hello"] = 123.45;
|
|
||||||
_object.set("world", 456.78);
|
|
||||||
|
|
||||||
EXPECT_EQ(123.45, _object["hello"].as<double>());
|
|
||||||
EXPECT_EQ(456.78, _object["world"].as<double>());
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(JsonObject_Container_Tests, CanStoreBooleans) {
|
|
||||||
_object["hello"] = true;
|
|
||||||
_object.set("world", false);
|
|
||||||
|
|
||||||
EXPECT_TRUE(_object["hello"].as<bool>());
|
|
||||||
EXPECT_FALSE(_object["world"].as<bool>());
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(JsonObject_Container_Tests, CanStoreStrings) {
|
|
||||||
_object["hello"] = "h3110";
|
|
||||||
_object.set("world", "w0r1d");
|
|
||||||
|
|
||||||
EXPECT_STREQ("h3110", _object["hello"].as<const char*>());
|
|
||||||
EXPECT_STREQ("w0r1d", _object["world"].as<const char*>());
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(JsonObject_Container_Tests, CanStoreArrays) {
|
|
||||||
JsonArray& array1 = _jsonBuffer.createArray();
|
|
||||||
JsonArray& array2 = _jsonBuffer.createArray();
|
|
||||||
|
|
||||||
_object["hello"] = array1;
|
|
||||||
_object.set("world", array2);
|
|
||||||
|
|
||||||
EXPECT_EQ(&array1, &_object["hello"].asArray());
|
|
||||||
EXPECT_EQ(&array2, &_object["world"].asArray());
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(JsonObject_Container_Tests, CanStoreObjects) {
|
|
||||||
JsonObject& object1 = _jsonBuffer.createObject();
|
|
||||||
JsonObject& object2 = _jsonBuffer.createObject();
|
|
||||||
|
|
||||||
_object["hello"] = object1;
|
|
||||||
_object.set("world", object2);
|
|
||||||
|
|
||||||
EXPECT_EQ(&object1, &_object["hello"].asObject());
|
|
||||||
EXPECT_EQ(&object2, &_object["world"].asObject());
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(JsonObject_Container_Tests, ContainsKeyReturnsFalseForNonExistingKey) {
|
|
||||||
EXPECT_FALSE(_object.containsKey("hello"));
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(JsonObject_Container_Tests, ContainsKeyReturnsTrueForDefinedValue) {
|
|
||||||
_object.set("hello", 42);
|
|
||||||
EXPECT_TRUE(_object.containsKey("hello"));
|
|
||||||
}
|
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user